diff --git a/data/example.conf b/data/example.conf index 5841d6691..9f103a971 100644 --- a/data/example.conf +++ b/data/example.conf @@ -572,7 +572,8 @@ log logage = 7 /* - * Enable to have the core services clients join and stay in the log channel(s) when logging + * Enable to have the core services clients join and stay in the log channel(s) when logging. + * Note on some IRCds this is not optional, and is enforced on. */ inhabitlogchannel = yes diff --git a/docs/IRCD b/docs/IRCD index ad81c97f1..81b1482e5 100644 --- a/docs/IRCD +++ b/docs/IRCD @@ -26,32 +26,9 @@ How To Add IRCd Support than the one you used as a base. This section covers the majority of the code that is in use. - The first bit of code you will face is the IRCDVar structure, which is - explained in depth in the next section. - - Scroll down to the bottom and find the class for this module and rename it - to something reflecting your IRCd name. Find the function: - - pmodule_ircd_version("Unreal 3.2+"); - - This is the protocol name which will appear in various places; especially - when you do -version at the command prompt, this is where you state the - server name. The version is not always needed unless you are showing that - the support is for one branch of a ircd family, such as Unreal 3.1 and - Unreal 3.2. - - The next task that you will face is setting whether the IRCD sends time - stamps on modes but does not tell us that it will do so. If it does, set - UseTSMODE to 1; if it does not set it to be 0. If you're not sure refer - to your IRCd's documentation on how MODE is sent. - - pmodule_ircd_useTSMode(0); - -3) The IRCDVar struct - - Now you've come to the part where you setup your ircd. There are two - structs which hold this information; This allows you to quickly setup - your specific ircd. + The first bit of code you will face is the IRCDVar structure, This is one + of two structs which holds your IRCd information; This allows you to quickly + setup your specific ircd. IRCDVar myIrcd[] = { }; @@ -74,118 +51,103 @@ How To Add IRCd Support remember to count each possible mode, so +ov is 2. - 4) Channelmode for bots: When a BotServ bot joins a channel, this is the - mode set on them. Normally you will want them - opped (+o), and protected (+a) on IRCd's that - support it. - - 5) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise, + 4) SVSNICK: Can the ircd use SVSNICK to change some ones nick? Otherwise, KILL is used. Use 1 for yes, 0 for no. - 6) VHOST: Can a user's host be changed on the fly? Enabling this allow + 5) VHOST: Can a user's host be changed on the fly? Enabling this allow HostServ online. Use 1 for yes, 0 for no. - 7) SNLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes, + 6) SNLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes, 0 for no. - 8) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no. + 7) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no. - 9) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no. + 8) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no. - 10) Number of Server Args: When an IRCd connects, this is the number of - parameters that are passed. - - 11) Join to Set: Services must join a channel to set any modes on that + 10) Join to Set: Services must join a channel to set any modes on that channel. Use 1 for yes, 0 for no. - 12) Join to Message: Services must join a channel to send any message to + 11) Join to Message: Services must join a channel to send any message to that channel (cannot override +n). Use 1 for yes, 0 for no. - 13) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS + 12) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS set forward by +1. Use 1 for yes, 0 for no. - 14) TS Topic Backward: Some IRCd's (mainly older DreamForge-like ones) + 13) TS Topic Backward: Some IRCd's (mainly older DreamForge-like ones) like their topic TS set back by -1. Use 1 for yes, 0 for no. - 15) SQline Channels: The IRCd's supports banning channel names via + 14) SQline Channels: The IRCd's supports banning channel names via SQLINES. Use 1 for yes, 0 for no. - 16) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a + 15) Quit On Kill: When we (SVS)KILL a user, does the IRCd send back a QUIT message for that user? Use 1 for yes, 0 for no. - 17) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use + 16) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use 1 for yes, 0 for no. - 18) Reverse: We can do a reverse check when unbanning. For use with + 17) Reverse: We can do a reverse check when unbanning. For use with DreamForge based IRCd's. Use 1 for yes, 0 for no. - 19) vIdent: Support for including a user's ident in their vHost. Use + 18) vIdent: Support for including a user's ident in their vHost. Use 1 for yes, 0 for no. - 20) SVSHOLD: Support for temporarily 'holding' a nick, instead of using + 19) SVSHOLD: Support for temporarily 'holding' a nick, instead of using a nick enforcer client. Use 1 for yes, 0 for no. - 21) TS on MODE: We need to send a timestamp when modes are being changed. + 20) TS on MODE: We need to send a timestamp when modes are being changed. Use 1 for yes, 0 for no. - 22) NICKIP: The IP address of new users is being sent along with their + 21) NICKIP: The IP address of new users is being sent along with their hostname when new users are being introduced on the network. Use 1 for yes, 0 for no. - 23) OMODE: We can use OperServ to give some user a temporary O:LINE. + 22) OMODE: We can use OperServ to give some user a temporary O:LINE. Use 1 for yes, 0 for no. - 24) Umode: We can use OperServ to change a user's mode. Use 1 for yes, + 23) Umode: We can use OperServ to change a user's mode. Use 1 for yes, 0 for no. - 25) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes, + 24) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes, 0 for no. - 26) Change Realname: Change real name. Use 1 for yes, 0 for no. - - 27) Check Nick ID: Should we check if a user should remain identified when + 25) Check Nick ID: Should we check if a user should remain identified when changing their nick? This is for IRCd's that remove their registered-user mode when someone changes their nick (like Bahamut does). Use 1 for yes, 0 for no. - 28) No Knock Requires +i: Does the No Knock channel mode require invite + 26) No Knock Requires +i: Does the No Knock channel mode require invite only channels? Use 1 for yes, 0 for no. - 29) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is - NULL by default. - - 30) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes, + 27) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes, 0 for no. - 31) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use + 28) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use 1 for yes, 0 for no. - 32) SJOIN Ban Char: Character used to identify bans. Use ''. + 29) SJOIN Ban Char: Character used to identify bans. Use ''. - 33) SJOIN Except Char: Character used to identify exceptions. Use ''. + 30) SJOIN Except Char: Character used to identify exceptions. Use ''. - 34) SJOIN Invite char: Character used to idenfity invexs. Use ''. + 31) SJOIN Invite char: Character used to idenfity invexs. Use ''. - 35) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use + 32) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use 1 for yes, 0 for no. - 36) SGline Enforce: Does the IRCd enforce SNLINES for us or do we need to + 33) SGline Enforce: Does the IRCd enforce SNLINES for us or do we need to do so? Use 1 for yes, 0 for no. - 37) Vhost Character: The character used to represent the vHost mode, if + 34) Vhost Character: The character used to represent the vHost mode, if this is supported by the IRCd. - 38) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no. + 35) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no. - 39) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no. - - 40) Character Set: Unreal passes the character set during PROTOCTL, + 36) Character Set: Unreal passes the character set during PROTOCTL, the value is stored here. Set this NULL to start. - 41) Channel CIDR: Set to 1 if channel bans, excepts and invites + 37) Channel CIDR: Set to 1 if channel bans, excepts and invites support CIDR masks. Expected syntax: *!*@ip/mask. When set to 1, anope will only parse strict CIDR masks. IRCd's that try to correct invalid CIDR's (like nefarious) @@ -193,21 +155,21 @@ How To Add IRCd Support Contact the anope Dev Team if this is the case. Set to 0 if CIDR's are not supported by your IRCd. - 42) Global TLD Prefix: Prefix used to send global messages, should probably + 38) Global TLD Prefix: Prefix used to send global messages, should probably be "$" - 43) Max Modes: The max number of mode changes we can send in one line + 39) Max Modes: The max number of mode changes we can send in one line -4) Modes +3) Modes Anope is told about modes in the moduleAddModes() function. For the most part, the syntax for adding channel and user modes are: - ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, 'N')); + ModeManager::AddUserMode(new UserMode(UMODE_NETADMIN, "UMODE_NETADMIN", 'N')); Where 'N' is the char for the mode, and UMODE_NETADMIN shows what the mode does. Or: - ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, 'c')); + ModeManager::AddChannelMode(new ChannelMode(CMODE_BLOCKCOLOR, "CMODE_BLOCKCOLOR", 'c')); Where 'c' is the char for the mode and CMODE_BLOCKCOLOR shows what the mode does @@ -220,7 +182,7 @@ How To Add IRCd Support arg of ChannelModeParam to false if the param should NOT be sent when unsetting it. Eg: - ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, 'j', true)); + ModeManager::AddChannelMode(new ChannelModeParam(CMODE_JOINFLOOD, "CMODE_JOINFLOOD", 'j', true)); Anope will internally track the params, and they can be retrieved through Channel::GetParam(); @@ -238,22 +200,21 @@ How To Add IRCd Support valid parameters accepted across IRCds, your protocol module MUST have the IsValid function for this. - bool ChannelModeFlood::IsValid(const std::string &value) { } + bool ChannelModeFlood::IsValid(const Anope::string &value) { } -5) Functions and Events +4) Functions and Events A brief word about functions and events. All events are captured using: void moduleAddIRCDMsgs(void) { - m = createMessage("NICK", anope_event_nick); - addCoreMessage(IRCD,m); + Anope::AddMessage("NICK", anope_event_nick); } Each event should have a event handler if its important enough to be processed by services. All event functions should be formed like this: - int anope_event_capab(char *source, int ac, char **av) + int anope_event_nick(char *source, int ac, char **av) { return MOD_CONT; } @@ -276,7 +237,7 @@ How To Add IRCd Support should eventually come to a send_cmd(); this root function is how commands are sent to the IRCd. -6) CAPAB/PROTOCTL +5) CAPAB/PROTOCTL Most IRCD send a CAPAB or PROTOCTL line so that they can work out what the other end of the connection is capable of doing. Anope has a function @@ -344,9 +305,8 @@ How To Add IRCd Support A) In the function module constructor make sure that you have the following two lines: - - m = createMessage("CAPAB", anope_event_capab); - addCoreMessage(IRCD,m); + + Anope::AddMessage("CAPAB", anope_event_capab); B) Add the function to handle the event @@ -359,7 +319,7 @@ How To Add IRCd Support This function should call the CapabParse function which parses the received CAPAB/PROTOCTL line. -7) IRCDProto Class +6) IRCDProto Class The IRCDProto class is set up like: diff --git a/include/extern.h b/include/extern.h index dc4582478..05e43a980 100644 --- a/include/extern.h +++ b/include/extern.h @@ -22,7 +22,6 @@ E void ModuleRunTimeDirCleanUp(); /* IRC Variables */ E IRCDVar *ircd; -E int UseTSMODE; /* hack to get around bahamut clones that don't send TSMODE */ E IRCDProto *ircdproto; /**** actions.c ****/ @@ -159,8 +158,6 @@ E Uplink *uplink_server; /**** ircd.c ****/ E void pmodule_ircd_proto(IRCDProto *); E void pmodule_ircd_var(IRCDVar *ircdvar); -E void pmodule_ircd_version(const Anope::string &version); -E void pmodule_ircd_useTSMode(int use); /**** language.c ****/ @@ -181,8 +178,6 @@ E void InitLogChannels(ServerConfig *); /**** main.c ****/ -E Anope::string version_protocol; - E Anope::string services_dir; E Anope::string log_filename; E int debug; diff --git a/include/services.h b/include/services.h index a0c701b95..d663c0a84 100644 --- a/include/services.h +++ b/include/services.h @@ -441,13 +441,11 @@ struct IRCDVar const char *name; /* Name of the IRCd command */ const char *pseudoclient_mode; /* Mode used by BotServ Bots */ int max_symbols; /* Chan Max Symbols */ - const char *botchanumode; /* Modes set when botserv joins a channel */ int svsnick; /* Supports SVSNICK */ int vhost; /* Supports vhost */ int snline; /* Supports SNline */ int sqline; /* Supports SQline */ int szline; /* Supports SZline */ - int numservargs; /* Number of Server Args */ int join2set; /* Join 2 Set Modes */ int join2msg; /* Join 2 Message */ int topictsforward; /* TS on Topics Forward */ @@ -463,13 +461,10 @@ struct IRCDVar int omode; /* On the fly o:lines */ int umode; /* change user modes */ int nickvhost; /* Users vhost sent during NICK */ - int chgreal; /* Change RealName */ int knock_needs_i; /* Check if we needed +i when setting NOKNOCK */ - int token; /* Does Anope support the tokens for the ircd */ int svsmode_ucmode; /* Can remove User Channel Modes with SVSMODE */ int sglineenforce; int ts6; /* ircd is TS6 */ - int p10; /* ircd is P10 */ int cidrchanbei; /* channel bans/excepts/invites support CIDR (syntax: +b *!*@192.168.0.0/15) * 0 for no support, 1 for strict cidr support, anything else * for ircd specific support (nefarious only cares about first /mask) */ diff --git a/modules/protocol/bahamut.cpp b/modules/protocol/bahamut.cpp index 5c9a35032..ae65bd364 100644 --- a/modules/protocol/bahamut.cpp +++ b/modules/protocol/bahamut.cpp @@ -16,15 +16,13 @@ IRCDVar myIrcd[] = { {"Bahamut 1.8.x", /* ircd name */ - "+", /* Modes used by pseudoclients */ + "+", /* Modes used by pseudoclients */ 2, /* Chan Max Symbols */ - "+o", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 0, /* Vhost */ 1, /* Supports SNlines */ 1, /* Supports SQlines */ 1, /* Supports SZlines */ - 3, /* Number of server args */ 0, /* Join 2 Set */ 0, /* Join 2 Message */ 0, /* TS Topic Forward */ @@ -40,13 +38,10 @@ IRCDVar myIrcd[] = { 0, /* O:LINE */ 1, /* UMODE */ 0, /* VHOST ON NICK */ - 0, /* Change RealName */ 1, /* No Knock requires +i */ - 0, /* We support TOKENS */ 0, /* Can remove User Channel Modes with SVSMODE */ 0, /* Sglines are not enforced until user reconnects */ 0, /* ts6 */ - 0, /* p10 */ 0, /* CIDR channelbans */ "$", /* TLD Prefix for Global */ 6, /* Max number of modes we can send per line */ @@ -772,9 +767,7 @@ class ProtoBahamut : public Module this->SetAuthor("Anope"); this->SetType(PROTOCOL); - pmodule_ircd_version("BahamutIRCd 1.4.*/1.8.*"); pmodule_ircd_var(myIrcd); - pmodule_ircd_useTSMode(0); CapabType c[] = { CAPAB_NOQUIT, CAPAB_TSMODE, CAPAB_UNCONNECT, CAPAB_BURST, CAPAB_DKEY, CAPAB_DOZIP }; for (unsigned i = 0; i < 6; ++i) diff --git a/modules/protocol/inspircd11.cpp b/modules/protocol/inspircd11.cpp index 20b347899..ebbedd362 100644 --- a/modules/protocol/inspircd11.cpp +++ b/modules/protocol/inspircd11.cpp @@ -19,13 +19,11 @@ IRCDVar myIrcd[] = { {"InspIRCd 1.1", /* ircd name */ "+I", /* Modes used by pseudoclients */ 5, /* Chan Max Symbols */ - "+ao", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ 1, /* Supports SNlines */ 1, /* Supports SQlines */ 1, /* Supports SZlines */ - 4, /* Number of server args */ 0, /* Join 2 Set */ 1, /* Join 2 Message */ 1, /* TS Topic Forward */ @@ -41,13 +39,10 @@ IRCDVar myIrcd[] = { 1, /* O:LINE */ 1, /* UMODE */ 1, /* VHOST ON NICK */ - 0, /* Change RealName */ 1, /* No Knock requires +i */ - 0, /* We support inspircd TOKENS */ 0, /* Can remove User Channel Modes with SVSMODE */ 0, /* Sglines are not enforced until user reconnects */ 0, /* ts6 */ - 0, /* p10 */ 1, /* CIDR channelbans */ "$", /* TLD Prefix for Global */ 20, /* Max number of modes we can send per line */ @@ -1092,9 +1087,7 @@ class ProtoInspIRCd : public Module this->SetAuthor("Anope"); this->SetType(PROTOCOL); - pmodule_ircd_version("InspIRCd 1.1"); pmodule_ircd_var(myIrcd); - pmodule_ircd_useTSMode(0); CapabType c[] = { CAPAB_NOQUIT, CAPAB_SSJ3, CAPAB_NICK2, CAPAB_VL, CAPAB_TLKEXT }; for (unsigned i = 0; i < 5; ++i) diff --git a/modules/protocol/inspircd12.cpp b/modules/protocol/inspircd12.cpp index 30d4f3600..3c5d0f11c 100644 --- a/modules/protocol/inspircd12.cpp +++ b/modules/protocol/inspircd12.cpp @@ -19,13 +19,11 @@ IRCDVar myIrcd[] = { {"InspIRCd 1.2", /* ircd name */ "+I", /* Modes used by pseudoclients */ 5, /* Chan Max Symbols */ - "+ao", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ 0, /* Supports SNlines */ 1, /* Supports SQlines */ 1, /* Supports SZlines */ - 4, /* Number of server args */ 0, /* Join 2 Set */ 0, /* Join 2 Message */ 1, /* TS Topic Forward */ @@ -41,13 +39,10 @@ IRCDVar myIrcd[] = { 0, /* O:LINE */ 1, /* UMODE */ 1, /* VHOST ON NICK */ - 0, /* Change RealName */ 1, /* No Knock requires +i */ - 0, /* We support inspircd TOKENS */ 0, /* Can remove User Channel Modes with SVSMODE */ 0, /* Sglines are not enforced until user reconnects */ 1, /* ts6 */ - 0, /* p10 */ 1, /* CIDR channelbans */ "$", /* TLD Prefix for Global */ 20, /* Max number of modes we can send per line */ @@ -1270,9 +1265,7 @@ class ProtoInspIRCd : public Module if (!Config->Numeric.empty()) TS6SID = Config->Numeric; - pmodule_ircd_version("InspIRCd 1.2"); pmodule_ircd_var(myIrcd); - pmodule_ircd_useTSMode(0); CapabType c[] = { CAPAB_NOQUIT, CAPAB_SSJ3, CAPAB_NICK2, CAPAB_VL, CAPAB_TLKEXT }; for (unsigned i = 0; i < 5; ++i) diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp index 1b6a582c0..1770445cc 100644 --- a/modules/protocol/inspircd20.cpp +++ b/modules/protocol/inspircd20.cpp @@ -19,13 +19,11 @@ IRCDVar myIrcd[] = { {"InspIRCd 2.0", /* ircd name */ "+I", /* Modes used by pseudoclients */ 5, /* Chan Max Symbols */ - "+ao", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ 0, /* Supports SNlines */ 1, /* Supports SQlines */ 1, /* Supports SZlines */ - 4, /* Number of server args */ 0, /* Join 2 Set */ 0, /* Join 2 Message */ 1, /* TS Topic Forward */ @@ -41,13 +39,10 @@ IRCDVar myIrcd[] = { 0, /* O:LINE */ 1, /* UMODE */ 1, /* VHOST ON NICK */ - 0, /* Change RealName */ 1, /* No Knock requires +i */ - 0, /* We support inspircd TOKENS */ 0, /* Can remove User Channel Modes with SVSMODE */ 0, /* Sglines are not enforced until user reconnects */ 1, /* ts6 */ - 0, /* p10 */ 1, /* CIDR channelbans */ "$", /* TLD Prefix for Global */ 20, /* Max number of modes we can send per line */ @@ -1244,9 +1239,7 @@ class ProtoInspIRCd : public Module if (!Config->Numeric.empty()) TS6SID = Config->Numeric; - pmodule_ircd_version("InspIRCd 2.0"); pmodule_ircd_var(myIrcd); - pmodule_ircd_useTSMode(0); CapabType c[] = { CAPAB_NOQUIT, CAPAB_SSJ3, CAPAB_NICK2, CAPAB_VL, CAPAB_TLKEXT }; for (unsigned i = 0; i < 5; ++i) diff --git a/modules/protocol/ratbox.cpp b/modules/protocol/ratbox.cpp index b45f1121a..db5c4d5bd 100644 --- a/modules/protocol/ratbox.cpp +++ b/modules/protocol/ratbox.cpp @@ -18,13 +18,11 @@ IRCDVar myIrcd[] = { {"Ratbox 2.0+", /* ircd name */ "+oi", /* Modes used by pseudoclients */ 2, /* Chan Max Symbols */ - "+o", /* Channel Umode used by Botserv bots */ 0, /* SVSNICK */ 0, /* Vhost */ 1, /* Supports SNlines */ 1, /* Supports SQlines */ 0, /* Supports SZlines */ - 3, /* Number of server args */ 1, /* Join 2 Set */ 1, /* Join 2 Message */ 0, /* TS Topic Forward */ @@ -40,13 +38,10 @@ IRCDVar myIrcd[] = { 0, /* UMODE */ 0, /* O:LINE */ 0, /* VHOST ON NICK */ - 0, /* Change RealName */ 0, /* No Knock requires +i */ - 0, /* We support TOKENS */ 0, /* Can remove User Channel Modes with SVSMODE */ 0, /* Sglines are not enforced until user reconnects */ 1, /* ts6 */ - 0, /* p10 */ 0, /* CIDR channelbans */ "$$", /* TLD Prefix for Global */ 4, /* Max number of modes we can send per line */ @@ -793,14 +788,11 @@ class ProtoRatbox : public Module if (!Config->Numeric.empty()) TS6SID = Config->Numeric; - UseTSMODE = 1; /* TMODE */ - pmodule_ircd_version("Ratbox IRCD 2.0+"); pmodule_ircd_var(myIrcd); - pmodule_ircd_useTSMode(1); - CapabType c[] = { CAPAB_ZIP, CAPAB_TS5, CAPAB_QS, CAPAB_UID, CAPAB_KNOCK }; - for (unsigned i = 0; i < 5; ++i) + CapabType c[] = { CAPAB_ZIP, CAPAB_TS5, CAPAB_QS, CAPAB_UID, CAPAB_KNOCK, CAPAB_TSMODE }; + for (unsigned i = 0; i < 6; ++i) Capab.SetFlag(c[i]); AddModes(); diff --git a/modules/protocol/unreal32.cpp b/modules/protocol/unreal32.cpp index 5304e9d83..047f51b15 100644 --- a/modules/protocol/unreal32.cpp +++ b/modules/protocol/unreal32.cpp @@ -18,13 +18,11 @@ IRCDVar myIrcd[] = { {"UnrealIRCd 3.2.x", /* ircd name */ "+Soi", /* Modes used by pseudoclients */ 5, /* Chan Max Symbols */ - "+ao", /* Channel Umode used by Botserv bots */ 1, /* SVSNICK */ 1, /* Vhost */ 1, /* Supports SNlines */ 1, /* Supports SQlines */ 1, /* Supports SZlines */ - 3, /* Number of server args */ 0, /* Join 2 Set */ 0, /* Join 2 Message */ 1, /* TS Topic Forward */ @@ -40,13 +38,10 @@ IRCDVar myIrcd[] = { 1, /* O:LINE */ 1, /* UMODE */ 1, /* VHOST ON NICK */ - 1, /* Change RealName */ 1, /* No Knock requires +i */ - 1, /* We support Unreal TOKENS */ 1, /* Can remove User Channel Modes with SVSMODE */ 0, /* Sglines are not enforced until user reconnects */ 0, /* ts6 */ - 0, /* p10 */ 0, /* CIDR channelbans */ "$", /* TLD Prefix for Global */ 12, /* Max number of modes we can send per line */ @@ -1265,9 +1260,7 @@ class ProtoUnreal : public Module this->SetAuthor("Anope"); this->SetType(PROTOCOL); - pmodule_ircd_version("UnrealIRCd 3.2+"); pmodule_ircd_var(myIrcd); - pmodule_ircd_useTSMode(0); CapabType c[] = { CAPAB_NOQUIT, CAPAB_NICKIP, CAPAB_ZIP, CAPAB_TOKEN, CAPAB_SSJ3, CAPAB_NICK2, CAPAB_VL, CAPAB_TLKEXT, CAPAB_CHANMODE, CAPAB_NICKCHARS }; for (unsigned i = 0; i < 10; ++i) diff --git a/src/channels.cpp b/src/channels.cpp index 506dbfc7d..29cc2c895 100644 --- a/src/channels.cpp +++ b/src/channels.cpp @@ -1252,7 +1252,7 @@ void do_cmode(const Anope::string &source, int ac, const char **av) unsigned i, end; const char *t; - if (Capab.HasFlag(CAPAB_TSMODE) || UseTSMODE) + if (Capab.HasFlag(CAPAB_TSMODE)) { for (i = 0, end = strlen(av[1]); i < end; ++i) if (!isdigit(av[1][i])) diff --git a/src/config.cpp b/src/config.cpp index 3526f6636..612aecf66 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -835,33 +835,30 @@ bool InitLogs(ServerConfig *config, const Anope::string &) { LogInfo *l = config->LogInfos[i]; - if (l->Inhabit) + for (std::list::const_iterator sit = l->Targets.begin(), sit_end = l->Targets.end(); sit != sit_end; ++sit) { - for (std::list::const_iterator sit = l->Targets.begin(), sit_end = l->Targets.end(); sit != sit_end; ++sit) + const Anope::string &target = *sit; + + if (target[0] == '#') { - const Anope::string &target = *sit; - - if (target[0] == '#') + Channel *c = findchan(target); + if (c && c->HasFlag(CH_LOGCHAN)) { - Channel *c = findchan(target); - if (c && c->HasFlag(CH_LOGCHAN)) + for (CUserList::const_iterator cit = c->users.begin(), cit_end = c->users.end(); cit != cit_end; ++cit) { - for (CUserList::const_iterator cit = c->users.begin(), cit_end = c->users.end(); cit != cit_end; ++cit) + UserContainer *uc = *cit; + BotInfo *bi = findbot(uc->user->nick); + + if (bi && bi->HasFlag(BI_CORE)) { - UserContainer *uc = *cit; - BotInfo *bi = findbot(uc->user->nick); - - if (bi && bi->HasFlag(BI_CORE)) - { - bi->Part(c, "Reloading"); - } + bi->Part(c, "Reloading configuration"); } - - c->UnsetFlag(CH_PERSIST); - c->UnsetFlag(CH_LOGCHAN); - if (c->users.empty()) - delete c; } + + c->UnsetFlag(CH_PERSIST); + c->UnsetFlag(CH_LOGCHAN); + if (c->users.empty()) + delete c; } } } @@ -875,7 +872,7 @@ bool InitLogs(ServerConfig *config, const Anope::string &) bool DoLogs(ServerConfig *config, const Anope::string &, const Anope::string *, ValueList &values, int *) { - //{"target", "source", "logage", "admin", "override", "commands", "servers", "channels", "users", "normal", "rawio", "debug"}, + //{"target", "source", "logage", "inhabit", "admin", "override", "commands", "servers", "channels", "users", "normal", "rawio", "debug"}, Anope::string targets = values[0].GetValue(); ValueItem vi(targets); if (!ValidateNotEmpty(config, "log", "target", vi)) @@ -911,7 +908,8 @@ bool DoLogs(ServerConfig *config, const Anope::string &, const Anope::string *, bool DoneLogs(ServerConfig *config, const Anope::string &) { - InitLogChannels(config); + if (ircd) + InitLogChannels(config); Log() << "Loaded " << config->LogInfos.size() << " log blocks"; diff --git a/src/init.cpp b/src/init.cpp index 5b6d22445..94cf37ce9 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -54,8 +54,6 @@ void introduce_user(const Anope::string &user) /* Load MLock from the database now that we know what modes exist */ for (registered_channel_map::iterator it = RegisteredChannelList.begin(), it_end = RegisteredChannelList.end(); it != it_end; ++it) it->second->LoadMLock(); - /* Setup log chanels */ - InitLogChannels(Config); } } @@ -355,6 +353,9 @@ void Init(int ac, char **av) if (!Config->s_GlobalNoticer.empty()) new BotInfo(Config->s_GlobalNoticer, Config->ServiceUser, Config->ServiceHost, Config->desc_GlobalNoticer); + /* Init the log channels */ + InitLogChannels(Config); + /* Add Encryption Modules */ ModuleManager::LoadModuleList(Config->EncModuleList); @@ -404,7 +405,7 @@ void Init(int ac, char **av) write_pidfile(); /* Announce ourselves to the logfile. */ - Log() << "Anope " << Anope::Version() << " (ircd protocol: " << version_protocol << ") starting up" << (debug || readonly ? " (options:" : "") << (debug ? " debug" : "") << (readonly ? " readonly" : "") << (debug || readonly ? ")" : ""); + Log() << "Anope " << Anope::Version() << " (ircd protocol: " << ircd->name << ") starting up" << (debug || readonly ? " (options:" : "") << (debug ? " debug" : "") << (readonly ? " readonly" : "") << (debug || readonly ? ")" : ""); start_time = time(NULL); /* Set signal handlers. Catch certain signals to let us do things or diff --git a/src/ircd.cpp b/src/ircd.cpp index e6ac76079..edab02be4 100644 --- a/src/ircd.cpp +++ b/src/ircd.cpp @@ -18,8 +18,6 @@ IRCDProto *ircdproto; * Globals we want from the protocol file **/ IRCDVar *ircd; -Anope::string version_protocol; -int UseTSMODE; void pmodule_ircd_proto(IRCDProto *proto) { @@ -34,12 +32,3 @@ void pmodule_ircd_var(IRCDVar *ircdvar) ircd = ircdvar; } -void pmodule_ircd_version(const Anope::string &version) -{ - version_protocol = version; -} - -void pmodule_ircd_useTSMode(int use) -{ - UseTSMODE = use; -} diff --git a/src/logger.cpp b/src/logger.cpp index 92b87279d..de5e58c32 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -17,7 +17,7 @@ void InitLogChannels(ServerConfig *config) { LogInfo *l = config->LogInfos[i]; - if (!l->Inhabit) + if (!ircd->join2msg && !l->Inhabit) continue; for (std::list::const_iterator sit = l->Targets.begin(), sit_end = l->Targets.end(); sit != sit_end; ++sit)