summaryrefslogtreecommitdiff
path: root/src/ircd.c
blob: 26a36e2592483427ca7c89bc1dd5bd70cc76285b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/* Main ircd functions.
 *
 * (C) 2003-2009 Anope Team
 * Contact us at team@anope.org
 *
 * Please read COPYING and README for further details.
 *
 * Based on the original code of Epona by Lara.
 * Based on the original code of Services by Andy Church.
 *
 * $Id$
 *
 */

#include "services.h"
#include "extern.h"

IRCDProto *ircdproto;
IRCDModes ircd_modes;

/**
 * Globals we want from the protocol file
 **/
IRCDVar *ircd;
IRCDCAPAB *ircdcap;
char *version_protocol;
CBModeInfo *cbmodeinfos;
CUMode cumodes[128];
char *flood_mode_char_set;
char *flood_mode_char_remove;
CBMode cbmodes[128];
CMMode cmmodes[128];
char csmodes[128];
int UseTSMODE;

void pmodule_ircd_proto(IRCDProto *proto)
{
	ircdproto = proto;
}

void anope_SendNumeric(const char *source, int numeric, const char *dest, const char *fmt, ...)
{
	va_list args;
	char buf[BUFSIZE] = "";
	if (fmt) {
		va_start(args, fmt);
		vsnprintf(buf, BUFSIZE - 1, fmt, args);
		va_end(args);
	}
	ircdproto->SendNumeric(source, numeric, dest, *buf ? buf : NULL);
}

/**
 * Set routines for modules to set the prefered function for dealing with things.
 **/
void pmodule_ircd_var(IRCDVar * ircdvar)
{
	ircd = ircdvar;
}

void pmodule_ircd_cap(IRCDCAPAB * cap)
{
	ircdcap = cap;
}

void pmodule_ircd_version(const char *version)
{
	version_protocol = sstrdup(version);
}

void pmodule_ircd_cbmodeinfos(CBModeInfo * modeinfos)
{
	cbmodeinfos = modeinfos;
}

void pmodule_ircd_cumodes(CUMode modes[128])
{
	int i = 0;
	for (i = 0; i < 128; i++) {
		cumodes[i] = modes[i];
	}
}

void pmodule_ircd_flood_mode_char_set(const char *mode)
{
	flood_mode_char_set = sstrdup(mode);
}

void pmodule_ircd_flood_mode_char_remove(const char *mode)
{
	flood_mode_char_remove = sstrdup(mode);
}

void pmodule_ircd_cbmodes(CBMode modes[128])
{
	int i = 0;
	for (i = 0; i < 128; i++) {
		cbmodes[i] = modes[i];
	}
}

void pmodule_ircd_cmmodes(CMMode modes[128])
{
	int i = 0;
	for (i = 0; i < 128; i++) {
		cmmodes[i] = modes[i];
	}
}

void pmodule_ircd_csmodes(char mode[128])
{
	int i = 0;
	for (i = 0; i < 128; i++) {
		csmodes[i] = mode[i];
	}
}

void pmodule_ircd_useTSMode(int use)
{
	UseTSMODE = use;
}

/** mode stuff */

void pmodule_invis_umode(int mode)
{
	ircd_modes.user_invis = mode;
}

void pmodule_oper_umode(int mode)
{
	ircd_modes.user_oper = mode;
}

void pmodule_invite_cmode(int mode)
{
	ircd_modes.chan_invite = mode;
}

void pmodule_secret_cmode(int mode)
{
	ircd_modes.chan_secret = mode;
}

void pmodule_private_cmode(int mode)
{
	ircd_modes.chan_private = mode;
}

void pmodule_key_mode(int mode)
{
	ircd_modes.chan_key = mode;
}

void pmodule_limit_mode(int mode)
{
	ircd_modes.chan_limit = mode;
}

int anope_get_invis_mode()
{
	return ircd_modes.user_invis;
}

int anope_get_oper_mode()
{
	return ircd_modes.user_oper;
}

int anope_get_invite_mode()
{
	return ircd_modes.chan_invite;
}

int anope_get_secret_mode()
{
	return ircd_modes.chan_secret;
}

int anope_get_private_mode()
{
	return ircd_modes.chan_private;
}

int anope_get_key_mode()
{
	return ircd_modes.chan_key;
}

int anope_get_limit_mode()
{
	return ircd_modes.chan_limit;
}