ircd.c

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