summaryrefslogtreecommitdiff
path: root/docs/IRCD
diff options
context:
space:
mode:
Diffstat (limited to 'docs/IRCD')
-rw-r--r--docs/IRCD853
1 files changed, 472 insertions, 381 deletions
diff --git a/docs/IRCD b/docs/IRCD
index fa56ce77e..678c1545f 100644
--- a/docs/IRCD
+++ b/docs/IRCD
@@ -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.