summaryrefslogtreecommitdiff
path: root/docs/IRCD
diff options
context:
space:
mode:
authordane dane@31f1291d-b8d6-0310-a050-a5561fc1590b <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2004-08-26 14:26:06 +0000
committerdane dane@31f1291d-b8d6-0310-a050-a5561fc1590b <dane dane@31f1291d-b8d6-0310-a050-a5561fc1590b@5417fbe8-f217-4b02-8779-1006273d7864>2004-08-26 14:26:06 +0000
commit5c3ee8a19acbdc26f191386776207fb7fefb4930 (patch)
tree6c577835b47bcd7a5f7db1f9d7f1fe33b319770d /docs/IRCD
parentb05797bb10efec25579bda27ff4338f0b7803ac2 (diff)
BUILD : 1.7.5 (335) BUGS : 142, 152, 154, 155, 156, 157, 158 NOTES : Applied bugfix bundle patch from Trystan.
git-svn-id: svn://svn.anope.org/anope/trunk@335 31f1291d-b8d6-0310-a050-a5561fc1590b git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@211 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'docs/IRCD')
-rw-r--r--docs/IRCD309
1 files changed, 309 insertions, 0 deletions
diff --git a/docs/IRCD b/docs/IRCD
new file mode 100644
index 000000000..d09d4ce2f
--- /dev/null
+++ b/docs/IRCD
@@ -0,0 +1,309 @@
+HOW TO ADD IRCD SUPPORT
+
+1. Files to edit
+2. Structure
+3. Functions / Events
+4. 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 closely matches the ircd
+ that you are attempting to add support for.
+B. Make a backup copy of services.h
+C. Make a backup copy of Config, and src/Makefile
+
+
+2. STRUCTURE
+To allow for easy code change to support your ircd. There are two structs that
+make up the simplest variables to allow you to quickly change out your ircd
+without much work.
+
+IRCDVar ircd[] = { }
+
+This contains your basic ircd functions, here is a brief description of the
+usage of each.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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
+
+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.
+
+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.
+
+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.
+
+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.
+
+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.
+
+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
+
+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
+
+21. Modes to Remove : this is every mode that Anope should remove when stripping channel modes
+
+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)
+
+23. SVSNICK : can the ircd use svsnick to change someones nick, otherwise kill is used, 1 = yes
+ 0 = no
+
+24. VHOST : can change a users host on the fly - enabling this will allow hostserv online, 1 = yes
+ 0 = no
+
+25. OWNER : has a channel umode for owning the channel, example Unreal has +q, 1 = yes
+ 0 = 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
+
+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
+
+28. Mode on Nick Register : what mode to set on NickServ registration if your ircd doesn't set a mode, set
+ this to NULL
+
+29. Mode on Nick Unregister : what mode to set on NickServ unregistration if your ircd doesn't set a mode, set
+ this to NULL
+
+30. Mode on Nick Change : what mode to set on nick change if your ircd doesn't set a mode, set
+ this to NULL
+
+31. SGLINE : realname (geocs) bans, 1 = yes 0 = no
+
+32. SQLINE : nick bans, 1 = yes 0 = no
+
+33. SZLINE : szline bans, 1 = yes 0 = no
+
+34. HALFOP : channel mode +h, 1 = yes 0 = no
+
+35. Number of Server Args : when an ircd connects this is the number of parameters that are passed
+
+36. Join to Set : services must join the channel to set modes, 1 = yes 0 = no
+
+37. Join to Message : services must join the channel to send messages (can not override +n), 1 = yes 0 = no
+
+38. Exceptions : channel mode +e, 1 = yes 0 = no
+
+39. Time Stamp on topics Forward : Unreal ircds like their topic ts set forward by +1, 1 = yes 0 = no
+
+40. Time Stamp on topics backwards : old dreamforge likes their topics with a ts that is set back by -1, 1 = yes 0 = no
+
+41. Protected Umode : UMODE_ that defines the protected Umode, 0 = no, or the UMODE_
+
+42. Admin : channel admin (Ultimate ircds), 1 = yes 0 = no
+
+43. SQline Channels : sqline to ban channel names, 1 = yes 0 = no
+
+44. Quit On Kill : when a user is killed a quit message is sent, 1 = yes 0 = no
+
+45. SVSMODE -b : can use svsmode to unban addresses, 1 = yes 0 = no
+
+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
+
+
+IRCDCAPAB ircdcap[] = { }
+
+This struct is based of the CAPAB defines, you should review the the CAPAB table
+below for how this to be done.
+
+
+3. 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.
+
+
+4. 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
+
+ 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
+
+
+
+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