From 76755725e58e2d2a0e65b40a8f7b8c49217d092a Mon Sep 17 00:00:00 2001 From: rburchell Date: Tue, 31 Mar 2009 14:51:27 +0000 Subject: These are (now) horribly out of date. When we're ready to implement what ones we need, we can grab them back out of SVN (or more likely just do them from scratch..) git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2228 5417fbe8-f217-4b02-8779-1006273d7864 --- src/protocol/obsolete/charybdis.c | 1354 --------------------------- src/protocol/obsolete/hybrid.c | 1566 ------------------------------- src/protocol/obsolete/hybrid.h | 118 --- src/protocol/obsolete/plexus3.c | 1853 ------------------------------------- src/protocol/obsolete/plexus3.h | 115 --- src/protocol/obsolete/ptlink.c | 1799 ----------------------------------- src/protocol/obsolete/ptlink.h | 154 --- src/protocol/obsolete/rageircd.c | 1678 --------------------------------- src/protocol/obsolete/rageircd.h | 117 --- src/protocol/obsolete/solidircd.c | 1709 ---------------------------------- src/protocol/obsolete/solidircd.h | 141 --- src/protocol/obsolete/ultimate3.c | 1817 ------------------------------------ src/protocol/obsolete/ultimate3.h | 127 --- src/protocol/obsolete/viagra.c | 1715 ---------------------------------- src/protocol/obsolete/viagra.h | 136 --- 15 files changed, 14399 deletions(-) delete mode 100644 src/protocol/obsolete/charybdis.c delete mode 100644 src/protocol/obsolete/hybrid.c delete mode 100644 src/protocol/obsolete/hybrid.h delete mode 100644 src/protocol/obsolete/plexus3.c delete mode 100644 src/protocol/obsolete/plexus3.h delete mode 100644 src/protocol/obsolete/ptlink.c delete mode 100644 src/protocol/obsolete/ptlink.h delete mode 100644 src/protocol/obsolete/rageircd.c delete mode 100644 src/protocol/obsolete/rageircd.h delete mode 100644 src/protocol/obsolete/solidircd.c delete mode 100644 src/protocol/obsolete/solidircd.h delete mode 100644 src/protocol/obsolete/ultimate3.c delete mode 100644 src/protocol/obsolete/ultimate3.h delete mode 100644 src/protocol/obsolete/viagra.c delete mode 100644 src/protocol/obsolete/viagra.h (limited to 'src') diff --git a/src/protocol/obsolete/charybdis.c b/src/protocol/obsolete/charybdis.c deleted file mode 100644 index 9ba1aadff..000000000 --- a/src/protocol/obsolete/charybdis.c +++ /dev/null @@ -1,1354 +0,0 @@ -/* Charybdis IRCD functions - * - * (C) 2006 William Pitcock - * (C) 2003-2009 Anope Team - * Contact us at team@anope.org - * - * Please read COPYING and README for furhter details. - * - * Based on the original code of Epona by Lara. - * Based on the original code of Services by Andy Church. - */ - -#include "services.h" -#include "pseudo.h" - - -#define UMODE_a 0x00000001 /* umode a - admin */ -#define UMODE_g 0x00000002 /* umode g - caller ID */ -#define UMODE_i 0x00000004 /* umode i - invisible */ -#define UMODE_o 0x00000008 /* umode o - operator */ -#define UMODE_z 0x00000010 /* umode u - operwall */ -#define UMODE_w 0x00000020 /* umode w - wallops */ -#define UMODE_s 0x00000040 /* umode s - server notices */ -#define UMODE_Q 0x00000080 /* umode Q - block forwarding */ -#define UMODE_R 0x00000200 /* umode R - reject messages from unauthenticated users */ -#define UMODE_S 0x00000400 /* umode S - network service */ -#define UMODE_l 0x00020000 /* umode l - locops */ - - -#define CMODE_i 0x00000001 -#define CMODE_m 0x00000002 -#define CMODE_n 0x00000004 -#define CMODE_p 0x00000008 -#define CMODE_s 0x00000010 -#define CMODE_t 0x00000020 -#define CMODE_k 0x00000040 -#define CMODE_l 0x00000080 -#define CMODE_f 0x00000100 -#define CMODE_c 0x00000200 -#define CMODE_r 0x00000400 -#define CMODE_P 0x00000800 -#define CMODE_g 0x00001000 -#define CMODE_z 0x00002000 -#define CMODE_j 0x00004000 -#define CMODE_F 0x00008000 -#define CMODE_L 0x00010000 -#define CMODE_Q 0x00020000 - -#define DEFAULT_MLOCK CMODE_n | CMODE_t - -IRCDVar myIrcd[] = { - {"Charybdis 1.0+", /* ircd name */ - "+oiS", /* Modes used by pseudoclients */ - 2, /* Chan Max Symbols */ - "-cilmnpstrgzQF", /* Modes to Remove */ - "+o", /* Channel Umode used by Botserv bots */ - 1, /* SVSNICK */ - 1, /* Vhost */ - 0, /* Has Owner */ - NULL, /* Mode to set for an owner */ - NULL, /* Mode to unset for an owner */ - NULL, /* Mode to set for chan admin */ - NULL, /* Mode to unset for chan admin */ - NULL, /* Mode On Reg */ - NULL, /* Mode on ID for Roots */ - NULL, /* Mode on ID for Admins */ - NULL, /* Mode on ID for Opers */ - NULL, /* Mode on UnReg */ - NULL, /* Mode on Nick Change */ - 1, /* Supports SGlines */ - 1, /* Supports SQlines */ - 1, /* Supports SZlines */ - 0, /* Supports Halfop +h */ - 3, /* Number of server args */ - 1, /* Join 2 Set */ - 1, /* Join 2 Message */ - 1, /* Has exceptions +e */ - 0, /* TS Topic Forward */ - 0, /* TS Topci Backward */ - 0, /* Protected Umode */ - 0, /* Has Admin */ - 1, /* Chan SQlines */ - 0, /* Quit on Kill */ - 0, /* SVSMODE unban */ - 0, /* Has Protect */ - 0, /* Reverse */ - 0, /* Chan Reg */ - 0, /* Channel Mode */ - 0, /* vidents */ - 1, /* svshold */ - 0, /* time stamp on mode */ - 0, /* NICKIP */ - 0, /* UMODE */ - 0, /* O:LINE */ - 1, /* VHOST ON NICK */ - 0, /* Change RealName */ - CMODE_p, /* No Knock */ - 0, /* Admin Only */ - DEFAULT_MLOCK, /* Default MLOCK */ - 0, /* Vhost Mode */ - 1, /* +f */ - 1, /* +L */ - CMODE_j, /* +f Mode */ - CMODE_f, /* +L Mode (+f ) */ - 1, /* On nick change check if they could be identified */ - 0, /* No Knock requires +i */ - NULL, /* CAPAB Chan Modes */ - 0, /* We support TOKENS */ - 0, /* TIME STAMPS are BASE64 */ - 1, /* +I support */ - 0, /* SJOIN ban char */ - 0, /* SJOIN except char */ - 0, /* SJOIN invite char */ - 0, /* Can remove User Channel Modes with SVSMODE */ - 0, /* Sglines are not enforced until user reconnects */ - NULL, /* vhost char */ - 1, /* ts6 */ - 0, /* support helper umode */ - 0, /* p10 */ - NULL, /* character set */ - 0, /* reports sync state */ - 1, /* CIDR channelbans */ - "$$", /* TLD Prefix for Global */ - } - , - {NULL} -}; - -IRCDCAPAB myIrcdcap[] = { - { - 0, /* NOQUIT */ - 0, /* TSMODE */ - 0, /* UNCONNECT */ - 0, /* NICKIP */ - 0, /* SJOIN */ - CAPAB_ZIP, /* ZIP */ - 0, /* BURST */ - CAPAB_TS5, /* TS5 */ - 0, /* TS3 */ - 0, /* DKEY */ - 0, /* PT4 */ - 0, /* SCS */ - CAPAB_QS, /* QS */ - CAPAB_UID, /* UID */ - CAPAB_KNOCK, /* KNOCK */ - 0, /* CLIENT */ - 0, /* IPV6 */ - 0, /* SSJ5 */ - 0, /* SN2 */ - 0, /* TOKEN */ - 0, /* VHOST */ - 0, /* SSJ3 */ - 0, /* NICK2 */ - 0, /* UMODE2 */ - 0, /* VL */ - 0, /* TLKEXT */ - 0, /* DODKEY */ - 0, /* DOZIP */ - 0, 0, 0} -}; - -unsigned long umodes[128] = { - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused, Unused, Horzontal Tab */ - 0, 0, 0, /* Line Feed, Unused, Unused */ - 0, 0, 0, /* Carriage Return, Unused, Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused, Unused, Space */ - 0, 0, 0, /* ! " # */ - 0, 0, 0, /* $ % & */ - 0, 0, 0, /* ! ( ) */ - 0, 0, 0, /* * + , */ - 0, 0, 0, /* - . / */ - 0, 0, /* 0 1 */ - 0, 0, /* 2 3 */ - 0, 0, /* 4 5 */ - 0, 0, /* 6 7 */ - 0, 0, /* 8 9 */ - 0, 0, /* : ; */ - 0, 0, 0, /* < = > */ - 0, 0, /* ? @ */ - 0, 0, 0, /* A B C */ - 0, 0, 0, /* D E F */ - 0, 0, 0, /* G H I */ - 0, 0, 0, /* J K L */ - 0, 0, 0, /* M N O */ - 0, UMODE_Q, UMODE_R, /* P Q R */ - UMODE_S, 0, 0, /* S T U */ - 0, 0, 0, /* V W X */ - 0, /* Y */ - 0, /* Z */ - 0, 0, 0, /* [ \ ] */ - 0, 0, 0, /* ^ _ ` */ - UMODE_a, 0, 0, /* a b c */ - 0, 0, 0, /* d e f */ - UMODE_g, 0, UMODE_i, /* g h i */ - 0, 0, UMODE_l, /* j k l */ - 0, 0, UMODE_o, /* m n o */ - 0, 0, 0, /* p q r */ - UMODE_s, 0, 0, /* s t u */ - 0, UMODE_w, 0, /* v w x */ - 0, /* y */ - UMODE_z, /* z */ - 0, 0, 0, /* { | } */ - 0, 0 /* ~ � */ -}; - - -char myCsmodes[128] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, - 0, - 0, 0, 0, - 0, - 0, 0, 0, 0, - 0, - - 'v', 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 'o', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -CMMode myCmmodes[128] = { - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, /* BCD */ - {NULL}, {NULL}, {NULL}, /* EFG */ - {NULL}, /* H */ - {add_invite, del_invite}, - {NULL}, /* J */ - {NULL}, {NULL}, {NULL}, /* KLM */ - {NULL}, {NULL}, {NULL}, /* NOP */ - {NULL}, {NULL}, {NULL}, /* QRS */ - {NULL}, {NULL}, {NULL}, /* TUV */ - {NULL}, {NULL}, {NULL}, /* WXY */ - {NULL}, /* Z */ - {NULL}, {NULL}, /* (char 91 - 92) */ - {NULL}, {NULL}, {NULL}, /* (char 93 - 95) */ - {NULL}, /* ` (char 96) */ - {NULL}, /* a (char 97) */ - {add_ban, del_ban}, - {NULL}, - {NULL}, - {add_exception, del_exception}, - {NULL}, - {NULL}, - {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL} -}; - - -CBMode myCbmodes[128] = { - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, - {0}, /* A */ - {0}, /* B */ - {0}, /* C */ - {0}, /* D */ - {0}, /* E */ - {CMODE_F, 0, NULL, NULL}, /* F */ - {0}, /* G */ - {0}, /* H */ - {0}, /* I */ - {0}, /* J */ - {0}, /* K */ - {CMODE_L, CBM_NO_USER_MLOCK, NULL, NULL}, /* L */ - {0}, /* M */ - {0}, /* N */ - {0}, /* O */ - {CMODE_P, CBM_NO_USER_MLOCK, NULL, NULL}, /* P */ - {CMODE_Q, 0, NULL, NULL}, /* Q */ - {0}, /* R */ - {0}, /* S */ - {0}, /* T */ - {0}, /* U */ - {0}, /* V */ - {0}, /* W */ - {0}, /* X */ - {0}, /* Y */ - {0}, /* Z */ - {0}, {0}, {0}, {0}, {0}, {0}, - {0}, - {0}, /* b */ - {CMODE_c, 0, NULL, NULL}, /* c */ - {0}, /* d */ - {0}, /* e */ - {CMODE_f, 0, set_redirect, cs_set_redirect}, /* f */ - {CMODE_g, 0, NULL, NULL}, /* g */ - {0}, /* h */ - {CMODE_i, 0, NULL, NULL}, - {CMODE_j, 0, set_flood, cs_set_flood}, /* j */ - {CMODE_k, 0, chan_set_key, cs_set_key}, - {CMODE_l, CBM_MINUS_NO_ARG, set_limit, cs_set_limit}, - {CMODE_m, 0, NULL, NULL}, - {CMODE_n, 0, NULL, NULL}, - {0}, /* o */ - {CMODE_p, 0, NULL, NULL}, - {0}, /* q */ - {CMODE_r, 0, NULL, NULL}, - {CMODE_s, 0, NULL, NULL}, - {CMODE_t, 0, NULL, NULL}, - {0}, - {0}, /* v */ - {0}, /* w */ - {0}, /* x */ - {0}, /* y */ - {CMODE_z, 0, NULL, NULL}, /* z */ - {0}, {0}, {0}, {0} -}; - -CBModeInfo myCbmodeinfos[] = { - {'c', CMODE_c, 0, NULL, NULL}, - {'f', CMODE_f, CBM_MINUS_NO_ARG, get_redirect, cs_get_redirect}, - {'g', CMODE_g, 0, NULL, NULL}, - {'i', CMODE_i, 0, NULL, NULL}, - {'j', CMODE_j, CBM_MINUS_NO_ARG, get_flood, cs_get_flood}, - {'k', CMODE_k, 0, get_key, cs_get_key}, - {'l', CMODE_l, CBM_MINUS_NO_ARG, get_limit, cs_get_limit}, - {'m', CMODE_m, 0, NULL, NULL}, - {'n', CMODE_n, 0, NULL, NULL}, - {'p', CMODE_p, 0, NULL, NULL}, - {'r', CMODE_r, 0, NULL, NULL}, - {'s', CMODE_s, 0, NULL, NULL}, - {'t', CMODE_t, 0, NULL, NULL}, - {'z', CMODE_z, 0, NULL, NULL}, - {'F', CMODE_F, 0, NULL, NULL}, - {'L', CMODE_L, 0, NULL, NULL}, - {'P', CMODE_P, 0, NULL, NULL}, - {'Q', CMODE_Q, 0, NULL, NULL}, - {0} -}; - - -CUMode myCumodes[128] = { - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - - {0}, - - {0}, /* a */ - {0}, /* b */ - {0}, /* c */ - {0}, /* d */ - {0}, /* e */ - {0}, /* f */ - {0}, /* g */ - {0}, - {0}, /* i */ - {0}, /* j */ - {0}, /* k */ - {0}, /* l */ - {0}, /* m */ - {0}, /* n */ - {CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op}, - {0}, /* p */ - {0}, /* q */ - {0}, /* r */ - {0}, /* s */ - {0}, /* t */ - {0}, /* u */ - {CUS_VOICE, 0, NULL}, - {0}, /* w */ - {0}, /* x */ - {0}, /* y */ - {0}, /* z */ - {0}, {0}, {0}, {0}, {0} -}; - -/*******************************************************************/ - - - -/* - * SVINFO - * parv[0] = sender prefix - * parv[1] = TS_CURRENT for the server - * parv[2] = TS_MIN for the server - * parv[3] = server is standalone or connected to non-TS only - * parv[4] = server's idea of UTC time - */ -void charybdis_cmd_svinfo() -{ - send_cmd(NULL, "SVINFO 6 3 0 :%ld", (long int) time(NULL)); -} - -void charybdis_cmd_svsinfo() -{ - -} - -/* CAPAB */ -/* - QS - Can handle quit storm removal - EX - Can do channel +e exemptions - CHW - Can do channel wall @# - LL - Can do lazy links - IE - Can do invite exceptions - EOB - Can do EOB message - KLN - Can do KLINE message - GLN - Can do GLINE message - HUB - This server is a HUB - UID - Can do UIDs - ZIP - Can do ZIPlinks - ENC - Can do ENCrypted links - KNOCK - supports KNOCK - TBURST - supports TBURST - PARA - supports invite broadcasting for +p - ENCAP - supports message encapsulation - SERVICES - supports services-oriented TS6 extensions - EUID - supports EUID and non-ENCAP CHGHOST -*/ -void charybdis_cmd_capab() -{ - send_cmd(NULL, - "CAPAB :QS EX CHW IE KLN GLN KNOCK TB UNKLN CLUSTER ENCAP SERVICES EUID"); -} - -/* PASS */ -void charybdis_cmd_pass(const char *pass) -{ - if (UseTS6) { - send_cmd(NULL, "PASS %s TS 6 :%s", pass, TS6SID); - } else { - send_cmd(NULL, "PASS %s :TS", pass); - } -} - -void charybdis_cmd_tmode(const char *source, const char *dest, const char *fmt, ...) -{ - va_list args; - char buf[BUFSIZE]; - *buf = '\0'; - - if (fmt) { - va_start(args, fmt); - vsnprintf(buf, BUFSIZE - 1, fmt, args); - va_end(args); - } - if (!*buf) { - return; - } - - send_cmd(NULL, "MODE %s %s", dest, buf); -} - -class CharybdisProto : public IRCDProto -{ - void ProcessUsermodes(User *user, int ac, const char **av) - { - int add = 1; /* 1 if adding modes, 0 if deleting */ - const char *modes = av[0]; - --ac; - if (debug) alog("debug: Changing mode for %s to %s", user->nick, modes); - while (*modes) { - /* This looks better, much better than "add ? (do_add) : (do_remove)". - * At least this is readable without paying much attention :) -GD */ - if (add) user->mode |= umodes[static_cast(*modes)]; - else user->mode &= ~umodes[static_cast(*modes)]; - switch (*modes++) { - case '+': - add = 1; - break; - case '-': - add = 0; - break; - case 'o': - if (add) { - ++opcnt; - if (WallOper) ircdproto->SendGlobops(s_OperServ, "\2%s\2 is now an IRC operator.", user->nick); - display_news(user, NEWS_OPER); - } - else --opcnt; - } - } - } - - void SendGlobopsInternal(const char *source, const char *buf) - { - if (!buf) return; - if (source) { - BotInfo *bi = findbot(source); - if (bi) { - send_cmd(UseTS6 ? bi->uid.c_str() : source, "OPERWALL :%s", buf); - return; - } - } - // The original code uses WALLOPS here, but above is OPERWALL, Ratbox uses OPERWALL as well, so I changed this one as well -- CyberBotX - send_cmd(UseTS6 ? TS6SID : ServerName, "OPERWALL :%s", buf); - } - - void SendSQLine(const char *mask, const char *reason) - { - BotInfo *bi = findbot(s_OperServ); - send_cmd(UseTS6 ? (bi ? bi->uid.c_str() : s_OperServ) : s_OperServ, "RESV * %s :%s", mask, reason); - } - - void SendSGLineDel(const char *mask) - { - BotInfo *bi = findbot(s_OperServ); - send_cmd(UseTS6 ? (bi ? bi->uid.c_str() : s_OperServ) : s_OperServ, "UNXLINE * %s", mask); - } - - void SendSGLine(const char *mask, const char *reason) - { - BotInfo *bi = findbot(s_OperServ); - send_cmd(UseTS6 ? (bi ? bi->uid.c_str() : s_OperServ) : s_OperServ, "XLINE * %s 0 :%s", mask, reason); - } - - void SendAkillDel(const char *user, const char *host) - { - BotInfo *bi = findbot(s_OperServ); - send_cmd(UseTS6 ? (bi ? bi->uid.c_str() : s_OperServ) : s_OperServ, "UNKLINE * %s %s", user, host); - } - - void SendVhostDel(User *u) - { - send_cmd(UseTS6 ? TS6SID : ServerName, "ENCAP * CHGHOST %s :%s", u->nick, u->host); - } - - void SendVhost(const char *nick, const char *vIdent, const char *vhost) - { - send_cmd(UseTS6 ? TS6SID : ServerName, "ENCAP * CHGHOST %s :%s", nick, vhost); - } - - void SendSQLineDel(const char *user) - { - BotInfo *bi = findbot(s_OperServ); - send_cmd(UseTS6 ? (bi ? bi->uid.c_str() : s_OperServ) : s_OperServ, "UNRESV * %s", user); - } - - void SendJoin(BotInfo *user, const char *channel, time_t chantime) - { - send_cmd(NULL, "SJOIN %ld %s + :%s", static_cast(chantime), channel, UseTS6 ? user->uid.c_str() : user->nick); - } - - /* - oper: the nick of the oper performing the kline - target.server: the server(s) this kline is destined for - duration: the duration if a tkline, 0 if permanent. - user: the 'user' portion of the kline - host: the 'host' portion of the kline - reason: the reason for the kline. - */ - - void SendAkill(const char *user, const char *host, const char *who, time_t when, time_t expires, const char *reason) - { - BotInfo *bi = findbot(s_OperServ); - send_cmd(UseTS6 ? (bi ? bi->uid.c_str() : s_OperServ) : s_OperServ, "KLINE * %ld %s %s :%s", static_cast(expires - time(NULL)), user, host, reason); - } - - void SendSVSKillInternal(const char *source, const char *user, const char *buf) - { - if (!source || !user || !buf) return; - BotInfo *bi = findbot(source); - User *u = finduser(user); - send_cmd(UseTS6 ? (bi ? bi->uid.c_str() : source) : source, "KILL %s :%s", UseTS6 ? (u ? u->uid : user) : user, buf); - } - - void SendSVSMode(User *u, int ac, const char **av) - { - send_cmd(UseTS6 ? TS6SID : ServerName, "SVSMODE %s %s", u->nick, av[0]); - } - - /* SERVER name hop descript */ - void SendServer(const char *servname, int hop, const char *descript) - { - send_cmd(NULL, "SERVER %s %d :%s", servname, hop, descript); - } - - void SendConnect() - { - /* Make myself known to myself in the serverlist */ - if (UseTS6) me_server = new_server(NULL, ServerName, ServerDesc, SERVER_ISME, TS6SID); - else me_server = new_server(NULL, ServerName, ServerDesc, SERVER_ISME, NULL); - if (servernum == 1) charybdis_cmd_pass(RemotePassword); - else if (servernum == 2) charybdis_cmd_pass(RemotePassword2); - else if (servernum == 3) charybdis_cmd_pass(RemotePassword3); - charybdis_cmd_capab(); - SendServer(ServerName, 1, ServerDesc); - charybdis_cmd_svinfo(); - } - - void SendClientIntroduction(const char *nick, const char *user, const char *host, const char *real, const char *modes, const char *uid) - { - EnforceQlinedNick(nick, NULL); - if (UseTS6) { - const char *uidbuf = ts6_uid_retrieve(); - send_cmd(TS6SID, "UID %s 1 %ld %s %s %s 0 %s :%s", nick, static_cast(time(NULL)), modes, user, host, uidbuf, real); - } - else send_cmd(NULL, "NICK %s 1 %ld %s %s %s %s :%s", nick, static_cast(time(NULL)), modes, user, host, ServerName, real); - SendSQLine(nick, "Reserved for services"); - } - - void SendPartInternal(BotInfo *nick, const char *chan, const char *buf) - { - if (buf) send_cmd(UseTS6 ? nick->uid : nick->nick, "PART %s :%s", chan, buf); - else send_cmd(UseTS6 ? nick->uid : nick->nick, "PART %s", chan); - } - - void SendNumericInternal(const char *source, int numeric, const char *dest, const char *buf) - { - // This might need to be set in the call to SendNumeric instead of here, will review later -- CyberBotX - send_cmd(UseTS6 ? TS6SID : source, "%03d %s %s", numeric, dest, buf); - } - - void SendModeInternal(BotInfo *source, const char *dest, const char *buf) - { - if (!buf) return; - if (source) { - send_cmd(UseTS6 ? source->uid.c_str() : source->nick, "MODE %s %s", dest, buf); - } - else send_cmd(source->nick, "MODE %s %s", dest, buf); - } - - void SendKickInternal(BotInfo *source, const char *chan, const char *user, const char *buf) - { - User *u = finduser(user); - if (buf) send_cmd(UseTS6 ? source->uid.c_str() : source->nick, "KICK %s %s :%s", chan, UseTS6 ? (u ? u->uid : user) : user, buf); - else send_cmd(UseTS6 ? source->uid.c_str() : source->nick, "KICK %s %s", chan, UseTS6 ? (u ? u->uid : user) : user); - } - - void SendNoticeChanopsInternal(BotInfo *source, const char *dest, const char *buf) - { - if (!buf) return; - send_cmd(UseTS6 ? source->uid.c_str() : source->nick, "NOTICE @%s :%s", dest, buf); - } - - void SendBotOp(const char *nick, const char *chan) - { - if (UseTS6) { - User *u = finduser(nick); - charybdis_cmd_tmode(nick, chan, "%s %s", ircd->botchanumode, u ? u->uid : nick); - } - else SendMode(findbot(nick), chan, "%s %s", ircd->botchanumode, nick); - } - - /* QUIT */ - void SendQuitInternal(BotInfo *source, const char *buf) - { - if (buf) send_cmd(UseTS6 ? source->uid : source->nick, "QUIT :%s", buf); - else send_cmd(UseTS6 ? source->uid : source->nick, "QUIT"); - } - - /* PONG */ - void SendPong(const char *servname, const char *who) - { - /* deliberately no SID in the first parameter -- jilles */ - if (UseTS6) send_cmd(TS6SID, "PONG %s :%s", servname, who); - else send_cmd(servname, "PONG %s :%s", servname, who); - } - - /* INVITE */ - void SendInvite(BotInfo *source, const char *chan, const char *nick) - { - if (!source || !chan || !nick) return; - User *u = finduser(nick); - send_cmd(UseTS6 ? source->uid : source->nick, "INVITE %s %s", UseTS6 ? (u ? u->uid : nick) : nick, chan); - } - - /* SVSHOLD - set */ - void SendSVSHold(const char *nick) - { - send_cmd(NULL, "ENCAP * NICKDELAY 300 %s", nick); - } - - /* SVSHOLD - release */ - void SendSVSHoldDel(const char *nick) - { - send_cmd(NULL, "ENCAP * NICKDELAY 0 %s", nick); - } - - /* SVSNICK */ - void SendForceNickChange(const char *oldnick, const char *newnick, time_t when) - { - if (!oldnick || !newnick) return; - User *u = finduser(oldnick); - if (!u) return; - send_cmd(NULL, "ENCAP %s RSFNC %s %s %ld %ld", u->server->name, u->nick, newnick, static_cast(when), static_cast(u->timestamp)); - } - - int IsFloodModeParamValid(const char *value) - { - char *dp, *end; - if (value && *value != ':' && strtoul((*value == '*' ? value + 1 : value), &dp, 10) > 0 && *dp == ':' && *(++dp) && strtoul(dp, &end, 10) > 0 && !*end) return 1; - else return 0; - } - - /* - 1 = valid nick - 0 = nick is in valid - */ - int IsNickValid(const char *nick) - { - /* TS6 Save extension -Certus */ - if (isdigit(*nick)) return 0; - return 1; - } - - void SendTopic(BotInfo *bi, const char *chan, const char *whosetit, const char *topic, time_t when) - { - send_cmd(UseTS6 ? bi->uid : bi->nick, "TOPIC %s :%s", chan, topic); - } -} ircd_proto; - - - - -int anope_event_sjoin(const char *source, int ac, const char **av) -{ - do_sjoin(source, ac, av); - return MOD_CONT; -} - -/* - Non TS6 - - av[0] = nick - av[1] = hop - av[2] = ts - av[3] = modes - av[4] = user - av[5] = host - av[6] = server - av[7] = info - - TS6 - av[0] = nick - av[1] = hop - av[2] = ts - av[3] = modes - av[4] = user - av[5] = host - av[6] = IP - av[7] = UID - av[8] = info - -*/ -int anope_event_nick(const char *source, int ac, const char **av) -{ - Server *s; - User *user; - - if (UseTS6 && ac == 9) { - s = findserver_uid(servlist, source); - /* Source is always the server */ - user = do_nick("", av[0], av[4], av[5], s->name, av[8], - strtoul(av[2], NULL, 10), 0, 0, NULL, av[7]); - if (user) { - ircdproto->ProcessUsermodes(user, 1, &av[3]); - } - } else { - if (ac != 2) { - user = do_nick(source, av[0], av[4], av[5], av[6], av[7], - strtoul(av[2], NULL, 10), 0, 0, NULL, NULL); - if (user) - ircdproto->ProcessUsermodes(user, 1, &av[3]); - } else { - do_nick(source, av[0], NULL, NULL, NULL, NULL, - strtoul(av[1], NULL, 10), 0, 0, NULL, NULL); - } - } - return MOD_CONT; -} - -/* - TS6 - av[0] = nick - av[1] = hop - av[2] = ts - av[3] = modes - av[4] = user - av[5] = vhost - av[6] = IP - av[7] = UID - ac[8] = host or * - ac[9] = services login - av[10] = info - -*/ -int anope_event_euid(const char *source, int ac, const char **av) -{ - Server *s; - User *user; - time_t ts; - - if (UseTS6 && ac == 11) { - s = findserver_uid(servlist, source); - /* Source is always the server */ - ts = strtoul(av[2], NULL, 10); - user = do_nick("", av[0], av[4], !strcmp(av[8], "*") ? av[5] : av[8], s->name, av[10], - ts, !stricmp(av[0], av[9]) ? ts : 0, 0, av[5], av[7]); - if (user) { - ircdproto->ProcessUsermodes(user, 1, &av[3]); - } - } - return MOD_CONT; -} - -int anope_event_topic(const char *source, int ac, const char **av) -{ - User *u; - - if (ac == 4) { - do_topic(source, ac, av); - } else { - Channel *c = findchan(av[0]); - time_t topic_time = time(NULL); - - if (!c) { - if (debug) { - alog("debug: TOPIC %s for nonexistent channel %s", - merge_args(ac - 1, av + 1), av[0]); - } - return MOD_CONT; - } - - if (check_topiclock(c, topic_time)) - return MOD_CONT; - - if (c->topic) { - free(c->topic); - c->topic = NULL; - } - if (ac > 1 && *av[1]) - c->topic = sstrdup(av[1]); - - if (UseTS6) { - u = find_byuid(source); - if (u) { - strscpy(c->topic_setter, u->nick, sizeof(c->topic_setter)); - } else { - strscpy(c->topic_setter, source, sizeof(c->topic_setter)); - } - } else { - strscpy(c->topic_setter, source, sizeof(c->topic_setter)); - } - c->topic_time = topic_time; - - record_topic(av[0]); - - if (ac > 1 && *av[1]) - send_event(EVENT_TOPIC_UPDATED, 2, av[0], av[1]); - else - send_event(EVENT_TOPIC_UPDATED, 2, av[0], ""); - } - return MOD_CONT; -} - -int anope_event_tburst(const char *source, int ac, const char **av) -{ - char *setter; - Channel *c; - time_t topic_time; - - if (ac != 4) { - return MOD_CONT; - } - - setter = myStrGetToken(av[2], '!', 0); - - c = findchan(av[0]); - topic_time = strtol(av[1], NULL, 10); - - if (!c) { - if (debug) { - alog("debug: TOPIC %s for nonexistent channel %s", - merge_args(ac - 1, av + 1), av[0]); - } - if (setter) - free(setter); - return MOD_CONT; - } - - if (check_topiclock(c, topic_time)) { - if (setter) - free(setter); - return MOD_CONT; - } - - if (c->topic) { - free(c->topic); - c->topic = NULL; - } - if (ac > 1 && *av[3]) - c->topic = sstrdup(av[3]); - - strscpy(c->topic_setter, setter, sizeof(c->topic_setter)); - c->topic_time = topic_time; - - record_topic(av[0]); - - if (ac > 1 && *av[3]) - send_event(EVENT_TOPIC_UPDATED, 2, av[0], av[3]); - else - send_event(EVENT_TOPIC_UPDATED, 2, av[0], ""); - - if (setter) - free(setter); - - return MOD_CONT; -} - -int anope_event_436(const char *source, int ac, const char **av) -{ - if (ac < 1) - return MOD_CONT; - - m_nickcoll(av[0]); - return MOD_CONT; -} - -int anope_event_ping(const char *source, int ac, const char **av) -{ - if (ac < 1) - return MOD_CONT; - ircdproto->SendPong(ac > 1 ? av[1] : ServerName, av[0]); - return MOD_CONT; -} - -int anope_event_away(const char *source, int ac, const char **av) -{ - User *u = NULL; - - if (UseTS6) { - u = find_byuid(source); - } - - m_away((UseTS6 ? (u ? u->nick : source) : source), - (ac ? av[0] : NULL)); - return MOD_CONT; -} - -int anope_event_kill(const char *source, int ac, const char **av) -{ - User *u = NULL; - - if (ac != 2) - return MOD_CONT; - - if (UseTS6) { - u = find_byuid(av[0]); - } - - m_kill(u ? u->nick : av[0], av[1]); - return MOD_CONT; -} - -int anope_event_kick(const char *source, int ac, const char **av) -{ - if (ac != 3) - return MOD_CONT; - do_kick(source, ac, av); - return MOD_CONT; -} - -int anope_event_join(const char *source, int ac, const char **av) -{ - if (ac != 1) { - /* ignore cmodes in JOIN as per TS6 v8 */ - do_sjoin(source, ac > 2 ? 2 : ac, av); - return MOD_CONT; - } else { - do_join(source, ac, av); - } - return MOD_CONT; -} - -int anope_event_motd(const char *source, int ac, const char **av) -{ - if (!source) { - return MOD_CONT; - } - - m_motd(source); - return MOD_CONT; -} - -int anope_event_privmsg(const char *source, int ac, const char **av) -{ - User *u; - BotInfo *bi; - - if (ac != 2) - { - return MOD_CONT; - } - - u = find_byuid(source); - bi = findbot(av[0]); - m_privmsg((UseTS6 ? source : u->nick), (UseTS6 ? bi->uid.c_str() : bi->nick), av[1]); - return MOD_CONT; -} - -int anope_event_part(const char *source, int ac, const char **av) -{ - User *u; - - if (ac < 1 || ac > 2) { - return MOD_CONT; - } - - u = find_byuid(source); - do_part((UseTS6 ? (u ? u->nick : source) : source), ac, av); - - return MOD_CONT; -} - -int anope_event_whois(const char *source, int ac, const char **av) -{ - BotInfo *bi; - - if (source && ac >= 1) - { - bi = findbot(av[0]); - m_whois(source, bi->uid.c_str()); - } - return MOD_CONT; -} - -/* EVENT: SERVER */ -int anope_event_server(const char *source, int ac, const char **av) -{ - if (!stricmp(av[1], "1")) { - uplink = sstrdup(av[0]); - if (UseTS6 && TS6UPLINK) { - do_server(source, av[0], av[1], av[2], TS6UPLINK); - } else { - do_server(source, av[0], av[1], av[2], NULL); - } - } else { - do_server(source, av[0], av[1], av[2], NULL); - } - return MOD_CONT; -} - -int anope_event_sid(const char *source, int ac, const char **av) -{ - Server *s; - - /* :42X SID trystan.nomadirc.net 2 43X :ircd-charybdis test server */ - - s = findserver_uid(servlist, source); - - do_server(s->name, av[0], av[1], av[3], av[2]); - return MOD_CONT; -} - -int anope_event_squit(const char *source, int ac, const char **av) -{ - if (ac != 2) - return MOD_CONT; - do_squit(source, ac, av); - return MOD_CONT; -} - -int anope_event_quit(const char *source, int ac, const char **av) -{ - User *u; - - if (ac != 1) { - return MOD_CONT; - } - - u = find_byuid(source); - - do_quit((UseTS6 ? (u ? u->nick : source) : source), ac, av); - return MOD_CONT; -} - -int anope_event_mode(const char *source, int ac, const char **av) -{ - User *u, *u2; - - if (ac < 2) { - return MOD_CONT; - } - - if (*av[0] == '#' || *av[0] == '&') { - do_cmode(source, ac, av); - } else { - if (UseTS6) { - u = find_byuid(source); - u2 = find_byuid(av[0]); - av[0] = u2->nick; - do_umode(u->nick, ac, av); - } else { - do_umode(source, ac, av); - } - } - return MOD_CONT; -} - -int anope_event_tmode(const char *source, int ac, const char **av) -{ - if (ac > 2 && (*av[1] == '#' || *av[1] == '&')) { - do_cmode(source, ac, av); - } - return MOD_CONT; -} - -/* Event: PROTOCTL */ -int anope_event_capab(const char *source, int ac, const char **av) -{ - int argvsize = 8; - int argc; - const char **argv; - char *str; - - if (ac < 1) - return MOD_CONT; - - /* We get the params as one arg, we should split it for capab_parse */ - argv = (const char **)scalloc(argvsize, sizeof(const char *)); - argc = 0; - while ((str = myStrGetToken(av[0], ' ', argc))) { - if (argc == argvsize) { - argvsize += 8; - argv = (const char **)srealloc(argv, argvsize * sizeof(const char *)); - } - argv[argc] = str; - argc++; - } - - capab_parse(argc, argv); - - /* Free our built ac/av */ - for (argvsize = 0; argvsize < argc; argvsize++) { - free((char *)argv[argvsize]); - } - free((char **)argv); - - return MOD_CONT; -} - -int anope_event_pass(const char *source, int ac, const char **av) -{ - if (UseTS6) { - TS6UPLINK = sstrdup(av[3]); - } - return MOD_CONT; -} - -int anope_event_bmask(const char *source, int ac, const char **av) -{ - Channel *c; - char *bans; - char *b; - int count, i; - - /* :42X BMASK 1106409026 #ircops b :*!*@*.aol.com */ - /* 0 1 2 3 */ - c = findchan(av[1]); - - if (c) { - bans = sstrdup(av[3]); - count = myNumToken(bans, ' '); - for (i = 0; i <= count - 1; i++) { - b = myStrGetToken(bans, ' ', i); - if (!stricmp(av[2], "b")) { - add_ban(c, b); - } - if (!stricmp(av[2], "e")) { - add_exception(c, b); - } - if (!stricmp(av[2], "I")) { - add_invite(c, b); - } - if (b) - free(b); - } - free(bans); - } - return MOD_CONT; -} - -int anope_event_error(const char *source, int ac, const char **av) -{ - if (ac >= 1) { - if (debug) { - alog("debug: %s", av[0]); - } - } - return MOD_CONT; -} - -int charybdis_send_account(int argc, char **argv) -{ - send_cmd((UseTS6 ? TS6SID : ServerName), "ENCAP * SU %s :%s", - argv[0], argv[0]); - - return MOD_CONT; -} - -/* XXX: We need a hook on /ns logout before this is useful! --nenolod */ -/* We have one now! -GD */ -int charybdis_send_deaccount(int argc, char **argv) -{ - send_cmd((UseTS6 ? TS6SID : ServerName), "ENCAP * SU %s", - argv[0]); - - return MOD_CONT; -} - -/* *INDENT-OFF* */ -void moduleAddIRCDMsgs() -{ - Message *m; - - updateProtectDetails("PROTECT","PROTECTME","protect","deprotect","AUTOPROTECT","+","-"); - - if (UseTS6) { - TS6SID = sstrdup(Numeric); - } - - m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m); - m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m); - m = createMessage("JOIN", anope_event_join); addCoreMessage(IRCD,m); - m = createMessage("KICK", anope_event_kick); addCoreMessage(IRCD,m); - m = createMessage("KILL", anope_event_kill); addCoreMessage(IRCD,m); - m = createMessage("MODE", anope_event_mode); addCoreMessage(IRCD,m); - m = createMessage("TMODE", anope_event_tmode); addCoreMessage(IRCD,m); - m = createMessage("MOTD", anope_event_motd); addCoreMessage(IRCD,m); - m = createMessage("NICK", anope_event_nick); addCoreMessage(IRCD,m); - m = createMessage("BMASK", anope_event_bmask); addCoreMessage(IRCD,m); - m = createMessage("UID", anope_event_nick); addCoreMessage(IRCD,m); - m = createMessage("PART", anope_event_part); addCoreMessage(IRCD,m); - m = createMessage("PASS", anope_event_pass); addCoreMessage(IRCD,m); - m = createMessage("PING", anope_event_ping); addCoreMessage(IRCD,m); - m = createMessage("PRIVMSG", anope_event_privmsg); addCoreMessage(IRCD,m); - m = createMessage("QUIT", anope_event_quit); addCoreMessage(IRCD,m); - m = createMessage("SERVER", anope_event_server); addCoreMessage(IRCD,m); - m = createMessage("SQUIT", anope_event_squit); addCoreMessage(IRCD,m); - m = createMessage("TOPIC", anope_event_topic); addCoreMessage(IRCD,m); - m = createMessage("TB", anope_event_tburst); addCoreMessage(IRCD,m); - m = createMessage("WHOIS", anope_event_whois); addCoreMessage(IRCD,m); - m = createMessage("CAPAB", anope_event_capab); addCoreMessage(IRCD,m); - m = createMessage("SJOIN", anope_event_sjoin); addCoreMessage(IRCD,m); - m = createMessage("ERROR", anope_event_error); addCoreMessage(IRCD,m); - m = createMessage("SID", anope_event_sid); addCoreMessage(IRCD,m); - m = createMessage("EUID", anope_event_euid); addCoreMessage(IRCD,m); -} - -/* *INDENT-ON* */ - -class ProtoCharybdis : public Module -{ - public: - ProtoCharybdis(const std::string &modname, const std::string &creator) : Module(modname, creator) - { - EvtHook *hk; - - this->SetAuthor("Anope"); - this->SetVersion("$Id: charybdis.c 953 2006-01-14 11:36:29Z certus $"); - this->SetType(PROTOCOL); - - pmodule_ircd_version("Charybdis 1.0/1.1+"); - pmodule_ircd_cap(myIrcdcap); - pmodule_ircd_var(myIrcd); - pmodule_ircd_cbmodeinfos(myCbmodeinfos); - pmodule_ircd_cumodes(myCumodes); - pmodule_ircd_flood_mode_char_set(""); - pmodule_ircd_flood_mode_char_remove(""); - pmodule_ircd_cbmodes(myCbmodes); - pmodule_ircd_cmmodes(myCmmodes); - pmodule_ircd_csmodes(myCsmodes); - pmodule_ircd_useTSMode(0); - - /** Deal with modes anope _needs_ to know **/ - pmodule_invis_umode(UMODE_i); - pmodule_oper_umode(UMODE_o); - pmodule_invite_cmode(CMODE_i); - pmodule_secret_cmode(CMODE_s); - pmodule_private_cmode(CMODE_p); - pmodule_key_mode(CMODE_k); - pmodule_limit_mode(CMODE_l); - - pmodule_ircd_proto(&ircd_proto); - moduleAddIRCDMsgs(); - - hk = createEventHook(EVENT_NICK_IDENTIFY, charybdis_send_account); - this->AddEventHook(hk); - - hk = createEventHook(EVENT_NICK_REGISTERED, charybdis_send_account); - this->AddEventHook(hk); - - /* XXX: It'd be nice if we could have an event like this, but it's not there yet :( */ - /* It's there now! Trystan said so! -GD */ - hk = createEventHook(EVENT_NICK_LOGOUT, charybdis_send_deaccount); - this->AddEventHook(hk); - } - - ~ProtoCharybdis() - { - if (UseTS6) - free(TS6SID); - } -}; - - -/* EOF */ - -MODULE_INIT("charybdis", ProtoCharybdis) diff --git a/src/protocol/obsolete/hybrid.c b/src/protocol/obsolete/hybrid.c deleted file mode 100644 index 416439a1c..000000000 --- a/src/protocol/obsolete/hybrid.c +++ /dev/null @@ -1,1566 +0,0 @@ -/* Hybrid 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. - * - * - */ - -#include "services.h" -#include "pseudo.h" -#include "hybrid.h" - -IRCDVar myIrcd[] = { - {"HybridIRCd 7.*", /* ircd name */ - "+o", /* nickserv mode */ - "+o", /* chanserv mode */ - "+o", /* memoserv mode */ - NULL, /* hostserv mode */ - "+aio", /* operserv mode */ - "+o", /* botserv mode */ - "+h", /* helpserv mode */ - "+i", /* Dev/Null mode */ - "+io", /* Global mode */ - "+o", /* nickserv alias mode */ - "+o", /* chanserv alias mode */ - "+o", /* memoserv alias mode */ - NULL, /* hostserv alias mode */ - "+aio", /* operserv alias mode */ - "+o", /* botserv alias mode */ - "+h", /* helpserv alias mode */ - "+i", /* Dev/Null alias mode */ - "+io", /* Global alias mode */ - "+", /* Used by BotServ Bots */ - 3, /* Chan Max Symbols */ - "-ailmnpst", /* Modes to Remove */ - "+o", /* Channel Umode used by Botserv bots */ - 0, /* SVSNICK */ - 0, /* Vhost */ - 0, /* Has Owner */ - NULL, /* Mode to set for an owner */ - NULL, /* Mode to unset for an owner */ - NULL, /* Mode to set for admin */ - NULL, /* Mode to unset for admin */ - NULL, /* Mode On Reg */ - NULL, /* Mode on ID for Roots */ - NULL, /* Mode on ID for Admins */ - NULL, /* Mode on ID for Opers */ - NULL, /* Mode on UnReg */ - NULL, /* Mode on Nick Change */ - 1, /* Supports SGlines */ - 1, /* Supports SQlines */ - 0, /* Supports SZlines */ - 1, /* Supports Halfop +h */ - 3, /* Number of server args */ - 1, /* Join 2 Set */ - 1, /* Join 2 Message */ - 1, /* Has exceptions +e */ - 0, /* TS Topic Forward */ - 0, /* TS Topci Backward */ - 0, /* Protected Umode */ - 0, /* Has Admin */ - 0, /* Chan SQlines */ - 0, /* Quit on Kill */ - 0, /* SVSMODE unban */ - 0, /* Has Protect */ - 0, /* Reverse */ - 0, /* Chan Reg */ - 0, /* Channel Mode */ - 0, /* vidents */ - 0, /* svshold */ - 0, /* time stamp on mode */ - 0, /* NICKIP */ - 0, /* UMODE */ - 0, /* O:LINE */ - 0, /* VHOST ON NICK */ - 0, /* Change RealName */ - CMODE_p, /* No Knock */ - 0, /* Admin Only */ - DEFAULT_MLOCK, /* Default MLOCK */ - 0, /* Vhost Mode */ - 0, /* +f */ - 0, /* +L */ - 0, /* +f Mode */ - 0, /* +L Mode */ - 0, /* On nick change check if they could be identified */ - 0, /* No Knock requires +i */ - NULL, /* CAPAB Chan Modes */ - 0, /* We support TOKENS */ - 1, /* TOKENS are CASE inSensitive */ - 0, /* TIME STAMPS are BASE64 */ - 0, /* +I support */ - 0, /* SJOIN ban char */ - 0, /* SJOIN except char */ - 0, /* SJOIN invite char */ - 0, /* Can remove User Channel Modes with SVSMODE */ - 0, /* Sglines are not enforced until user reconnects */ - NULL, /* vhost char */ - 0, /* ts6 */ - 0, /* support helper umode */ - 0, /* p10 */ - NULL, /* character set */ - 0, /* reports sync state */ - 0, /* CIDR channelbans */ - } - , - {NULL} -}; - -IRCDCAPAB myIrcdcap[] = { - { - CAPAB_NOQUIT, /* NOQUIT */ - 0, /* TSMODE */ - 0, /* UNCONNECT */ - 0, /* NICKIP */ - 0, /* SJOIN */ - CAPAB_ZIP, /* ZIP */ - 0, /* BURST */ - CAPAB_TS5, /* TS5 */ - 0, /* TS3 */ - 0, /* DKEY */ - 0, /* PT4 */ - 0, /* SCS */ - CAPAB_QS, /* QS */ - CAPAB_UID, /* UID */ - CAPAB_KNOCK, /* KNOCK */ - 0, /* CLIENT */ - 0, /* IPV6 */ - 0, /* SSJ5 */ - 0, /* SN2 */ - 0, /* TOKEN */ - 0, /* VHOST */ - 0, /* SSJ3 */ - 0, /* NICK2 */ - 0, /* UMODE2 */ - 0, /* VL */ - 0, /* TLKEXT */ - 0, /* DODKEY */ - 0, /* DOZIP */ - 0, 0, 0} -}; - - - -void hybrid_ProcessUsermodes(User * user, int ac, const char **av) -{ - int add = 1; /* 1 if adding modes, 0 if deleting */ - const char *modes = av[0]; - - ac--; - - if (debug) - alog("debug: Changing mode for %s to %s", user->nick, modes); - - while (*modes) { - - /* This looks better, much better than "add ? (do_add) : (do_remove)". - * At least this is readable without paying much attention :) -GD - */ - if (add) - user->mode |= umodes[(int) *modes]; - else - user->mode &= ~umodes[(int) *modes]; - - switch (*modes++) { - case '+': - add = 1; - break; - case '-': - add = 0; - break; - case 'd': - if (ac == 0) { - alog("user: umode +d with no parameter (?) for user %s", - user->nick); - break; - } - - ac--; - av++; - user->svid = strtoul(*av, NULL, 0); - break; - case 'o': - if (add) { - opcnt++; - - if (WallOper) - anope_SendGlobops(s_OperServ, - "\2%s\2 is now an IRC operator.", - user->nick); - display_news(user, NEWS_OPER); - - } else { - opcnt--; - } - break; - case 'r': - if (add && !nick_identified(user)) { - send_cmd(ServerName, "SVSMODE %s -r", user->nick); - user->mode &= ~UMODE_r; - } - break; - - } - } -} - -unsigned long umodes[128] = { - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused, Unused, Horzontal Tab */ - 0, 0, 0, /* Line Feed, Unused, Unused */ - 0, 0, 0, /* Carriage Return, Unused, Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused */ - 0, 0, 0, /* Unused, Unused, Space */ - 0, 0, 0, /* ! " # */ - 0, 0, 0, /* $ % & */ - 0, 0, 0, /* ! ( ) */ - 0, 0, 0, /* * + , */ - 0, 0, 0, /* - . / */ - 0, 0, /* 0 1 */ - 0, 0, /* 2 3 */ - 0, 0, /* 4 5 */ - 0, 0, /* 6 7 */ - 0, 0, /* 8 9 */ - 0, 0, /* : ; */ - 0, 0, 0, /* < = > */ - 0, 0, /* ? @ */ - 0, 0, 0, /* A B C */ - 0, 0, 0, /* D E F */ - 0, 0, 0, /* G H I */ - 0, 0, 0, /* J K L */ - 0, 0, 0, /* M N O */ - 0, 0, 0, /* P Q R */ - 0, 0, 0, /* S T U */ - 0, 0, 0, /* V W X */ - 0, /* Y */ - 0, /* Z */ - 0, 0, 0, /* [ \ ] */ - 0, 0, 0, /* ^ _ ` */ - UMODE_a, UMODE_b, UMODE_c, /* a b c */ - UMODE_d, 0, UMODE_f, /* d e f */ - UMODE_g, 0, UMODE_i, /* g h i */ - 0, UMODE_k, UMODE_l, /* j k l */ - 0, UMODE_n, UMODE_o, /* m n o */ - 0, 0, UMODE_r, /* p q r */ - UMODE_s, 0, UMODE_u, /* s t u */ - 0, UMODE_w, UMODE_x, /* v w x */ - UMODE_y, /* y */ - UMODE_z, /* z */ - 0, 0, 0, /* { | } */ - 0, 0 /* ~ � */ -}; - - -char myCsmodes[128] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, - 'a', /* (33) ! */ - 0, 0, 0, - 'h', - 0, 0, 0, 0, - 0, - - 'v', 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 'o', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -CMMode myCmmodes[128] = { - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, /* BCD */ - {NULL}, {NULL}, {NULL}, /* EFG */ - {NULL}, /* H */ - {add_invite, del_invite}, - {NULL}, /* J */ - {NULL}, {NULL}, {NULL}, /* KLM */ - {NULL}, {NULL}, {NULL}, /* NOP */ - {NULL}, {NULL}, {NULL}, /* QRS */ - {NULL}, {NULL}, {NULL}, /* TUV */ - {NULL}, {NULL}, {NULL}, /* WXY */ - {NULL}, /* Z */ - {NULL}, {NULL}, /* (char 91 - 92) */ - {NULL}, {NULL}, {NULL}, /* (char 93 - 95) */ - {NULL}, /* ` (char 96) */ - {NULL}, /* a (char 97) */ - {add_ban, del_ban}, - {NULL}, - {NULL}, - {add_exception, del_exception}, - {NULL}, - {NULL}, - {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, - {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL}, {NULL} -}; - - -CBMode myCbmodes[128] = { - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, - {0}, /* A */ - {0}, /* B */ - {0}, /* C */ - {0}, /* D */ - {0}, /* E */ - {0}, /* F */ - {0}, /* G */ - {0}, /* H */ - {0}, /* I */ - {0}, /* J */ - {0}, /* K */ - {0}, /* L */ - {0}, /* M */ - {0}, /* N */ - {0}, /* O */ - {0}, /* P */ - {0}, /* Q */ - {0}, - {0}, /* S */ - {0}, /* T */ - {0}, /* U */ - {0}, /* V */ - {0}, /* W */ - {0}, /* X */ - {0}, /* Y */ - {0}, /* Z */ - {0}, {0}, {0}, {0}, {0}, {0}, - {CMODE_a, 0, NULL, NULL}, - {0}, /* b */ - {0}, /* c */ - {0}, /* d */ - {0}, /* e */ - {0}, /* f */ - {0}, /* g */ - {0}, /* h */ - {CMODE_i, 0, NULL, NULL}, - {0}, /* j */ - {CMODE_k, 0, chan_set_key, cs_set_key}, - {CMODE_l, CBM_MINUS_NO_ARG, set_limit, cs_set_limit}, - {CMODE_m, 0, NULL, NULL}, - {CMODE_n, 0, NULL, NULL}, - {0}, /* o */ - {CMODE_p, 0, NULL, NULL}, - {0}, /* q */ - {0}, - {CMODE_s, 0, NULL, NULL}, - {CMODE_t, 0, NULL, NULL}, - {0}, - {0}, /* v */ - {0}, /* w */ - {0}, /* x */ - {0}, /* y */ - {0}, /* z */ - {0}, {0}, {0}, {0} -}; - -CBModeInfo myCbmodeinfos[] = { - {'a', CMODE_a, 0, NULL, NULL}, - {'i', CMODE_i, 0, NULL, NULL}, - {'k', CMODE_k, 0, get_key, cs_get_key}, - {'l', CMODE_l, CBM_MINUS_NO_ARG, get_limit, cs_get_limit}, - {'m', CMODE_m, 0, NULL, NULL}, - {'n', CMODE_n, 0, NULL, NULL}, - {'p', CMODE_p, 0, NULL, NULL}, - {'s', CMODE_s, 0, NULL, NULL}, - {'t', CMODE_t, 0, NULL, NULL}, - {0} -}; - - -CUMode myCumodes[128] = { - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, - - {0}, - - {0}, /* a */ - {0}, /* b */ - {0}, /* c */ - {0}, /* d */ - {0}, /* e */ - {0}, /* f */ - {0}, /* g */ - {CUS_HALFOP, 0, check_valid_op}, - {0}, /* i */ - {0}, /* j */ - {0}, /* k */ - {0}, /* l */ - {0}, /* m */ - {0}, /* n */ - {CUS_OP, CUF_PROTECT_BOTSERV, check_valid_op}, - {0}, /* p */ - {0}, /* q */ - {0}, /* r */ - {0}, /* s */ - {0}, /* t */ - {0}, /* u */ - {CUS_VOICE, 0, NULL}, - {0}, /* w */ - {0}, /* x */ - {0}, /* y */ - {0}, /* z */ - {0}, {0}, {0}, {0}, {0} -}; - - - -void hybrid_cmd_notice(const char *source, const char *dest, const char *buf) -{ - if (!buf) { - return; - } - - if (NSDefFlags & NI_MSG) { - hybrid_cmd_privmsg2(source, dest, buf); - } else { - send_cmd(source, "NOTICE %s :%s", dest, buf); - } -} - -void hybrid_cmd_notice2(const char *source, const char *dest, const char *msg) -{ - send_cmd(source, "NOTICE %s :%s", dest, msg); -} - -void hybrid_cmd_privmsg(const char *source, const char *dest, const char *buf) -{ - if (!buf) { - return; - } - - send_cmd(source, "PRIVMSG %s :%s", dest, buf); -} - -void hybrid_cmd_privmsg2(const char *source, const char *dest, const char *msg) -{ - send_cmd(source, "PRIVMSG %s :%s", dest, msg); -} - -void hybrid_SendGlobalNotice(const char *source, const char *dest, const char *msg) -{ - send_cmd(source, "NOTICE $$%s :%s", dest, msg); -} - -void hybrid_SendGlobalPrivmsg(const char *source, const char *dest, const char *msg) -{ - send_cmd(source, "PRIVMSG $$%s :%s", dest, msg); -} - - -void hybrid_SendGlobops(const char *source, const char *buf) -{ - if (!buf) { - return; - } - - send_cmd(source ? source : ServerName, "OPERWALL :%s", buf); -} - -/* GLOBOPS - to handle old WALLOPS */ -void hybrid_SendGlobops_legacy(const char *source, const char *fmt) -{ - send_cmd(source ? source : ServerName, "OPERWALL :%s", fmt); -} - -int anope_event_sjoin(const char *source, int ac, const char **av) -{ - do_sjoin(source, ac, av); - return MOD_CONT; -} - -int anope_event_nick(const char *source, int ac, const char **av) -{ - if (ac != 2) { - User *user = do_nick(source, av[0], av[4], av[5], av[6], av[7], - strtoul(av[2], NULL, 10), 0, 0, NULL, NULL); - if (user) - anope_ProcessUsermodes(user, 1, &av[3]); - } else { - do_nick(source, av[0], NULL, NULL, NULL, NULL, - strtoul(av[1], NULL, 10), 0, 0, NULL, NULL); - } - return MOD_CONT; -} - -int anope_event_topic(const char *source, int ac, const char **av) -{ - if (ac == 4) { - do_topic(source, ac, av); - } else { - Channel *c = findchan(av[0]); - time_t topic_time = time(NULL); - - if (!c) { - if (debug) { - alog("debug: TOPIC %s for nonexistent channel %s", - merge_args(ac - 1, av + 1), av[0]); - } - return MOD_CONT; - } - - if (check_topiclock(c, topic_time)) - return MOD_CONT; - - if (c->topic) { - free(c->topic); - c->topic = NULL; - } - if (ac > 1 && *av[1]) - c->topic = sstrdup(av[1]); - - strscpy(c->topic_setter, source, sizeof(c->topic_setter)); - c->topic_time = topic_time; - - record_topic(av[0]); - - if (ac > 1 && *av[1]) - send_event(EVENT_TOPIC_UPDATED, 2, av[0], av[1]); - else - send_event(EVENT_TOPIC_UPDATED, 2, av[0], ""); - } - return MOD_CONT; -} - -int anope_event_tburst(const char *source, int ac, const char **av) -{ - if (ac != 5) - return MOD_CONT; - - av[0] = av[1]; - av[1] = av[3]; - av[3] = av[4]; - do_topic(source, 4, av); - return MOD_CONT; -} - -int anope_event_436(const char *source, int ac, const char **av) -{ - if (ac < 1) - return MOD_CONT; - - m_nickcoll(av[0]); - return MOD_CONT; -} - - -/* *INDENT-OFF* */ -void moduleAddIRCDMsgs() { - Message *m; - - updateProtectDetails("PROTECT","PROTECTME","protect","deprotect","AUTOPROTECT","+","-"); - - m = createMessage("401", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("402", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("436", anope_event_436); addCoreMessage(IRCD,m); - m = createMessage("AWAY", anope_event_away); addCoreMessage(IRCD,m); - m = createMessage("INVITE", anope_event_invite); addCoreMessage(IRCD,m); - m = createMessage("JOIN", anope_event_join); addCoreMessage(IRCD,m); - m = createMessage("KICK", anope_event_kick); addCoreMessage(IRCD,m); - m = createMessage("KILL", anope_event_kill); addCoreMessage(IRCD,m); - m = createMessage("MODE", anope_event_mode); addCoreMessage(IRCD,m); - m = createMessage("MOTD", anope_event_motd); addCoreMessage(IRCD,m); - m = createMessage("NICK", anope_event_nick); addCoreMessage(IRCD,m); - m = createMessage("NOTICE", anope_event_notice); addCoreMessage(IRCD,m); - m = createMessage("PART", anope_event_part); addCoreMessage(IRCD,m); - m = createMessage("PASS", anope_event_pass); addCoreMessage(IRCD,m); - m = createMessage("PING", anope_event_ping); addCoreMessage(IRCD,m); - m = createMessage("PRIVMSG", anope_event_privmsg); addCoreMessage(IRCD,m); - m = createMessage("QUIT", anope_event_quit); addCoreMessage(IRCD,m); - m = createMessage("SERVER", anope_event_server); addCoreMessage(IRCD,m); - m = createMessage("SQUIT", anope_event_squit); addCoreMessage(IRCD,m); - m = createMessage("TOPIC", anope_event_topic); addCoreMessage(IRCD,m); - m = createMessage("TBURST", anope_event_tburst); addCoreMessage(IRCD,m); - m = createMessage("USER", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("WALLOPS", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("WHOIS", anope_event_whois); addCoreMessage(IRCD,m); - m = createMessage("AKILL", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("GLOBOPS", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("GNOTICE", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("GOPER", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("RAKILL", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("SILENCE", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("SVSKILL", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("SVSMODE", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("SVSNICK", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("SVSNOOP", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("SQLINE", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("UNSQLINE", anope_event_null); addCoreMessage(IRCD,m); - m = createMessage("CAPAB", anope_event_capab); addCoreMessage(IRCD,m); - m = createMessage("SJOIN", anope_event_sjoin); addCoreMessage(IRCD,m); - m = createMessage("SVINFO", anope_event_svinfo); addCoreMessage(IRCD,m); -/* m = createMessage("EOB", anope_event_eob); addCoreMessage(IRCD,m); */ - m = createMessage("ADMIN", anope_event_admin); addCoreMessage(IRCD,m); - m = createMessage("ERROR", anope_event_error); addCoreMessage(IRCD,m); -} - -/* *INDENT-ON* */ - - -void hybrid_SendSQLine(const char *mask, const char *reason) -{ - if (!mask || !reason) { - return; - } - - send_cmd(ServerName, "RESV * %s :%s", mask, reason); -} -void hybrid_SendSGLineDel(const char *mask) -{ - if (!mask) { - return; - } - - send_cmd(ServerName, "UNXLINE * %s", mask); -} - -void hybrid_SendSZLineDel(const char *mask) -{ - /* Does not support */ -} -void hybrid_SendSZLine(const char *mask, const char *reason, const char *whom) -{ - /* Does not support */ -} - -void hybrid_cmd_svsadmin(const char *server, int set) -{ -} - -void hybrid_SendSGLine(const char *mask, const char *reason) -{ - if (!mask || !reason) { - return; - } - - send_cmd(ServerName, "XLINE * %s 0 :%s", mask, reason); -} - -void HybridIRCdProto::SendAkillDel(const char *user, const char *host) -{ - /* hybrid seems to support UNKLINE -Certus */ - send_cmd(s_OperServ, "UNKLINE * %s %s", user, host); -} - -void hybrid_cmd_topic(const char *whosets, const char *chan, const char *whosetit, - const char *topic, time_t when) -{ - send_cmd(whosets, "TOPIC %s :%s", chan, topic); -} - -void hybrid_SendVhostDel(User * u) -{ - /* does not support vhosting */ -} - -void hybrid_SendVhost(const char *nick, const char *vIdent, const char *vhost) -{ - /* does not support vhosting */ -} - -void hybrid_SendSQLineDel(const char *user) -{ - if (!user) { - return; - } - - send_cmd(ServerName, "UNRESV * %s", user); -} - -void hybrid_SendJoin(const char *user, const char *channel, time_t chantime) -{ - send_cmd(NULL, "SJOIN %ld %s + :%s", (long int) chantime, channel, - user); -} - -/* -oper: the nick of the oper performing the kline -target.server: the server(s) this kline is destined for -duration: the duration if a tkline, 0 if permanent. -user: the 'user' portion of the kline -host: the 'host' portion of the kline -reason: the reason for the kline. -*/ - -void hybrid_SendAkill(const char *user, const char *host, const char *who, time_t when, - time_t expires, const char *reason) -{ - send_cmd(s_OperServ, "KLINE * %ld %s %s :%s", - (long int) (expires - (long) time(NULL)), user, host, reason); -} - -void hybrid_SendSVSKill(const char *source, const char *user, const char *buf) -{ - if (!buf) { - return; - } - - if (!source || !user) { - return; - } - - send_cmd(source, "KILL %s :%s", user, buf); -} - - -void hybrid_SendSVSMode(User * u, int ac, const char **av) -{ - /* Hybrid does not support SVSMODE */ -} - -/* - * SVINFO - * parv[0] = sender prefix - * parv[1] = TS_CURRENT for the server - * parv[2] = TS_MIN for the server - * parv[3] = server is standalone or connected to non-TS only - * parv[4] = server's idea of UTC time - */ -void hybrid_cmd_svinfo() -{ - send_cmd(NULL, "SVINFO 5 5 0 :%ld", (long int) time(NULL)); -} - -/* CAPAB */ -/* - QS - Can handle quit storm removal - EX - Can do channel +e exemptions - CHW - Can do channel wall @# - LL - Can do lazy links - IE - Can do invite exceptions - EOB - Can do EOB message - KLN - Can do KLINE message - GLN - Can do GLINE message - HOPS - can do half ops (+h) - HUB - This server is a HUB - AOPS - Can do anon ops (+a) - UID - Can do UIDs - ZIP - Can do ZIPlinks - ENC - Can do ENCrypted links - KNOCK - supports KNOCK - TBURST - supports TBURST - PARA - supports invite broadcasting for +p - ENCAP - ? -*/ -void hybrid_cmd_capab() -{ - send_cmd(NULL, - "CAPAB :QS EX CHW IE KLN GLN HOPS HUB AOPS KNOCK TBURST PARA"); -} - -/* PASS */ -void hybrid_cmd_pass(const char *pass) -{ - send_cmd(NULL, "PASS %s :TS", pass); -} - -/* SERVER name hop descript */ -void hybrid_SendServer(const char *servname, int hop, const char *descript) -{ - send_cmd(NULL, "SERVER %s %d :%s", servname, hop, descript); -} -void hybrid_SendConnect(int servernum) -{ - me_server = - new_server(NULL, ServerName, ServerDesc, SERVER_ISME, NULL); - - if (servernum == 1) - hybrid_cmd_pass(RemotePassword); - else if (servernum == 2) - hybrid_cmd_pass(RemotePassword2); - else if (servernum == 3) - hybrid_cmd_pass(RemotePassword3); - - hybrid_cmd_capab(); - hybrid_SendServer(ServerName, 1, ServerDesc); - hybrid_cmd_svinfo(); -} - -void hybrid_cmd_svsinfo() -{ - /* not used */ -} - - - -void hybrid_SendClientIntroduction(const char *nick, const char *user, const char *host, const char *real, - const char *modes) -{ - EnforceQlinedNick(nick, s_BotServ); - send_cmd(NULL, "NICK %s 1 %ld %s %s %s %s :%s", nick, - (long int) time(NULL), modes, user, host, ServerName, real); - -} - -void hybrid_SendPart(const char *nick, const char *chan, const char *buf) -{ - if (buf) { - send_cmd(nick, "PART %s :%s", chan, buf); - } else { - send_cmd(nick, "PART %s", chan); - } -} - -int anope_event_ping(const char *source, int ac, const char **av) -{ - if (ac < 1) - return MOD_CONT; - hybrid_SendPong(ac > 1 ? av[1] : ServerName, av[0]); - return MOD_CONT; -} - -int anope_event_away(const char *source, int ac, const char **av) -{ - if (!source) { - return MOD_CONT; - } - m_away(source, (ac ? av[0] : NULL)); - return MOD_CONT; -} - -int anope_event_kill(const char *source, int ac, const char **av) -{ - if (ac != 2) - return MOD_CONT; - - m_kill(av[0], av[1]); - return MOD_CONT; -} - -int anope_event_kick(const char *source, int ac, const char **av) -{ - if (ac != 3) - return MOD_CONT; - do_kick(source, ac, av); - return MOD_CONT; -} - -int anope_event_eob(const char *source, int ac, const char **av) -{ - Server *s; - s = findserver(servlist, source); - /* If we found a server with the given source, that one just - * finished bursting. If there was no source, then our uplink - * server finished bursting. -GD - */ - if (!s && serv_uplink) - s = serv_uplink; - finish_sync(s, 1); - - return MOD_CONT; -} - -void hybrid_SendEOB() -{ -/* send_cmd(ServerName, "EOB"); */ -} - - -int anope_event_join(const char *source, int ac, const char **av) -{ - if (ac != 1) - return MOD_CONT; - do_join(source, ac, av); - return MOD_CONT; -} - -int anope_event_motd(const char *source, int ac, const char **av) -{ - if (!source) { - return MOD_CONT; - } - - m_motd(source); - return MOD_CONT; -} - -int anope_event_privmsg(const char *source, int ac, const char **av) -{ - if (ac != 2) - return MOD_CONT; - m_privmsg(source, av[0], av[1]); - return MOD_CONT; -} - -int anope_event_part(const char *source, int ac, const char **av) -{ - if (ac < 1 || ac > 2) - return MOD_CONT; - do_part(source, ac, av); - return MOD_CONT; -} - -int anope_event_whois(const char *source, int ac, const char **av) -{ - if (source && ac >= 1) { - m_whois(source, av[0]); - } - return MOD_CONT; -} - -/* EVENT: SERVER */ -int anope_event_server(const char *source, int ac, const char **av) -{ - if (!stricmp(av[1], "1")) { - uplink = sstrdup(av[0]); - } - do_server(source, av[0], av[1], av[2], NULL); - return MOD_CONT; -} - -int anope_event_squit(const char *source, int ac, const char **av) -{ - if (ac != 2) - return MOD_CONT; - do_squit(source, ac, av); - return MOD_CONT; -} - -int anope_event_quit(const char *source, int ac, const char **av) -{ - if (ac != 1) - return MOD_CONT; - do_quit(source, ac, av); - return MOD_CONT; -} - -void hybrid_cmd_372(const char *source, const char *msg) -{ - send_cmd(ServerName, "372 %s :- %s", source, msg); -} - -void hybrid_cmd_372_error(const char *source) -{ - send_cmd(ServerName, "422 %s :- MOTD file not found! Please " - "contact your IRC administrator.", source); -} - -void hybrid_cmd_375(const char *source) -{ - send_cmd(ServerName, "375 %s :- %s Message of the Day", - source, ServerName); -} - -void hybrid_cmd_376(const char *source) -{ - send_cmd(ServerName, "376 %s :End of /MOTD c