ircd.c

Go to the documentation of this file.
00001 /* Main ircd functions.
00002  *
00003  * (C) 2003-2013 Anope Team
00004  * Contact us at team@anope.org
00005  *
00006  * Please read COPYING and README for further details.
00007  *
00008  * Based on the original code of Epona by Lara.
00009  * Based on the original code of Services by Andy Church.
00010  *
00011  *
00012  */
00013 
00014 #include "services.h"
00015 #include "extern.h"
00016 
00017 IRCDProto ircdproto;
00018 IRCDModes ircd_modes;
00019 
00023 IRCDVar *ircd;
00024 IRCDCAPAB *ircdcap;
00025 char *version_protocol;
00026 CBModeInfo *cbmodeinfos;
00027 CUMode cumodes[128];
00028 char *flood_mode_char_set;
00029 char *flood_mode_char_remove;
00030 CBMode cbmodes[128];
00031 CMMode cmmodes[128];
00032 char csmodes[128];
00033 int UseTSMODE;
00034 
00038 void initIrcdProto()
00039 {
00040     ircdproto.ircd_set_mod_current_buffer = NULL;
00041     ircdproto.ircd_set_umode = NULL;
00042     ircdproto.ircd_cmd_svsnoop = NULL;
00043     ircdproto.ircd_cmd_remove_akill = NULL;
00044     ircdproto.ircd_cmd_topic = NULL;
00045     ircdproto.ircd_cmd_vhost_off = NULL;
00046     ircdproto.ircd_cmd_akill = NULL;
00047     ircdproto.ircd_cmd_svskill = NULL;
00048     ircdproto.ircd_cmd_svsmode = NULL;
00049     ircdproto.ircd_cmd_372 = NULL;
00050     ircdproto.ircd_cmd_372_error = NULL;
00051     ircdproto.ircd_cmd_375 = NULL;
00052     ircdproto.ircd_cmd_376 = NULL;
00053     ircdproto.ircd_cmd_nick = NULL;
00054     ircdproto.ircd_cmd_guest_nick = NULL;
00055     ircdproto.ircd_cmd_mode = NULL;
00056     ircdproto.ircd_cmd_bot_nick = NULL;
00057     ircdproto.ircd_cmd_kick = NULL;
00058     ircdproto.ircd_cmd_notice_ops = NULL;
00059     ircdproto.ircd_cmd_notice = NULL;
00060     ircdproto.ircd_cmd_notice2 = NULL;
00061     ircdproto.ircd_cmd_privmsg = NULL;
00062     ircdproto.ircd_cmd_privmsg2 = NULL;
00063     ircdproto.ircd_cmd_serv_notice = NULL;
00064     ircdproto.ircd_cmd_serv_privmsg = NULL;
00065     ircdproto.ircd_cmd_bot_chan_mode = NULL;
00066     ircdproto.ircd_cmd_351 = NULL;
00067     ircdproto.ircd_cmd_quit = NULL;
00068     ircdproto.ircd_cmd_pong = NULL;
00069     ircdproto.ircd_cmd_join = NULL;
00070     ircdproto.ircd_cmd_unsqline = NULL;
00071     ircdproto.ircd_cmd_invite = NULL;
00072     ircdproto.ircd_cmd_part = NULL;
00073     ircdproto.ircd_cmd_391 = NULL;
00074     ircdproto.ircd_cmd_250 = NULL;
00075     ircdproto.ircd_cmd_307 = NULL;
00076     ircdproto.ircd_cmd_311 = NULL;
00077     ircdproto.ircd_cmd_312 = NULL;
00078     ircdproto.ircd_cmd_317 = NULL;
00079     ircdproto.ircd_cmd_219 = NULL;
00080     ircdproto.ircd_cmd_401 = NULL;
00081     ircdproto.ircd_cmd_318 = NULL;
00082     ircdproto.ircd_cmd_242 = NULL;
00083     ircdproto.ircd_cmd_243 = NULL;
00084     ircdproto.ircd_cmd_211 = NULL;
00085     ircdproto.ircd_cmd_global = NULL;
00086     ircdproto.ircd_cmd_global_legacy = NULL;
00087     ircdproto.ircd_cmd_sqline = NULL;
00088     ircdproto.ircd_cmd_squit = NULL;
00089     ircdproto.ircd_cmd_svso = NULL;
00090     ircdproto.ircd_cmd_chg_nick = NULL;
00091     ircdproto.ircd_cmd_svsnick = NULL;
00092     ircdproto.ircd_cmd_vhost_on = NULL;
00093     ircdproto.ircd_cmd_connect = NULL;
00094     ircdproto.ircd_cmd_bob = NULL;
00095     ircdproto.ircd_cmd_svshold = NULL;
00096     ircdproto.ircd_cmd_release_svshold = NULL;
00097     ircdproto.ircd_cmd_unsgline = NULL;
00098     ircdproto.ircd_cmd_unszline = NULL;
00099     ircdproto.ircd_cmd_szline = NULL;
00100     ircdproto.ircd_cmd_sgline = NULL;
00101     ircdproto.ircd_cmd_unban = NULL;
00102     ircdproto.ircd_cmd_svsmode_chan = NULL;
00103     ircdproto.ircd_cmd_svid_umode = NULL;
00104     ircdproto.ircd_cmd_nc_change = NULL;
00105     ircdproto.ircd_cmd_svid_umode2 = NULL;
00106     ircdproto.ircd_cmd_svid_umode3 = NULL;
00107     ircdproto.ircd_cmd_svsjoin = NULL;
00108     ircdproto.ircd_cmd_svspart = NULL;
00109     ircdproto.ircd_cmd_swhois = NULL;
00110     ircdproto.ircd_cmd_eob = NULL;
00111     ircdproto.ircd_flood_mode_check = NULL;
00112     ircdproto.ircd_cmd_jupe = NULL;
00113     ircdproto.ircd_valid_nick = NULL;
00114     ircdproto.ircd_valid_chan = NULL;
00115     ircdproto.ircd_cmd_ctcp = NULL;
00116     ircdproto.ircd_jointhrottle_mode_check = NULL;
00117 }
00118 
00119 /* Special function, returns 1 if executed, 0 if not */
00120 int anope_set_mod_current_buffer(int ac, char **av)
00121 {
00122     if (ircdproto.ircd_set_mod_current_buffer) {
00123         ircdproto.ircd_set_mod_current_buffer(ac, av);
00124         return 1;
00125     }
00126 
00127     return 0;
00128 }
00129 
00130 void anope_set_umode(User * user, int ac, char **av)
00131 {
00132     ircdproto.ircd_set_umode(user, ac, av);
00133 }
00134 
00135 void anope_cmd_svsnoop(char *server, int set)
00136 {
00137     ircdproto.ircd_cmd_svsnoop(server, set);
00138 }
00139 
00140 void anope_cmd_remove_akill(char *user, char *host)
00141 {
00142     ircdproto.ircd_cmd_remove_akill(user, host);
00143 }
00144 
00145 void anope_cmd_topic(char *whosets, char *chan, char *whosetit,
00146                      char *topic, time_t when)
00147 {
00148     ircdproto.ircd_cmd_topic(whosets, chan, whosetit, topic, when);
00149 }
00150 
00151 void anope_cmd_vhost_off(User * u)
00152 {
00153     ircdproto.ircd_cmd_vhost_off(u);
00154 }
00155 
00156 void anope_cmd_akill(char *user, char *host, char *who, time_t when,
00157                      time_t expires, char *reason)
00158 {
00159     ircdproto.ircd_cmd_akill(user, host, who, when, expires, reason);
00160 }
00161 
00162 void anope_cmd_svskill(char *source, char *user, const char *fmt, ...)
00163 {
00164     va_list args;
00165     char buf[BUFSIZE];
00166     *buf = '\0';
00167     if (fmt) {
00168         va_start(args, fmt);
00169         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00170         va_end(args);
00171     }
00172     ircdproto.ircd_cmd_svskill(source, user, buf);
00173 }
00174 
00175 void anope_cmd_svsmode(User * u, int ac, char **av)
00176 {
00177     ircdproto.ircd_cmd_svsmode(u, ac, av);
00178 }
00179 
00180 void anope_cmd_372(char *source, char *msg)
00181 {
00182     ircdproto.ircd_cmd_372(source, msg);
00183 }
00184 
00185 void anope_cmd_372_error(char *source)
00186 {
00187     ircdproto.ircd_cmd_372_error(source);
00188 }
00189 
00190 void anope_cmd_375(char *source)
00191 {
00192     ircdproto.ircd_cmd_375(source);
00193 }
00194 
00195 void anope_cmd_376(char *source)
00196 {
00197     ircdproto.ircd_cmd_376(source);
00198 }
00199 
00200 void anope_cmd_nick(char *nick, char *name, char *modes)
00201 {
00202     ircdproto.ircd_cmd_nick(nick, name, modes);
00203 }
00204 
00205 void anope_cmd_guest_nick(char *nick, char *user, char *host, char *real,
00206                           char *modes)
00207 {
00208     ircdproto.ircd_cmd_guest_nick(nick, user, host, real, modes);
00209 }
00210 
00211 void anope_cmd_mode(char *source, char *dest, const char *fmt, ...)
00212 {
00213     va_list args;
00214     char buf[BUFSIZE];
00215     *buf = '\0';
00216     if (fmt) {
00217         va_start(args, fmt);
00218         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00219         va_end(args);
00220     }
00221     ircdproto.ircd_cmd_mode(source, dest, buf);
00222 }
00223 
00224 void anope_cmd_bot_nick(char *nick, char *user, char *host, char *real,
00225                         char *modes)
00226 {
00227     ircdproto.ircd_cmd_bot_nick(nick, user, host, real, modes);
00228 }
00229 
00230 void anope_cmd_kick(char *source, char *chan, char *user, const char *fmt,
00231                     ...)
00232 {
00233     va_list args;
00234     char buf[BUFSIZE];
00235     *buf = '\0';
00236     if (fmt) {
00237         va_start(args, fmt);
00238         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00239         va_end(args);
00240     }
00241     ircdproto.ircd_cmd_kick(source, chan, user, buf);
00242 }
00243 
00244 void anope_cmd_notice_ops(char *source, char *dest, const char *fmt, ...)
00245 {
00246     va_list args;
00247     char buf[BUFSIZE];
00248     *buf = '\0';
00249     if (fmt) {
00250         va_start(args, fmt);
00251         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00252         va_end(args);
00253     }
00254     ircdproto.ircd_cmd_notice_ops(source, dest, buf);
00255 }
00256 
00257 void anope_cmd_notice(char *source, char *dest, const char *fmt, ...)
00258 {
00259     va_list args;
00260     char buf[BUFSIZE];
00261     *buf = '\0';
00262     if (fmt) {
00263         va_start(args, fmt);
00264         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00265         va_end(args);
00266     }
00267     ircdproto.ircd_cmd_notice(source, dest, buf);
00268 }
00269 
00270 void anope_cmd_notice2(char *source, char *dest, char *msg)
00271 {
00272     ircdproto.ircd_cmd_notice2(source, dest, msg);
00273 }
00274 
00275 void anope_cmd_action(char *source, char *dest, const char *fmt, ...) 
00276 {
00277     va_list args;
00278     char buf[BUFSIZE];
00279     char actionbuf[BUFSIZE];
00280     *buf = '\0';
00281     *actionbuf = '\0';
00282     if (fmt) {
00283         va_start(args, fmt);
00284         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00285         va_end(args);
00286     }
00287 
00288     if (!*buf) {
00289         return;
00290     }
00291     snprintf(actionbuf, BUFSIZE - 1, "%cACTION %s %c", 1, buf, 1);
00292     ircdproto.ircd_cmd_privmsg(source, dest, actionbuf);
00293 }
00294 
00295 
00296 void anope_cmd_privmsg(char *source, char *dest, const char *fmt, ...)
00297 {
00298     va_list args;
00299     char buf[BUFSIZE];
00300     *buf = '\0';
00301     if (fmt) {
00302         va_start(args, fmt);
00303         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00304         va_end(args);
00305     }
00306     ircdproto.ircd_cmd_privmsg(source, dest, buf);
00307 }
00308 
00309 void anope_cmd_privmsg2(char *source, char *dest, char *msg)
00310 {
00311     ircdproto.ircd_cmd_privmsg2(source, dest, msg);
00312 }
00313 
00314 void anope_cmd_serv_notice(char *source, char *dest, char *msg)
00315 {
00316     ircdproto.ircd_cmd_serv_notice(source, dest, msg);
00317 }
00318 
00319 void anope_cmd_serv_privmsg(char *source, char *dest, char *msg)
00320 {
00321     ircdproto.ircd_cmd_serv_privmsg(source, dest, msg);
00322 }
00323 
00324 void anope_cmd_bot_chan_mode(char *nick, char *chan)
00325 {
00326     ircdproto.ircd_cmd_bot_chan_mode(nick, chan);
00327 }
00328 
00329 void anope_cmd_351(char *source)
00330 {
00331     ircdproto.ircd_cmd_351(source);
00332 }
00333 
00334 void anope_cmd_quit(char *source, const char *fmt, ...)
00335 {
00336     va_list args;
00337     char buf[BUFSIZE];
00338     *buf = '\0';
00339     if (fmt) {
00340         va_start(args, fmt);
00341         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00342         va_end(args);
00343     }
00344     ircdproto.ircd_cmd_quit(source, buf);
00345 }
00346 
00347 void anope_cmd_pong(char *servname, char *who)
00348 {
00349     ircdproto.ircd_cmd_pong(servname, who);
00350 }
00351 
00352 void anope_cmd_join(char *user, char *channel, time_t chantime)
00353 {
00354     ircdproto.ircd_cmd_join(user, channel, chantime);
00355 }
00356 
00357 void anope_cmd_unsqline(char *user)
00358 {
00359     ircdproto.ircd_cmd_unsqline(user);
00360 }
00361 
00362 void anope_cmd_invite(char *source, char *chan, char *nick)
00363 {
00364     ircdproto.ircd_cmd_invite(source, chan, nick);
00365 }
00366 
00367 void anope_cmd_part(char *nick, char *chan, const char *fmt, ...)
00368 {
00369     if (fmt) {
00370         va_list args;
00371         char buf[BUFSIZE];
00372         *buf = '\0';
00373         va_start(args, fmt);
00374         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00375         va_end(args);
00376         ircdproto.ircd_cmd_part(nick, chan, buf);
00377     } else {
00378         ircdproto.ircd_cmd_part(nick, chan, NULL);
00379     }
00380 }
00381 
00382 void anope_cmd_391(char *source, char *timestr)
00383 {
00384     ircdproto.ircd_cmd_391(source, timestr);
00385 }
00386 
00387 void anope_cmd_250(const char *fmt, ...)
00388 {
00389     va_list args;
00390     char buf[BUFSIZE];
00391     *buf = '\0';
00392     if (fmt) {
00393         va_start(args, fmt);
00394         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00395         va_end(args);
00396     }
00397     ircdproto.ircd_cmd_250(buf);
00398 }
00399 
00400 void anope_cmd_307(const char *fmt, ...)
00401 {
00402     va_list args;
00403     char buf[BUFSIZE];
00404     *buf = '\0';
00405     if (fmt) {
00406         va_start(args, fmt);
00407         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00408         va_end(args);
00409     }
00410     ircdproto.ircd_cmd_307(buf);
00411 }
00412 
00413 void anope_cmd_311(const char *fmt, ...)
00414 {
00415     va_list args;
00416     char buf[BUFSIZE];
00417     *buf = '\0';
00418     if (fmt) {
00419         va_start(args, fmt);
00420         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00421         va_end(args);
00422     }
00423     ircdproto.ircd_cmd_311(buf);
00424 }
00425 
00426 void anope_cmd_312(const char *fmt, ...)
00427 {
00428     va_list args;
00429     char buf[BUFSIZE];
00430     *buf = '\0';
00431     if (fmt) {
00432         va_start(args, fmt);
00433         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00434         va_end(args);
00435     }
00436     ircdproto.ircd_cmd_312(buf);
00437 }
00438 
00439 void anope_cmd_317(const char *fmt, ...)
00440 {
00441     va_list args;
00442     char buf[BUFSIZE];
00443     *buf = '\0';
00444     if (fmt) {
00445         va_start(args, fmt);
00446         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00447         va_end(args);
00448     }
00449     ircdproto.ircd_cmd_317(buf);
00450 }
00451 
00452 void anope_cmd_219(char *source, char *letter)
00453 {
00454     ircdproto.ircd_cmd_219(source, letter);
00455 }
00456 
00457 void anope_cmd_401(char *source, char *who)
00458 {
00459     ircdproto.ircd_cmd_401(source, who);
00460 }
00461 
00462 void anope_cmd_318(char *source, char *who)
00463 {
00464     ircdproto.ircd_cmd_318(source, who);
00465 }
00466 
00467 void anope_cmd_242(const char *fmt, ...)
00468 {
00469     va_list args;
00470     char buf[BUFSIZE];
00471     *buf = '\0';
00472     if (fmt) {
00473         va_start(args, fmt);
00474         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00475         va_end(args);
00476     }
00477     ircdproto.ircd_cmd_242(buf);
00478 }
00479 
00480 void anope_cmd_243(const char *fmt, ...)
00481 {
00482     va_list args;
00483     char buf[BUFSIZE];
00484     *buf = '\0';
00485     if (fmt) {
00486         va_start(args, fmt);
00487         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00488         va_end(args);
00489     }
00490     ircdproto.ircd_cmd_243(buf);
00491 }
00492 
00493 void anope_cmd_211(const char *fmt, ...)
00494 {
00495     va_list args;
00496     char buf[BUFSIZE];
00497     *buf = '\0';
00498     if (fmt) {
00499         va_start(args, fmt);
00500         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00501         va_end(args);
00502     }
00503     ircdproto.ircd_cmd_211(buf);
00504 }
00505 
00506 void anope_cmd_global(char *source, const char *fmt, ...)
00507 {
00508     va_list args;
00509     char buf[BUFSIZE];
00510     *buf = '\0';
00511     if (fmt) {
00512         va_start(args, fmt);
00513         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00514         va_end(args);
00515     }
00516     ircdproto.ircd_cmd_global(source, buf);
00517 }
00518 
00519 void anope_cmd_global_legacy(char *source, char *fmt)
00520 {
00521     ircdproto.ircd_cmd_global_legacy(source, fmt);
00522 }
00523 
00524 void anope_cmd_sqline(char *mask, char *reason)
00525 {
00526     ircdproto.ircd_cmd_sqline(mask, reason);
00527 }
00528 
00529 void anope_cmd_squit(char *servname, char *message)
00530 {
00531     ircdproto.ircd_cmd_squit(servname, message);
00532 }
00533 
00534 void anope_cmd_svso(char *source, char *nick, char *flag)
00535 {
00536     ircdproto.ircd_cmd_svso(source, nick, flag);
00537 }
00538 
00539 void anope_cmd_chg_nick(char *oldnick, char *newnick)
00540 {
00541     ircdproto.ircd_cmd_chg_nick(oldnick, newnick);
00542 }
00543 
00544 void anope_cmd_svsnick(char *source, char *guest, time_t when)
00545 {
00546     ircdproto.ircd_cmd_svsnick(source, guest, when);
00547 }
00548 
00549 void anope_cmd_vhost_on(char *nick, char *vIdent, char *vhost)
00550 {
00551     ircdproto.ircd_cmd_vhost_on(nick, vIdent, vhost);
00552 }
00553 
00554 void anope_cmd_connect(int servernum)
00555 {
00556     ircdproto.ircd_cmd_connect(servernum);
00557 }
00558 
00559 void anope_cmd_bob()
00560 {
00561     ircdproto.ircd_cmd_bob();
00562 }
00563 
00564 void anope_cmd_svshold(char *nick)
00565 {
00566     ircdproto.ircd_cmd_svshold(nick);
00567 }
00568 
00569 void anope_cmd_release_svshold(char *nick)
00570 {
00571     ircdproto.ircd_cmd_release_svshold(nick);
00572 }
00573 
00574 void anope_cmd_unsgline(char *mask)
00575 {
00576     ircdproto.ircd_cmd_unsgline(mask);
00577 }
00578 
00579 void anope_cmd_unszline(char *mask)
00580 {
00581     ircdproto.ircd_cmd_unszline(mask);
00582 }
00583 
00584 void anope_cmd_szline(char *mask, char *reason, char *whom)
00585 {
00586     ircdproto.ircd_cmd_szline(mask, reason, whom);
00587 }
00588 
00589 void anope_cmd_sgline(char *mask, char *reason)
00590 {
00591     ircdproto.ircd_cmd_sgline(mask, reason);
00592 }
00593 
00594 void anope_cmd_unban(char *name, char *nick)
00595 {
00596     ircdproto.ircd_cmd_unban(name, nick);
00597 }
00598 
00599 void anope_cmd_svsmode_chan(char *name, char *mode, char *nick)
00600 {
00601     ircdproto.ircd_cmd_svsmode_chan(name, mode, nick);
00602 }
00603 
00604 void anope_cmd_svid_umode(char *nick, time_t ts)
00605 {
00606     ircdproto.ircd_cmd_svid_umode(nick, ts);
00607 }
00608 
00609 void anope_cmd_nc_change(User * u)
00610 {
00611     ircdproto.ircd_cmd_nc_change(u);
00612 }
00613 
00614 void anope_cmd_svid_umode2(User * u, char *ts)
00615 {
00616     ircdproto.ircd_cmd_svid_umode2(u, ts);
00617 }
00618 
00619 void anope_cmd_svid_umode3(User * u, char *ts)
00620 {
00621     ircdproto.ircd_cmd_svid_umode3(u, ts);
00622 }
00623 
00624 void anope_cmd_svsjoin(char *source, char *nick, char *chan, char *param)
00625 {
00626     ircdproto.ircd_cmd_svsjoin(source, nick, chan, param);
00627 }
00628 
00629 void anope_cmd_svspart(char *source, char *nick, char *chan)
00630 {
00631     ircdproto.ircd_cmd_svspart(source, nick, chan);
00632 }
00633 
00634 void anope_cmd_swhois(char *source, char *who, char *mask)
00635 {
00636     ircdproto.ircd_cmd_swhois(source, who, mask);
00637 }
00638 
00639 void anope_cmd_eob()
00640 {
00641     ircdproto.ircd_cmd_eob();
00642 }
00643 
00644 int anope_flood_mode_check(char *value)
00645 {
00646     return ircdproto.ircd_flood_mode_check(value);
00647 }
00648 
00649 int anope_jointhrottle_mode_check(char *value)
00650 {
00651     if (ircd->jmode)
00652         return ircdproto.ircd_jointhrottle_mode_check(value);
00653     return 0;
00654 }
00655 
00656 void anope_cmd_jupe(char *jserver, char *who, char *reason)
00657 {
00658     ircdproto.ircd_cmd_jupe(jserver, who, reason);
00659 }
00660 
00661 int anope_valid_nick(char *nick)
00662 {
00663     return ircdproto.ircd_valid_nick(nick);
00664 }
00665 
00666 int anope_valid_chan(char *chan)
00667 {
00668     return ircdproto.ircd_valid_chan(chan);
00669 }
00670 
00671 
00672 void anope_cmd_ctcp(char *source, char *dest, const char *fmt, ...)
00673 {
00674     va_list args;
00675     char buf[BUFSIZE];
00676     *buf = '\0';
00677     if (fmt) {
00678         va_start(args, fmt);
00679         vsnprintf(buf, BUFSIZE - 1, fmt, args);
00680         va_end(args);
00681     }
00682     ircdproto.ircd_cmd_ctcp(source, dest, buf);
00683 }
00684 
00685 
00686 
00691 void pmodule_set_mod_current_buffer(void (*func) (int ac, char **av))
00692 {
00693     ircdproto.ircd_set_mod_current_buffer = func;
00694 }
00695 
00696 void pmodule_cmd_svsnoop(void (*func) (char *server, int set))
00697 {
00698     ircdproto.ircd_cmd_svsnoop = func;
00699 }
00700 
00701 void pmodule_cmd_remove_akill(void (*func) (char *user, char *host))
00702 {
00703     ircdproto.ircd_cmd_remove_akill = func;
00704 }
00705 
00706 void pmodule_cmd_topic(void (*func)
00707                         (char *whosets, char *chan, char *whosetit,
00708                          char *topic, time_t when))
00709 {
00710     ircdproto.ircd_cmd_topic = func;
00711 }
00712 
00713 void pmodule_cmd_vhost_off(void (*func) (User * u))
00714 {
00715     ircdproto.ircd_cmd_vhost_off = func;
00716 }
00717 
00718 void pmodule_cmd_akill(void (*func)
00719                         (char *user, char *host, char *who, time_t when,
00720                          time_t expires, char *reason))
00721 {
00722     ircdproto.ircd_cmd_akill = func;
00723 }
00724 
00725 void
00726 pmodule_cmd_svskill(void (*func) (char *source, char *user, char *buf))
00727 {
00728     ircdproto.ircd_cmd_svskill = func;
00729 }
00730 
00731 void pmodule_cmd_svsmode(void (*func) (User * u, int ac, char **av))
00732 {
00733     ircdproto.ircd_cmd_svsmode = func;
00734 }
00735 
00736 void pmodule_cmd_372(void (*func) (char *source, char *msg))
00737 {
00738     ircdproto.ircd_cmd_372 = func;
00739 }
00740 
00741 void pmodule_cmd_372_error(void (*func) (char *source))
00742 {
00743     ircdproto.ircd_cmd_372_error = func;
00744 }
00745 
00746 void pmodule_cmd_375(void (*func) (char *source))
00747 {
00748     ircdproto.ircd_cmd_375 = func;
00749 }
00750 
00751 void pmodule_cmd_376(void (*func) (char *source))
00752 {
00753     ircdproto.ircd_cmd_376 = func;
00754 }
00755 
00756 void pmodule_cmd_nick(void (*func) (char *nick, char *name, char *modes))
00757 {
00758     ircdproto.ircd_cmd_nick = func;
00759 }
00760 
00761 void pmodule_cmd_guest_nick(void (*func)
00762                              (char *nick, char *user, char *host,
00763                               char *real, char *modes))
00764 {
00765     ircdproto.ircd_cmd_guest_nick = func;
00766 }
00767 
00768 void pmodule_cmd_mode(void (*func) (char *source, char *dest, char *buf))
00769 {
00770     ircdproto.ircd_cmd_mode = func;
00771 }
00772 
00773 void pmodule_cmd_bot_nick(void (*func)
00774                            (char *nick, char *user, char *host, char *real,
00775                             char *modes))
00776 {
00777     ircdproto.ircd_cmd_bot_nick = func;
00778 }
00779 
00780 void pmodule_cmd_kick(void (*func)
00781                        (char *source, char *chan, char *user, char *buf))
00782 {
00783     ircdproto.ircd_cmd_kick = func;
00784 }
00785 
00786 void
00787 pmodule_cmd_notice_ops(void (*func) (char *source, char *dest, char *buf))
00788 {
00789     ircdproto.ircd_cmd_notice_ops = func;
00790 }
00791 
00792 void pmodule_cmd_notice(void (*func) (char *source, char *dest, char *buf))
00793 {
00794     ircdproto.ircd_cmd_notice = func;
00795 }
00796 
00797 void
00798 pmodule_cmd_notice2(void (*func) (char *source, char *dest, char *msg))
00799 {
00800     ircdproto.ircd_cmd_notice2 = func;
00801 }
00802 
00803 void
00804 pmodule_cmd_privmsg(void (*func) (char *source, char *dest, char *buf))
00805 {
00806     ircdproto.ircd_cmd_privmsg = func;
00807 }
00808 
00809 void
00810 pmodule_cmd_privmsg2(void (*func) (char *source, char *dest, char *msg))
00811 {
00812     ircdproto.ircd_cmd_privmsg2 = func;
00813 }
00814 
00815 void
00816 pmodule_cmd_serv_notice(void (*func) (char *source, char *dest, char *msg))
00817 {
00818     ircdproto.ircd_cmd_serv_notice = func;
00819 }
00820 
00821 void pmodule_cmd_serv_privmsg(void (*func)
00822                                (char *source, char *dest, char *msg))
00823 {
00824     ircdproto.ircd_cmd_serv_privmsg = func;
00825 }
00826 
00827 void pmodule_cmd_bot_chan_mode(void (*func) (char *nick, char *chan))
00828 {
00829     ircdproto.ircd_cmd_bot_chan_mode = func;
00830 }
00831 
00832 void pmodule_cmd_351(void (*func) (char *source))
00833 {
00834     ircdproto.ircd_cmd_351 = func;
00835 }
00836 
00837 void pmodule_cmd_quit(void (*func) (char *source, char *buf))
00838 {
00839     ircdproto.ircd_cmd_quit = func;
00840 }
00841 
00842 void pmodule_cmd_pong(void (*func) (char *servname, char *who))
00843 {
00844     ircdproto.ircd_cmd_pong = func;
00845 }
00846 
00847 void
00848 pmodule_cmd_join(void (*func) (char *user, char *channel, time_t chantime))
00849 {
00850     ircdproto.ircd_cmd_join = func;
00851 }
00852 
00853 void pmodule_cmd_unsqline(void (*func) (char *user))
00854 {
00855     ircdproto.ircd_cmd_unsqline = func;
00856 }
00857 
00858 void
00859 pmodule_cmd_invite(void (*func) (char *source, char *chan, char *nick))
00860 {
00861     ircdproto.ircd_cmd_invite = func;
00862 }
00863 
00864 void pmodule_cmd_part(void (*func) (char *nick, char *chan, char *buf))
00865 {
00866     ircdproto.ircd_cmd_part = func;
00867 }
00868 
00869 void pmodule_cmd_391(void (*func) (char *source, char *timestr))
00870 {
00871     ircdproto.ircd_cmd_391 = func;
00872 }
00873 
00874 void pmodule_cmd_250(void (*func) (char *buf))
00875 {
00876     ircdproto.ircd_cmd_250 = func;
00877 }
00878 
00879 void pmodule_cmd_307(void (*func) (char *buf))
00880 {
00881     ircdproto.ircd_cmd_307 = func;
00882 }
00883 
00884 void pmodule_cmd_311(void (*func) (char *buf))
00885 {
00886     ircdproto.ircd_cmd_311 = func;
00887 }
00888 
00889 void pmodule_cmd_312(void (*func) (char *buf))
00890 {
00891     ircdproto.ircd_cmd_312 = func;
00892 }
00893 
00894 void pmodule_cmd_317(void (*func) (char *buf))
00895 {
00896     ircdproto.ircd_cmd_317 = func;
00897 }
00898 
00899 void pmodule_cmd_219(void (*func) (char *source, char *letter))
00900 {
00901     ircdproto.ircd_cmd_219 = func;
00902 }
00903 
00904 void pmodule_cmd_401(void (*func) (char *source, char *who))
00905 {
00906     ircdproto.ircd_cmd_401 = func;
00907 }
00908 
00909 void pmodule_cmd_318(void (*func) (char *source, char *who))
00910 {
00911     ircdproto.ircd_cmd_318 = func;
00912 }
00913 
00914 void pmodule_cmd_242(void (*func) (char *buf))
00915 {
00916     ircdproto.ircd_cmd_242 = func;
00917 }
00918 
00919 void pmodule_cmd_243(void (*func) (char *buf))
00920 {
00921     ircdproto.ircd_cmd_243 = func;
00922 }
00923 
00924 void pmodule_cmd_211(void (*func) (char *buf))
00925 {
00926     ircdproto.ircd_cmd_211 = func;
00927 }
00928 
00929 void pmodule_cmd_global(void (*func) (char *source, char *buf))
00930 {
00931     ircdproto.ircd_cmd_global = func;
00932 }
00933 
00934 void pmodule_cmd_global_legacy(void (*func) (char *source, char *fmt))
00935 {
00936     ircdproto.ircd_cmd_global_legacy = func;
00937 }
00938 
00939 void pmodule_cmd_sqline(void (*func) (char *mask, char *reason))
00940 {
00941     ircdproto.ircd_cmd_sqline = func;
00942 }
00943 
00944 void pmodule_cmd_squit(void (*func) (char *servname, char *message))
00945 {
00946     ircdproto.ircd_cmd_squit = func;
00947 }
00948 
00949 void pmodule_cmd_svso(void (*func) (char *source, char *nick, char *flag))
00950 {
00951     ircdproto.ircd_cmd_svso = func;
00952 }
00953 
00954 void pmodule_cmd_chg_nick(void (*func) (char *oldnick, char *newnick))
00955 {
00956     ircdproto.ircd_cmd_chg_nick = func;
00957 }
00958 
00959 void
00960 pmodule_cmd_svsnick(void (*func) (char *source, char *guest, time_t when))
00961 {
00962     ircdproto.ircd_cmd_svsnick = func;
00963 }
00964 
00965 void
00966 pmodule_cmd_vhost_on(void (*func) (char *nick, char *vIdent, char *vhost))
00967 {
00968     ircdproto.ircd_cmd_vhost_on = func;
00969 }
00970 
00971 void pmodule_cmd_connect(void (*func) (int servernum))
00972 {
00973     ircdproto.ircd_cmd_connect = func;
00974 }
00975 
00976 void pmodule_cmd_bob(void (*func) ())
00977 {
00978     ircdproto.ircd_cmd_bob = func;
00979 }
00980 
00981 void pmodule_cmd_svshold(void (*func) (char *nick))
00982 {
00983     ircdproto.ircd_cmd_svshold = func;
00984 }
00985 
00986 void pmodule_cmd_release_svshold(void (*func) (char *nick))
00987 {
00988     ircdproto.ircd_cmd_release_svshold = func;
00989 }
00990 
00991 void pmodule_cmd_unsgline(void (*func) (char *mask))
00992 {
00993     ircdproto.ircd_cmd_unsgline = func;
00994 }
00995 
00996 void pmodule_cmd_unszline(void (*func) (char *mask))
00997 {
00998     ircdproto.ircd_cmd_unszline = func;
00999 }
01000 
01001 void
01002 pmodule_cmd_szline(void (*func) (char *mask, char *reason, char *whom))
01003 {
01004     ircdproto.ircd_cmd_szline = func;
01005 }
01006 
01007 void pmodule_cmd_sgline(void (*func) (char *mask, char *reason))
01008 {
01009     ircdproto.ircd_cmd_sgline = func;
01010 }
01011 
01012 void pmodule_cmd_unban(void (*func) (char *name, char *nick))
01013 {
01014     ircdproto.ircd_cmd_unban = func;
01015 }
01016 
01017 void
01018 pmodule_cmd_svsmode_chan(void (*func) (char *name, char *mode, char *nick))
01019 {
01020     ircdproto.ircd_cmd_svsmode_chan = func;
01021 }
01022 
01023 void pmodule_cmd_svid_umode(void (*func) (char *nick, time_t ts))
01024 {
01025     ircdproto.ircd_cmd_svid_umode = func;
01026 }
01027 
01028 void pmodule_cmd_nc_change(void (*func) (User * u))
01029 {
01030     ircdproto.ircd_cmd_nc_change = func;
01031 }
01032 
01033 void pmodule_cmd_svid_umode2(void (*func) (User * u, char *ts))
01034 {
01035     ircdproto.ircd_cmd_svid_umode2 = func;
01036 }
01037 
01038 void pmodule_cmd_svid_umode3(void (*func) (User * u, char *ts))
01039 {
01040     ircdproto.ircd_cmd_svid_umode3 = func;
01041 }
01042 
01043 void pmodule_cmd_ctcp(void (*func) (char *source, char *dest, char *buf))
01044 {
01045     ircdproto.ircd_cmd_ctcp = func;
01046 }
01047 
01048 void pmodule_cmd_svsjoin(void (*func)
01049                           (char *source, char *nick, char *chan,
01050                            char *param))
01051 {
01052     ircdproto.ircd_cmd_svsjoin = func;
01053 }
01054 
01055 void
01056 pmodule_cmd_svspart(void (*func) (char *source, char *nick, char *chan))
01057 {
01058     ircdproto.ircd_cmd_svspart = func;
01059 }
01060 
01061 void pmodule_cmd_swhois(void (*func) (char *source, char *who, char *mask))
01062 {
01063     ircdproto.ircd_cmd_swhois = func;
01064 }
01065 
01066 void pmodule_cmd_eob(void (*func) ())
01067 {
01068     ircdproto.ircd_cmd_eob = func;
01069 }
01070 
01071 void
01072 pmodule_cmd_jupe(void (*func) (char *jserver, char *who, char *reason))
01073 {
01074     ircdproto.ircd_cmd_jupe = func;
01075 }
01076 
01077 void pmodule_set_umode(void (*func) (User * user, int ac, char **av))
01078 {
01079     ircdproto.ircd_set_umode = func;
01080 }
01081 
01082 void pmodule_valid_nick(int (*func) (char *nick))
01083 {
01084     ircdproto.ircd_valid_nick = func;
01085 }
01086 
01087 void pmodule_valid_chan(int (*func) (char *chan))
01088 {
01089     ircdproto.ircd_valid_chan = func;
01090 }
01091 
01092 void pmodule_flood_mode_check(int (*func) (char *value))
01093 {
01094     ircdproto.ircd_flood_mode_check = func;
01095 }
01096 
01097 void pmodule_ircd_var(IRCDVar * ircdvar)
01098 {
01099     ircd = ircdvar;
01100 }
01101 
01102 void pmodule_ircd_cap(IRCDCAPAB * cap)
01103 {
01104     ircdcap = cap;
01105 }
01106 
01107 void pmodule_ircd_version(char *version)
01108 {
01109     version_protocol = sstrdup(version);
01110 }
01111 
01112 void pmodule_ircd_cbmodeinfos(CBModeInfo * modeinfos)
01113 {
01114     cbmodeinfos = modeinfos;
01115 }
01116 
01117 void pmodule_ircd_cumodes(CUMode modes[128])
01118 {
01119     int i = 0;
01120     for (i = 0; i < 128; i++) {
01121         cumodes[i] = modes[i];
01122     }
01123 }
01124 
01125 void pmodule_ircd_flood_mode_char_set(char *mode)
01126 {
01127     flood_mode_char_set = sstrdup(mode);
01128 }
01129 
01130 void pmodule_ircd_flood_mode_char_remove(char *mode)
01131 {
01132     flood_mode_char_remove = sstrdup(mode);
01133 }
01134 
01135 void pmodule_ircd_cbmodes(CBMode modes[128])
01136 {
01137     int i = 0;
01138     for (i = 0; i < 128; i++) {
01139         cbmodes[i] = modes[i];
01140     }
01141 }
01142 
01143 void pmodule_ircd_cmmodes(CMMode modes[128])
01144 {
01145     int i = 0;
01146     for (i = 0; i < 128; i++) {
01147         cmmodes[i] = modes[i];
01148     }
01149 }
01150 
01151 void pmodule_ircd_csmodes(char mode[128])
01152 {
01153     int i = 0;
01154     for (i = 0; i < 128; i++) {
01155         csmodes[i] = mode[i];
01156     }
01157 }
01158 
01159 void pmodule_jointhrottle_mode_check(int (*func) (char *value))
01160 {
01161     ircdproto.ircd_jointhrottle_mode_check = func;
01162 }
01163 
01164 void pmodule_ircd_useTSMode(int use)
01165 {
01166     UseTSMODE = use;
01167 }
01168 
01171 void pmodule_invis_umode(int mode)
01172 {
01173     ircd_modes.user_invis = mode;
01174 }
01175 
01176 void pmodule_oper_umode(int mode)
01177 {
01178     ircd_modes.user_oper = mode;
01179 }
01180 
01181 void pmodule_invite_cmode(int mode)
01182 {
01183     ircd_modes.chan_invite = mode;
01184 }
01185 
01186 void pmodule_secret_cmode(int mode)
01187 {
01188     ircd_modes.chan_secret = mode;
01189 }
01190 
01191 void pmodule_private_cmode(int mode)
01192 {
01193     ircd_modes.chan_private = mode;
01194 }
01195 
01196 void pmodule_key_mode(int mode)
01197 {
01198     ircd_modes.chan_key = mode;
01199 }
01200 
01201 void pmodule_limit_mode(int mode)
01202 {
01203     ircd_modes.chan_limit = mode;
01204 }
01205 
01206 void pmodule_permchan_mode(int mode)
01207 {
01208     ircd_modes.chan_perm = mode;
01209 }
01210 
01211 int anope_get_invis_mode()
01212 {
01213     return ircd_modes.user_invis;
01214 }
01215 
01216 int anope_get_oper_mode()
01217 {
01218     return ircd_modes.user_oper;
01219 }
01220 
01221 int anope_get_invite_mode()
01222 {
01223     return ircd_modes.chan_invite;
01224 }
01225 
01226 int anope_get_secret_mode()
01227 {
01228     return ircd_modes.chan_secret;
01229 }
01230 
01231 int anope_get_private_mode()
01232 {
01233     return ircd_modes.chan_private;
01234 }
01235 
01236 int anope_get_key_mode()
01237 {
01238     return ircd_modes.chan_key;
01239 }
01240 
01241 int anope_get_limit_mode()
01242 {
01243     return ircd_modes.chan_limit;
01244 }
01245 
01246 int anope_get_permchan_mode()
01247 {
01248     return ircd_modes.chan_perm;
01249 }
01250