diff options
Diffstat (limited to 'docs/IRCD')
-rw-r--r-- | docs/IRCD | 853 |
1 files changed, 472 insertions, 381 deletions
@@ -1,466 +1,557 @@ -HOW TO ADD IRCD SUPPORT - -1. Files to edit -2. Modifing the header file -3. The code -4. Modes -5. Functions / Events -6. CAPAB/PROTOCTL - -============================================================================================= +How To Add IRCd Support +----------------------- + +1) Files to Edit +2) Modifing the Header File +3) The Code +4) Modes +5) Functions / Events +6) CAPAB/PROTOCTL + +1) Files to Edit + + When preparing to add support to Anope for your ircd, you need to edit + the following files. + + A) Make a copy of the .c and .h file of the IRCd that matches the ircd + that you are attempting to add support for best. + B) Make a backup copy of include/services.h, include/sysconf.h.in + C) Make a backup copy of Config and configure.in + + First step in this process is to rename the .c and .h file after the IRCd + that you are going to be adding support for. Its recommened that you come + up with a name that is clear and easy to understand. + + Now that you have the files that you will need to create your own ircd + support, starting with Config. This file is a shell script file; scroll + down untill you find the list of ircs for the user to select. Indicate + the based ircd version which is supported such as a series 1.x or 2.2.x, + placing in the comment side an exact version that the support is for or + "experimental" if you are not the ircd developer. The next step is to + decide how the IRCd will be defined, following the existing examples edit + 'IRCTYPE_DEF="IRC_RATBOX"' to be the descriptive define for your ircd. + + With the Config file ready to go, edit configure.in and find in there the + reference to --with-ircd. You should see see the various other ircds, and + you will want to add yours in there using the same IRC_ name you came up + with above. Important in this step is to make sure that you set the + IRCDFILE to the name of the .c file you set in step 1. Once you have the + configure.in created you can remove the old configure and at the command + prompt type "autconf"; this will generate the new configure file. + + Getting close to actually modify code. Open sysconf.h.in and add two + lines for your given ircd, which is similar to this: + + /* "First IRCD type" */ + #undef IRC_RATBOX + + Open services.h and add a line with the rest of the ircd include files to + match the name of the .h file you set in step 1. + + #include "ratbox.h" + + Taking the .c and .h file open them and replace the #ifdef IRC_* with the + IRC_ name you set in step two. Ensure that the code comments at the top + of the file match the ircd that the code will be for. + + You are now ready to start getting into the code. + +2) Modifing the Header File + + Now that you have gotten past the first part of the creation process, you + are into the code. This part is the harder and more complex part. You + will need a general understanding of C code to continue. Here are the + step by step instructions required to make this work. + + Open the .h file and find the section of code with + + #define PROTECT_SET_MODE "+" + #define PROTECT_UNSET_MODE "-" + #define CS_CMD_PROTECT "PROTECT" + #define CS_CMD_DEPROTECT "DEPROTECT" + #define FANT_PROTECT_ADD "!protect" + #define FANT_PROTECT_DEL "!deprotect" + #define LEVEL_PROTECT_WORD "AUTOPROTECT" + #define LEVELINFO_PROTECT_WORD "PROTECT" + #define LEVELINFO_PROTECTME_WORD "PROTECTME" + + If the ircd supports a protective/admin (not owner) mode, set the + PROTECT_SET_MODE and PROTECT_UNSET_MODE to be that mode. On most ircds + it's usermode "a" so you will be setting it to "+a" and "-a". The next + two are based more on what this mode is called. When you message ChanServ + to get this mode, this is the command you will be using. After this are + the fantasy commands which can be used in channel to get these modes. The + next three relate to the ACCESS LEVEL list system. Again these are the + words to gain these levels in the ACCESS LEVEL system. If your ircd does + not have these functions, leave them at what ever value is currently set; + the core code will ignore the request of the user. + + Now that this is set, you can define the MODES. All user modes are stored + with UMODE_ followed by a letter matching the modes case; be careful to + use the correct case as this will make it clear when you setup MODES in + the .c in a few. Use hex values for the modes so starting at 0x00000001 + to 0x8000000. In most cases you want to list all modes. If you run out of + values look at removing any modes that do not impact services. + + Channel modes are done much like user modes, with the exception that + bans, exceptions, invites, and modes that are applied to a user such as + op and voice are not defined here. All other modes are defined in here. + Again be clear and use the correct case and use hex values as done with + user modes. + + Finally we come to DEFAULT_MLOCK; this is the mode that services will set + by default on channels when they are registered. In general you want this + to be whats acceptable by the ircd; in most cases this is "+nt" + +3) The Code + + Here is where the code of the .c file comes in. Be prepared to spend at + least an hour, if not longer, going over the code and getting it right; + Especially if you are setting up an ircd that is completely different + 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: + + const char version_protocol[] = "Ratbox IRCD"; + + This 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. + + Once you have decided on this little piece of code, you will come to + flood mode characters being used for setting and removing. If your IRCd + does not support flood modes, you can just use ""; we will be setting if + your IRCD supports flooding or not in a little bit. + + const char flood_mode_char_set[] = "+f"; + const char flood_mode_char_remove[] = "-f"; + + 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. + + int UseTSMODE = 0; + + 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. + + IRCDVar ircd[] = { } + + This struct contains your basic IRCd functions. Your base source file has + the list of all available variables; note that you should not swap any + around, or you will break stuff. Here is a brief description of the usage + of each. + + 1) Name: This member tells Anope about the IRCD's name. It may contain + text about it's name and version. This is used to identify the + build on startup. + + 2) NickServ Mode: This is the user mode set by Anope on NickServ. + Normally you want this to be some form of oper flag, + or a services flag. + + 3) ChanServ Mode: This is the user mode set by Anope on ChanServ. + Normally you want this to be some form of oper flag, + or a services flag. + + 4) MemoServ Mode: This is the user mode set by Anope on MemoServ. + Normally you want this to be some form of oper flag, + or a services flag. + + 5) HostServ Mode: This is the user mode set by Anope on HostServ. + Normally you want this to be some form of oper flag, + or a services flag. Note that if your ircd does not + support HostServ, you can safely make this NULL or +, + as there is a check before bringing HostServ online. + + 6) OperServ Mode: This is the user mode set by Anope on OperServ. + Normally you want this to be some form of oper flag, + or a services flag. + + 7) BotServ Mode: This is the user mode set by Anope on BotServ. + Normally you want this to be some form of oper flag, + or a services flag. + + 8) HelpServ Mode: This is the user mode set by Anope on HelpServ. + Normally you want this to be some form of oper flag, + or a services flag. + + 9) DevNull Mode: This is the user mode set by Anope on DevNull. + Normally you want this to be some form of oper flag, + or a services flag. -1. FILES TO EDIT + 10) Global Mode: This is the user mode set by Anope on Global. + Normally you want this to be some form of oper flag, + or a services flag. -When preparing to add support to Anope for your ircd, you need to edit the -following files. + 11) NickServ Alias Mode: This is the user mode set by Anope on the alias + of NickServ. Normally you want this to be some + form of oper flag, or a services flag. -A. Make a copy of the .c and .h file of the IRCD that closely matches the ircd - that you are attempting to add support for. -B. Make a backup copy of include/services.h, include/sysconf.h.in -C. Make a backup copy of Config and configure.in + 12) ChanServ Alias Mode: This is the user mode set by Anope on the alias + of ChanServ. Normally you want this to be some + form of oper flag, or a services flag. -First step in this process is to rename the .c and .h file after the IRCD that you are going -to be adding support for. Its recommened that you come up with a name that is clear and easy -to understand. + 13) MemoServ Alias Mode: This is the user mode set by Anope on the alias + of MemoServ. Normally you want this to be some + form of oper flag, or a services flag. -Now that you have the files that you will need to create your own ircd support. Starting with -Config, this file is a shell script file, scroll down till you find the list of ircds for the -user to select. Indicate the based ircd version which is supported such as a series 1.x or 2.2.x, -placing in the comment side an exact version that the support is for or "experimental" if you -are not the ircd developer. The next step is to decide how the IRCD will be defined, following -the existing examples edit " IRCTYPE_DEF="IRC_RATBOX" " to be the descriptive define for your -ircd. + 14) HostServ Alias Mode: This is the user mode set by Anope on the alias + of MemoServ. Normally you want this to be some + form of oper flag, or a services flag. Note that + if your ircd does not support HostServ, you can + safely make this NULL or +, as there is a check + before bringing HostServ online. -With the Config file ready to go, edit configure.in and find in there the reference to ---with-ircd, you should see see the various other ircd, and you will want to add yours in there -using the same IRC_ name you came up with above. Important in this step is to make sure that you -set the IRCDFILE to the name of the .c file you set in step 1. Once you have the configure.in -created you can remove the old configure and at the command prompt type "autconf", this will -generate the configure file. + 15) OperServ Alias Mode: This is the user mode set by Anope on the alias + of OperServ. Normally you want this to be some + form of oper flag, or a services flag. -Getting close to actually modify code. Open sysconf.h.in and add two lines for your given ircd -which is similar to this + 16) BotServ Alias Mode: This is the user mode set by Anope on the alias + of BotServ. Normally you want this to be some + form of oper flag, or a services flag. -/* "First IRCD type" */ -#undef IRC_RATBOX + 17) HelpServ Alias Mode: This is the user mode set by Anope on the alias + of HelpServ. Normally you want this to be some + form of oper flag, or a services flag. -Open services.h and add a line with the rest of the ircd include files to match the name of the -.h file you set in step 1. + 18) DevNull Alias Mode: This is the user mode set by Anope on the alias + of DevNull. Normally you want this to be some + form of oper flag, or a services flag. -#include "ratbox.h" + 19) Global Alias Mode: This is the user mode set by Anope on the alias + of Global. Normally you want this to be some form + of oper flag, or a services flag. -Taking the .c and .h file open them and replace the #ifdef IRC_* with the IRC_ name you set in -step two. Ensure that the code comments at the top of the file match the ircd that the code -will be for. + 20) BotServ Bots Mode: This is the user mode set by Anope on all BotServ + bots. Normally you want this to be a some form of + service or bot flag; you can use + for no mode at + all. -You are now ready to start getting into the code. + 21) Max Channelmode Symbols: This is the total number of possible channel + modes that can appear before a nick. Do + remember to count each possible mode, so +ov + is 2. -============================================================================================= + 22) Modes to Remove: This is every mode that Anope should remove when + stripping channel modes. -2. Modifing the header file + 23) 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. -Now that you have gotten past the first part of the creation process. You are into the code -this part is the harder and more complex part. You will need a general understanding of C -code to continue. Here are the step by step instructions required to make this work. + 24) SVSNICK: Can the ircd use SVSNICK to change someones nick? Otherwise, + KILL is used. Use 1 for yes, 0 for no. -Open the .h file and find the section of code with + 25) VHOST: Can a user's host be changd on the fly? Enabling this allow + HostServ online. Use 1 for yes, 0 for no. -#define PROTECT_SET_MODE "+" -#define PROTECT_UNSET_MODE "-" -#define CS_CMD_PROTECT "PROTECT" -#define CS_CMD_DEPROTECT "DEPROTECT" -#define FANT_PROTECT_ADD "!protect" -#define FANT_PROTECT_DEL "!deprotect" -#define LEVEL_PROTECT_WORD "AUTOPROTECT" -#define LEVELINFO_PROTECT_WORD "PROTECT" -#define LEVELINFO_PROTECTME_WORD "PROTECTME" + 26) OWNER: Has a channel umode for being the channel owner. For example, + UnrealIRCd has mode +q. Use 1 for yes, 0 for no. -If the ircd supports a protective/admin (not owner) mode, set the PROTECT_SET_MODE and -PROTECT_UNSET_MODE to be that mode. On most ircd its the mode of "a" so you setting it -to "+a" and "-a". The next to are based more on what this mode is called, when you -message ChanServ to get this mode, this is the command you will be using. Following -that comes the fantasy commands which can be used in channel to get these modes. The next -three relate to the ACCESS LEVEL list system, again these are the words to gain these -levels in the ACCESS LEVEL system. If your ircd does not have these functions, leave -them at what ever value is currently set, the core code will handle ignore the request -of the user. + 27) OWNER MODE SET: What mode to set to make someone the owner. If the + IRCd doesn't support owners, set this to NULL. -Now that this is set, you can define the MODES, all user modes are stored with UMODE_ -followed by a letter matching the modes case, be careful to use the correct case as this -will make it clear when you setup MODES in the .c in a few. Use hex values for the modes -so starting at 0x00000001 to 0x8000000, in most cases you want to list all modes. If you -run out of values look at removing any modes that do not impact services. + 28) OWNER MODE UNSET: What mode to unset to take away someone's channel + owner status. If the IRCd doesn't support owners, + set this to NULL. -Channel modes are done much like user modes, with the exception that, bans, exceptions, -invites, and modes that are applied to a user such as op, voice are not defined here. All -other modes are defined in here. Again be clear and use the correct case and use hex values -as done with user modes. + 29) Mode on Nick Register: What mode to give users when they register + with NickServ. If your ircd doesn't set expect + a mode to be set on registration, you should + set this to NULL. -Finally we come to DEFAULT_MLOCK, this is the mode that services will set by default on channels -when they are registered. In general you want this to be whats acceptable by the ircd, in most -cause this is "+nt" + 30) Mode on Nick Unregister: What mode to set give users when they cancel + their registration with NickServ. If your + IRCd doesn't set a mode for registered users + you should set this to NULL. -============================================================================================= + 31) Mode on Nick Change: What mode to give users when they change their + nick. If your ircd doesn't set a mode, you + should set this to NULL. -3. The Code + 32) SGLINE: Does the IRCd support realname (geocs) bans? Use 1 for yes, + 0 for no. - Here is where the code of the .c file comes in. be prepared to spend at least an hour if -not longer going over the code and getting it right especially if you are setting up an ircd -that is completely different then that which your adding support for. This section goes over -the majority of the code that is in use. + 33) SQLINE: Does the IRCd support nick bans? Use 1 for yes, 0 for no. - First bit of code you will face is + 34) SZLINE: Does the IRCd support SZLINES? Use 1 for yes, 0 for no. -const char version_protocol[] = "Ratbox IRCD"; + 35) HALFOP: Is channelmode +h for halfop supported by the IRCd? Use 1 for + yes, 0 for no. - This the protocol name which will appear in various places especially when you do -version -at the command prompt, this 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 + 36) Number of Server Args: When an IRCd connects, this is the number of + parameters that are passed. - Once you have decided on this little piece of code, you will come to flood mode characters -being used for setting and removing. If your IRCD does not support flood modes, you can just -use "", we will be setting if your IRCD supports flooding in a little bit. + 37) Join to Set: Services must join a channel to set any modes on that + channel. Use 1 for yes, 0 for no. -const char flood_mode_char_set[] = "+f"; -const char flood_mode_char_remove[] = "-f"; + 38) 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. - 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 your not sure refer to your IRCD's documentation on how MODE is sent + 39) Exceptions: Support for channel exceptions (mode +e). Use 1 for yes, + 0 for no. -int UseTSMODE = 0; + 40) TS Topic Forward: Some IRCd's (like UnrealIRCd) like their topic TS + set forward by +1. Use 1 for yes, 0 for no. - Now you come to the part where you setup your ircd, there are two struct which hold this -information. This allows you to quickly setup your specific ircd. + 41) 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. -IRCDVar ircd[] = { } + 42) Protected Umode: UMODE_ define that defines the protected usermod. + Use 0 for no support, or enter the UMODE_ define. -This contains your basic ircd functions, here is a brief description of the -usage of each. + 43) Admin: Support for channel admins (Mainly used by UltimateIRCd). Use + 1 for yes, 0 for no. -1. Name : this member tells Anope about the ircds name, it may contain text about its - name and version. This is used to identify the build on startup. + 44) SQline Channels: The IRCd's supports banning channel names via + SQLINES. Use 1 for yes, 0 for no. -2. NickServ Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 45) 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. -3. ChanServ Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 46) SVSMODE -b: We can use SVSMODE to unban hosts from a channel. Use + 1 for yes, 0 for no. -4. MemoServ Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 47) Protect: Support for channel protect (mode +a, mainly being used by + UnrealIRCd and ViagraIRCd). Use 1 for yes, 0 for no. -5. HostServ Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. - note if your ircd does not support hostserv, - you can make this NULL or +, as there is a check used before bringing hostserv online + 48) Reverse: We can do a reverse check when unbanning. For use with + DreamForge based IRCd's. Use 1 for yes, 0 for no. -6. OperServ Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 49) Register Channels: Supports sending a channelmode for registered + channels. Use 1 for yes, 0 for no. -7. BotServ Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 50) Registered Mode: Channelmode to set on registered channels, see the + option above. Use 1 for yes, 0 for no. -8. HelpServ Mode : this is the user mode set by Anope, normally you want this to be a - some form of helper flag, or service flag. + 51) vIdent: Support for including a user's ident in their vHost. Use + 1 for yes, 0 for no. -9. Dev/Null Mode : this is the user mode set by Anope, normally you want this to be a - some form of user flag, or service flag. + 52) SVSHOLD: Support for temporarely 'holding' a nick, instead of using + a nick enforcer client. Use 1 for yes, 0 for no. -10. Global Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 53) TS on MODE: We need to send a timestamp when modes are being changed. + Use 1 for yes, 0 for no. -11. NickServ Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 54) 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. -12. ChanServ Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 55) Umode: We can use OperServ to change a user's mode. Use 1 for yes, + 0 for no. -13. MemoServ Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 56) O:LINE: We can use OperServ to give some user a temporary O:LINE. + Use 1 for yes, 0 for no. -14. HostServ Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. - note if your ircd does not support hostserv, - you can make this NULL or +, as there is a check used before bringing hostserv online + 57) Vhost On Nick: On NICK the IRCd sends the VHOST. Use 1 for yes, + 0 for no. -15. OperServ Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 58) Change Realname: Change real name. Use 1 for yes, 0 for no. -16. BotServ Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 59) Extra Help: If the IRCd has more help for functions in ChanServ than + the default help, you should put the language string + identifier here. Use 0 for no extra help. -17. HelpServ Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of helper flag, or service flag. + 60) No Knock: CMODE_ that defines NO KNOCK. Use 0 for no support. -18. Dev/Null Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of user flag, or service flag. + 61) Admin Only: CMODE_ that defines Admin Only. Use 0 for no support. -19. Global Alias Mode : this is the user mode set by Anope, normally you want this to be a - some form of oper flag, or service flag. + 62) Default MLock: Default channelmodes for MLOCK. Use 0 for no modes. -20. BotServ's Bots Mode : this is the user mode set by Anope, normally you want this to be a - some form of service flag, you can use + for no mode at all + 63) Vhost Umode: UMODE_ that indicates if the user currently has a vHost. + Use 0 for no support. -20. Max Channel Mode Symbols : this is the total number of possible, channel modes that can - appears before a nick. Remember to count each possible mode, so +ov is 2 + 64) Flood Mode: The IRCd has a channelmode for blocking floods. Use 1 for + yes, 0 for no. -21. Modes to Remove : this is every mode that Anope should remove when stripping channel modes + 65) Link Mode: The IRCd has a channelmode for linking a channel to some + other channel. Use 1 for yes, 0 for no. -22. Mode used by BotServ bots : When a BotServ bot joins a channel, this is the mode set on them - normally you want them to protected and oped (+o) + 66) CMode F: CMODE_ that defines flood mode. Use 0 for no support. -23. SVSNICK : can the ircd use svsnick to change someones nick, otherwise kill is used, 1 = yes - 0 = no + 67) CMode L: CMODE_ that defines link mode. Use 0 for no support. -24. VHOST : can change a users host on the fly - enabling this will allow hostserv online, 1 = yes - 0 = no + 68) Check Nick ID: "on check change check if they should remain + identified" (needs a better description) + Use 1 for yes, 0 for no. -25. OWNER : has a channel umode for owning the channel, example Unreal has +q, 1 = yes - 0 = no + 69) No Knock Requires +i: Does the No Knock channel mode require invite + only channels? Use 1 for yes, 0 for no. -26. OWNER MODE SET : what mode to set to make someone the owner, if the ircd doesn't support owners, set - this to NULL + 70) Chan Modes: If sent in CAPAB/PROTOCOL, we store it in here. This is + NULL by default. -27. OWNER MODE UNSET : what mode to unset to take away someone as owner, if the ircd doesn't support - owners, set this to NULL + 71) Tokens: Can we use tokens to talk to the IRCd? Use 1 for yes, + 0 for no. -28. Mode on Nick Register : what mode to set on NickServ registration if your ircd doesn't set a mode, set - this to NULL + 72) Token Case Senstive: Are the IRCd's TOKENS/COMMANDS case senstive? + Use 1 for yes, 0 for no. -29. Mode on Nick Unregister : what mode to set on NickServ unregistration if your ircd doesn't set a mode, set - this to NULL + 73) base64 SJOIN TS: Are the timestamps sent with a SJOIN in base64? Use + 1 for yes, 0 for no. -30. Mode on Nick Change : what mode to set on nick change if your ircd doesn't set a mode, set - this to NULL + 74) Supports +I: Does the IRCd support channelmode +I? Use 1 for yes, + 0 for no. -31. SGLINE : realname (geocs) bans, 1 = yes 0 = no + 75) SJOIN Ban Char: Character used to identify bans. Use ''. -32. SQLINE : nick bans, 1 = yes 0 = no + 76) SJOIN Except Char: Character used to identify exceptions. use ''. -33. SZLINE : szline bans, 1 = yes 0 = no + 77) SVSMODE UCMODE: Can we clear user channel modes with SVSMODE? Use + 1 for yes, 0 for no. -34. HALFOP : channel mode +h, 1 = yes 0 = no + 78) SGline Enforce: Does the IRCd enfore SGLINES for us or do we need to + do so? Use 1 for yes, 0 for no. -35. Number of Server Args : when an ircd connects this is the number of parameters that are passed + 79) Vhost Character: The character used to represent the vHost mode, if + this is supported by the IRCd. -36. Join to Set : services must join the channel to set modes, 1 = yes 0 = no + 80) TS6: Does the IRCd support TS6? Use 1 for yes, 0 for no. -37. Join to Message : services must join the channel to send messages (can not override +n), 1 = yes 0 = no + 81) UMode +h: Does the IRCd support usermode +h for helpers? + Use 1 for yes, 0 for no. -38. Exceptions : channel mode +e, 1 = yes 0 = no + 82) P10: Is this IRCd a P10-style IRCd? Use 1 for yes, 0 for no. -39. Time Stamp on topics Forward : Unreal ircds like their topic ts set forward by +1, 1 = yes 0 = no + So we've had this long list. Now there's a second struct to fill. This + struct isn't as long as the previous one though, so we'll handle it quite + quick compared to the previous one. -40. Time Stamp on topics backwards : old dreamforge likes their topics with a ts that is set back by -1, 1 = yes 0 = no + IRCDCAPAB ircdcap[] = { } -41. Protected Umode : UMODE_ that defines the protected Umode, 0 = no, or the UMODE_ + This struct is based oN the CAPAB defines. You should review the CAPAB + table below to see how this should be done. -42. Admin : channel admin (Ultimate ircds), 1 = yes 0 = no + Define Table + -------------------------------------------------------------------------- + Define | Value | Token | Description + ----------------|------------|-----------|-------------------------------- + CAPAB_NOQUIT | 0x00000001 | NOQUIT | NOQUIT protocol support + CAPAB_TSMODE | 0x00000002 | TS | Chanmodes are timestamped + CAPAB_UNCONNECT | 0x00000004 | UNCONNECT | UNCONNECT protocol support + CAPAB_NICKIP | 0x00000008 | NICKIP | IP sent in the NICK line + CAPAB_NSJOIN | 0x00000010 | SSJOIN | Smart SJOIN support + CAPAB_ZIP | 0x00000020 | ZIP | Support for gzipped links + CAPAB_BURST | 0x00000040 | BURST | Supports BURST command + CAPAB_TS3 | 0x00000080 | TS3 | Support for TS3 protocol + CAPAB_TS5 | 0x00000100 | TS5 | Support for TS5 protocol + CAPAB_DKEY | 0x00000200 | DKEY | DH-Key exchange using DKEY + CAPAB_DOZIP | 0x00000400 | ZIP | Link traffic will be gzipped + CAPAB_DODKEY | 0x00000800 | DKEY | Do DKEY with this link + CAPAB_QS | 0x00001000 | QS | Supports quit storm removal + CAPAB_SCS | 0x00002000 | SCS | String Cache System support + CAPAB_PT4 | 0x00004000 | PT4 | Support for PT4 protocol + CAPAB_UID | 0x00008000 | UID | Support for UIDs + CAPAB_KNOCK | 0x00010000 | KNOCK | Supports KNOCK + CAPAB_CLIENT | 0x00020000 | CLIENT | Supports CLIENT + CAPAB_IPV6 | 0x00040000 | IPV6 | Support for IPv6 addresses + CAPAB_SSJ5 | 0x00080000 | SSJ5 | Smart Join protocol 5 support + CAPAB_SN2 | 0x00100000 | SN2 | Support for SN2 protocol + CAPAB_VHOST | 0x00200000 | VHOST | Supports VHOST protocol + CAPAB_TOKEN | 0x00400000 | TOKEN | Supports s2s tokens + CAPAB_SSJ3 | 0x00800000 | SSJ3 | Smart Join protocol 3 support + CAPAB_NICK2 | 0x01000000 | NICK2 | Support for extended NICK (v2) + CAPAB_UMODE2 | 0x02000000 | UMODE2 | Supports UMODE2 command + CAPAB_VL | 0x04000000 | VL | VLine information in info field + CAPAB_TLKEXT | 0x08000000 | TLKEXT | Not 8, but 10 params in TKL's -43. SQline Channels : sqline to ban channel names, 1 = yes 0 = no +4) Modes -44. Quit On Kill : when a user is killed a quit message is sent, 1 = yes 0 = no + The next thing you should do is defining the user modes. You will want to + have your .h file handy for this part. -45. SVSMODE -b : can use svsmode to unban addresses, 1 = yes 0 = no + unsigned long umodes[128] = { } -46. Protect : channel protect +a (Unreal/Viagra ircds), 1 = yes 0 = no - -47. Reverse : can do a reverse check when unbanning, dreamforge based ircds, 1 = yes 0 = no - -48. Register Channels : supports setting a channel as registered, 1 = yes 0 = no - -49. Registered Mode : mode to set set when registered CMODE_ , 0 = No - -50. vident : vhost a users ident, 1 = yes 0 = no - -51. svshold : instead of svsnick or kill, we can hold the nick, 1 = yes 0 = no - -52. timestamp on mode : needs to send time stamp when modes are changed, 1 = yes 0 = no - -53. NICKIP : on NICK the users IP address is sent, 1 = yes 0 = no - -54. Umode : can use OperServ to change a users mode, 1 = yes 0 = no - -55. O:line : can use OperServ to give a temp oline, 1 = yes 0 = no - -56. Vhost On Nick : on NICK it sends the VHOST, 1 = yes 0 = no - -57. Change Realname : change real name, 1 = yes 0 = no - -58. Extra Help : if the ircd has more help use the language file value here, 0 = no - -59. No Knock : CMODE_ that defines NO KNOCK, 0 = no - -60. Admin Only : CMODE_ that defines Admin Only, 0 = no - -61. Default Mlock : modes to default the mlock to, 0 = no - -62. Vhost Umode : UMODE_ that defines vhost is enabled, 0 = no - -63. Flood Mode : has flood mode, 1 = yes 0 = no - -64. Link Mode : has linked mode, 1 = yes 0 = no - -65. Cmode F : CMODE_ that defines flood mode, 0 = no - -66. Cmode L : CMODE_ that defines Linked Mode, 0 = no - -67. Check Nick ID : on check change check if they should remain identified, 1 = yes 0 = no - -68. No Knock Requires +i : if No Knock mode requires invite only, 1 = yes 0 = no - -69. Chan Modes : if sent in capab/protoctl we store it in here (NULL by default) - -70. Tokens : if Anope can support the ircd with Tokens, 1 = yes 0 = no - -71. Token Case Senstive : some ircds the TOKENS/COMMANDS are case senstive, 1 = yes 0 = no - -72. SJOIN time stamps are base64 : if they are base64 encoded, 1 = yes 0 = no - -73. Supports +I : Whether the ircd supports +I, 1 = yes 0 = no - -74. SJOIN Ban Char : char used to identify bans, use '' - -75. SJOIN Except Char : char used to identify exceptions, use '' - -76. SVSMODE UCMODE : clear user channel modes with SVSMODE, 1 = yes 0 = no - -77. SGline Enforce : the ircd enforces sglines for us we don't need to, 1 = yes 0 = no - -78. Vhost Character : the character used to represent the vhost mode - -79. TS6 : ircd supports TS6, 1 = yes 0 = no - -80. +h mode support, Helper Op mode supported by the ircd, 1 = yes 0 = no - -81. P10 : ircd is a P10 style of IRCD, 1 = yes 0 = no - -IRCDCAPAB ircdcap[] = { } - -This struct is based of the CAPAB defines, you should review the the CAPAB table -below for how this to be done. - -Define Table -====================================================================================================== -DEFINE WORD | VALUE | TOKEN | IRCD Meaning -====================================================================================================== -CAPAB_NOQUIT | 0x00000001 | NOQUIT | Supports NOQUIT -CAPAB_TSMODE | 0x00000002 | TS | Channel modes are TimeStamped (normal sent during PASS) -CAPAB_UNCONNECT | 0x00000004 | UNCONNECT | Supports UNCONNECT -CAPAB_NICKIP | 0x00000008 | NICKIP | IP in the NICK line -CAPAB_NSJOIN | 0x00000010 | SSJOIN | smart sjoin SSJOIN -CAPAB_ZIP | 0x00000020 | ZIP | server supports gz'd links -CAPAB_BURST | 0x00000040 | BURST | server supports BURST command -CAPAB_TS3 | 0x00000080 | TS3 | Supports the TS3 Protocol -CAPAB_TS5 | 0x00000100 | TS5 | Supports the TS5 Protocol -CAPAB_DKEY | 0x00000200 | DKEY | server supports dh-key exchange using "DKEY" -CAPAB_DOZIP | 0x00000400 | ZIP | output to this link shall be gzipped -CAPAB_DODKEY | 0x00000800 | DKEY | do I do dkey with this link? -CAPAB_QS | 0x00001000 | QS | Can handle quit storm removal -CAPAB_SCS | 0x00002000 | SCS | Supports String Cache System -CAPAB_PT4 | 0x00004000 | PT4 | PT4 Protocol Support -CAPAB_UID | 0x00008000 | UID | Can do UIDs -CAPAB_KNOCK | 0x00010000 | KNOCK | supports KNOCK -CAPAB_CLIENT | 0x00020000 | CLIENT | Supports CLIENT -CAPAB_IPV6 | 0x00040000 | IPV6 | Server is able to handle ipv6 address masks -CAPAB_SSJ5 | 0x00080000 | SSJ5 | Server supports smart join protocol 5 -CAPAB_SN2 | 0x00100000 | SN2 | Supports SN2 protocol (SNICK 2) -CAPAB_VHOST | 0x00200000 | VHOST | Supports VHOST protocol -CAPAB_TOKEN | 0x00400000 | TOKEN | Supports tokenized server<->server commands -CAPAB_SSJ3 | 0x00800000 | SSJ3 | Server supports smart join protocol 3 -CAPAB_NICK2 | 0x01000000 | NICK2 | supports the extended NICK command (version 2) -CAPAB_UMODE2 | 0x02000000 | UMODE2 | support for the UMODE2 command -CAPAB_VL | 0x04000000 | VL | Vline information is included in the info field -CAPAB_TLKEXT | 0x08000000 | TLKEXT | This allows 10 instead of 8 parameters in TKL's - -=================================================================================================== - -4. Modes - - The next part that you come to is the user modes. You will want to have your .h file handy -for this part as you being. - -unsigned long umodes[128] = { } - - This starts from 0 to 127 in the ASCII character set. Insert the user modes at the slot -where the mode fits. If you are adding a the user mode of +i find the 105 character slot in -the array, and place the UMODE_i into this slot. - -=================================================================================================== - -5. FUNCTIONS AND EVENTS - -A brief word about functions and events. All events are captured via the - -void moduleAddIRCDMsgs(void) { - m = createMessage("NICK", anope_event_nick); - addCoreMessage(IRCD,m); -} - -Each event should have a event handler if its important enough to process by services. -All event functions should be formed like so - -int anope_event_capab(char *source, int ac, char **av) -{ - return MOD_CONT; -} - -they will receive the source, this can be NULL at times depending on the event. AC is the -number of arguments that are in the event. and AV holds the values for each, so av[0] is -the first variable. Events are likely to pass to various upper level event handlers, see -the previous ircd source for how they handle these events. - -All commands are formed like so - -void anope_cmd_svsnoop(char *server, int set) -{ - send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-")); -} - -they may take any number of arguments, and come to a send_cmd() this root function is how -commands are sent to the ircd. - - -6. CAPAB/PROTOCTL - -Most IRCD send a CAPAB or PROTOCTL line so that they can work out what each is -capable of doing. Anope has a function to read these lines and set itself up -to to hand these events better. When adding support for your ircd. Take the -following steps - -1. in the ircd.c find the function anope_cmd_capab() this function will send - the CAPAB/PROTOCTL line (consult your ircd documentation for which to send) - then in a single line type in the tokens that anope must send. Here is an - example of Hybrid's capab line - - /* CAPAB */ - void anope_cmd_capab() - { - send_cmd(NULL, "CAPAB TS5 EX IE HOPS HUB AOPS"); - } - -2. in the ircd.h file make sure to place the defines (see below) that match your - ircds tokens, only use the ones that matter to your ircd. Should your ircd add - new features not covered in the defined, please contact the Anope Dev team - before doing so. - -3. Ensure that the CAPAB/PROTOCTL event his handled correctly. - - a. in the function "moduleAddIRCDMsgs" making sure that you have the following - two lines + This array goes from 0 to 127 in the ASCII character set. Insert the user + modes at the slot where the mode fits. If you are adding a the user mode + of +i find the 105th (ASCII code of 'i') character slot in the array, and + place the UMODE_i into this slot. Your base .c file should contain a good + start for this, as well as a little help locating the characters. + +5) 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); + } + + 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) + { + return MOD_CONT; + } + + They will receive the source; this can be NULL at times depending on the + event. Next, ac is the number of arguments that are in the event, and av + holds the values for each; so av[0] is the first variable, av[1] will be + the second one, and so on. Events are likely to pass to various upper + level event handlers; see the previous ircd source for how they handle + these events. + + All commands are formed like this: + + void anope_cmd_svsnoop(char *server, int set) + { + send_cmd(NULL, "SVSNOOP %s %s", server, (set ? "+" : "-")); + } + + They may take any number of arguments, depending on the command. They + should eventually come to a send_cmd(); this root function is how + commands are sent to the IRCd. + +6) 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 + to read these lines and set itself up to to handle these events better. + When adding support for your ircd, take the following steps. + + 1) In the ircd.c find the function anope_cmd_capab(); this function will + send the CAPAB/PROTOCTL line (consult your ircd documentation for + which to send). In a single line type in the tokens that anope must + send. Here is an example of Hybrid's capab line: + + /* CAPAB */ + void anope_cmd_capab() + { + send_cmd(NULL, "CAPAB TS5 EX IE HOPS HUB AOPS"); + } + + 2) In the ircd.h file make sure to place the defines (see below) that + match your IRCd's tokens; only use the ones that matter to your ircd. + Should your IRCd add new features not covered in the defined, please + contact the Anope Dev team before doing so. See README for information + on how to contact the Anope team. + + 3) Ensure that the CAPAB/PROTOCTL event his handled correctly. + + A) In the function "moduleAddIRCDMsgs" making sure that you have the + following two lines: - m = createMessage("CAPAB", anope_event_capab); - addCoreMessage(IRCD,m); - - b. Add the function to handle the event - - int anope_event_capab(char *source, int ac, char **av) - { - capab_parse(ac, av); - return MOD_CONT; - } - - this function + m = createMessage("CAPAB", anope_event_capab); + addCoreMessage(IRCD,m); + B) Add the function to handle the event + int anope_event_capab(char *source, int ac, char **av) + { + capab_parse(ac, av); + return MOD_CONT; + } + This function should call the capab_parse function which parses + the received CAPAB/PROTOCTL line. |