From 308d7937ef6feb4dc543bd871979e03f1d6d6fd3 Mon Sep 17 00:00:00 2001 From: jantje_85 Date: Thu, 29 Jan 2009 02:02:44 +0000 Subject: Bug 1001: Added support for internal tracking of +j channel mode (throttling). git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/stable@1940 5417fbe8-f217-4b02-8779-1006273d7864 --- src/protocol/bahamut.c | 2 ++ src/protocol/charybdis.c | 4 +++- src/protocol/dreamforge.c | 2 ++ src/protocol/hybrid.c | 2 ++ src/protocol/inspircd10.c | 2 ++ src/protocol/inspircd11.c | 29 +++++++++++++++++++++++++++-- src/protocol/inspircd11.h | 3 +++ src/protocol/plexus2.c | 2 ++ src/protocol/plexus3.c | 2 ++ src/protocol/ptlink.c | 2 ++ src/protocol/rageircd.c | 2 ++ src/protocol/ratbox.c | 2 ++ src/protocol/shadowircd.c | 2 ++ src/protocol/solidircd.c | 2 ++ src/protocol/ultimate2.c | 2 ++ src/protocol/ultimate3.c | 2 ++ src/protocol/unreal31.c | 2 ++ src/protocol/unreal32.c | 28 ++++++++++++++++++++++++++-- src/protocol/unreal32.h | 2 ++ src/protocol/viagra.c | 2 ++ 20 files changed, 91 insertions(+), 5 deletions(-) (limited to 'src/protocol') diff --git a/src/protocol/bahamut.c b/src/protocol/bahamut.c index 5d84590ed..1d3169fed 100644 --- a/src/protocol/bahamut.c +++ b/src/protocol/bahamut.c @@ -108,6 +108,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/charybdis.c b/src/protocol/charybdis.c index 3440b03a3..2ec7d7f05 100644 --- a/src/protocol/charybdis.c +++ b/src/protocol/charybdis.c @@ -36,7 +36,7 @@ IRCDVar myIrcd[] = { "+oiS", /* Global alias mode */ "+oiS", /* Used by BotServ Bots */ 2, /* Chan Max Symbols */ - "-cilmnpstrgzQF", /* Modes to Remove */ + "-cijlmnpstrgzQF", /* Modes to Remove */ "+o", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ @@ -105,6 +105,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 1, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j Mode */ } , {NULL} diff --git a/src/protocol/dreamforge.c b/src/protocol/dreamforge.c index 5dfb1e53d..ba669dd0a 100644 --- a/src/protocol/dreamforge.c +++ b/src/protocol/dreamforge.c @@ -106,6 +106,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/hybrid.c b/src/protocol/hybrid.c index ffea0a085..aa05506f1 100644 --- a/src/protocol/hybrid.c +++ b/src/protocol/hybrid.c @@ -106,6 +106,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/inspircd10.c b/src/protocol/inspircd10.c index 4b7977515..f5644b343 100644 --- a/src/protocol/inspircd10.c +++ b/src/protocol/inspircd10.c @@ -125,6 +125,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/inspircd11.c b/src/protocol/inspircd11.c index 66e64523f..a94c70d7c 100644 --- a/src/protocol/inspircd11.c +++ b/src/protocol/inspircd11.c @@ -56,7 +56,7 @@ IRCDVar myIrcd[] = { "+ioI", /* Global alias mode */ "+sI", /* Used by BotServ Bots */ 5, /* Chan Max Symbols */ - "-cilmnpstuzACGHKNOQRSV", /* Modes to Remove */ + "-cijlmnpstuzACGHKNOQRSV", /* Modes to Remove */ "+ao", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ @@ -125,6 +125,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 1, /* CIDR channelbans */ + 1, /* +j */ + CMODE_j, /* +j Mode */ } , {NULL} @@ -284,7 +286,7 @@ CBMode myCbmodes[128] = { {0}, /* g */ {0}, /* h */ {CMODE_i, 0, NULL, NULL}, - {0}, /* j */ + {CMODE_j, CBM_MINUS_NO_ARG | CBM_NO_MLOCK, chan_set_throttle, cs_set_throttle}, /* 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}, @@ -308,6 +310,7 @@ CBModeInfo myCbmodeinfos[] = { {'f', CMODE_f, 0, NULL, NULL}, {'c', CMODE_c, 0, NULL, NULL}, {'i', CMODE_i, 0, NULL, NULL}, + {'j', CMODE_j, 0, get_throttle, cs_get_throttle}, {'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}, @@ -1806,6 +1809,27 @@ void inspircd_cmd_ctcp(char *source, char *dest, char *buf) } +int inspircd_jointhrottle_mode_check(char *value) +{ + char *tempValue, *one, *two; + int param1, param2; + + if (!value) + return 0; + + tempValue = sstrdup(value); + one = strtok(tempValue, ":"); + two = strtok(NULL, ""); + if (one && two) { + param1 = atoi(one); + param2 = atoi(two); + } + if ((param1 >= 1) && (param1 <= 255) && (param2 >= 1) && (param2 <= 999)) + return 1; + return 0; +} + + /** * Tell anope which function we want to perform each task inside of anope. * These prototypes must match what anope expects. @@ -1886,6 +1910,7 @@ void moduleAddAnopeCmds() pmodule_valid_chan(inspircd_valid_chan); pmodule_cmd_ctcp(inspircd_cmd_ctcp); pmodule_set_umode(inspircd_set_umode); + pmodule_jointhrottle_mode_check(inspircd_jointhrottle_mode_check); } /** diff --git a/src/protocol/inspircd11.h b/src/protocol/inspircd11.h index 3391db3c0..540fc6394 100755 --- a/src/protocol/inspircd11.h +++ b/src/protocol/inspircd11.h @@ -48,6 +48,7 @@ #define CMODE_N 0x01000000 #define CMODE_R 0x00000100 /* Only identified users can join */ #define CMODE_r 0x00000200 /* Set for all registered channels */ +#define CMODE_j 0x02000000 #define DEFAULT_MLOCK CMODE_n | CMODE_t | CMODE_r @@ -121,6 +122,8 @@ int inspircd_flood_mode_check(char *value); void inspircd_cmd_jupe(char *jserver, char *who, char *reason); int inspircd_valid_nick(char *nick); void inspircd_cmd_ctcp(char *source, char *dest, char *buf); +int inspircd_jointhrottle_mode_check(char *value); + int anope_event_fjoin(char *source, int ac, char **av); int anope_event_fmode(char *source, int ac, char **av); int anope_event_ftopic(char *source, int ac, char **av); diff --git a/src/protocol/plexus2.c b/src/protocol/plexus2.c index 323482d02..1f01924f5 100644 --- a/src/protocol/plexus2.c +++ b/src/protocol/plexus2.c @@ -104,6 +104,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/plexus3.c b/src/protocol/plexus3.c index 463ae320c..375687ae1 100644 --- a/src/protocol/plexus3.c +++ b/src/protocol/plexus3.c @@ -104,6 +104,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/ptlink.c b/src/protocol/ptlink.c index 6479f8ee4..cd5f57c9c 100644 --- a/src/protocol/ptlink.c +++ b/src/protocol/ptlink.c @@ -106,6 +106,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/rageircd.c b/src/protocol/rageircd.c index 52662ce8b..a6d444db9 100644 --- a/src/protocol/rageircd.c +++ b/src/protocol/rageircd.c @@ -106,6 +106,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/ratbox.c b/src/protocol/ratbox.c index 3a43a01dd..5ec2a1919 100644 --- a/src/protocol/ratbox.c +++ b/src/protocol/ratbox.c @@ -106,6 +106,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/shadowircd.c b/src/protocol/shadowircd.c index 5dc263c17..c23c51400 100644 --- a/src/protocol/shadowircd.c +++ b/src/protocol/shadowircd.c @@ -107,6 +107,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/solidircd.c b/src/protocol/solidircd.c index f2eccccaa..4c20de1c0 100644 --- a/src/protocol/solidircd.c +++ b/src/protocol/solidircd.c @@ -108,6 +108,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/ultimate2.c b/src/protocol/ultimate2.c index a0839a457..88d7d0a4f 100644 --- a/src/protocol/ultimate2.c +++ b/src/protocol/ultimate2.c @@ -106,6 +106,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/ultimate3.c b/src/protocol/ultimate3.c index 57ea90527..9daaa5bab 100644 --- a/src/protocol/ultimate3.c +++ b/src/protocol/ultimate3.c @@ -106,6 +106,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/unreal31.c b/src/protocol/unreal31.c index 303e90e8a..0159be396 100644 --- a/src/protocol/unreal31.c +++ b/src/protocol/unreal31.c @@ -108,6 +108,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 0, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} diff --git a/src/protocol/unreal32.c b/src/protocol/unreal32.c index ed3ea9a98..373a595c8 100644 --- a/src/protocol/unreal32.c +++ b/src/protocol/unreal32.c @@ -39,7 +39,7 @@ IRCDVar myIrcd[] = { "+ioS", /* Global alias mode */ "+qS", /* Used by BotServ Bots */ 5, /* Chan Max Symbols */ - "-cilmnpstuzACGHKMNOQRSTV", /* Modes to Remove */ + "-cijlmnpstuzACGKMNOQRSTV", /* Modes to Remove */ "+ao", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ @@ -108,6 +108,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 1, /* +j */ + CMODE_j, /* +j Mode */ } , {NULL} @@ -316,7 +318,7 @@ CBMode myCbmodes[128] = { {0}, /* g */ {0}, /* h */ {CMODE_i, 0, NULL, NULL}, - {0}, /* j */ + {CMODE_j, CBM_MINUS_NO_ARG | CBM_NO_MLOCK, chan_set_throttle, cs_set_throttle}, /* 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}, @@ -340,6 +342,7 @@ CBModeInfo myCbmodeinfos[] = { {'c', CMODE_c, 0, NULL, NULL}, {'f', CMODE_f, 0, get_flood, cs_get_flood}, {'i', CMODE_i, 0, NULL, NULL}, + {'j', CMODE_j, 0, get_throttle, cs_get_throttle}, {'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}, @@ -1854,6 +1857,26 @@ void unreal_cmd_ctcp(char *source, char *dest, char *buf) free(s); } +int unreal_jointhrottle_mode_check(char *value) +{ + char *tempValue, *one, *two; + int param1, param2; + + if (!value) + return 0; + + tempValue = sstrdup(value); + one = strtok(tempValue, ":"); + two = strtok(NULL, ""); + if (one && two) { + param1 = atoi(one); + param2 = atoi(two); + } + if ((param1 >= 1) && (param1 <= 255) && (param2 >= 1) && (param2 <= 999)) + return 1; + return 0; +} + /* *INDENT-OFF* */ void moduleAddIRCDMsgs(void) { Message *m; @@ -2192,6 +2215,7 @@ void moduleAddAnopeCmds() pmodule_valid_chan(unreal_valid_chan); pmodule_cmd_ctcp(unreal_cmd_ctcp); pmodule_set_umode(unreal_set_umode); + pmodule_jointhrottle_mode_check(unreal_jointhrottle_mode_check); } /** diff --git a/src/protocol/unreal32.h b/src/protocol/unreal32.h index 72fa091a5..dd09a043a 100644 --- a/src/protocol/unreal32.h +++ b/src/protocol/unreal32.h @@ -74,6 +74,7 @@ #define CMODE_N 0x01000000 #define CMODE_T 0x02000000 #define CMODE_M 0x04000000 +#define CMODE_j 0x08000000 /* Default Modes with MLOCK */ @@ -150,4 +151,5 @@ int unreal_flood_mode_check(char *value); void unreal_cmd_jupe(char *jserver, char *who, char *reason); int unreal_valid_nick(char *nick); void unreal_cmd_ctcp(char *source, char *dest, char *buf); +int unreal_jointhrottle_mode_check(char *value); diff --git a/src/protocol/viagra.c b/src/protocol/viagra.c index a536da401..e53d38b2f 100644 --- a/src/protocol/viagra.c +++ b/src/protocol/viagra.c @@ -107,6 +107,8 @@ IRCDVar myIrcd[] = { NULL, /* character set */ 1, /* reports sync state */ 0, /* CIDR channelbans */ + 0, /* +j */ + 0, /* +j mode */ } , {NULL} -- cgit