]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Updated documentation
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sat, 14 May 2005 00:17:49 +0000 (00:17 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sat, 14 May 2005 00:17:49 +0000 (00:17 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1375 e03df62e-2008-0410-955e-edbf42e46eb7

docs/ChangeLog
docs/SUPPORTED
docs/server_tokens.txt

index 53be4472676bbe61b4df07b3d8b6abbc813b0341..708f18a9db567ab80c8f5db1d1f3d384b5b246ed 100644 (file)
@@ -1,3 +1,187 @@
+1.0 Beta 4
+
+    * Fixed configure bug resulting in osflags being called BEFORE getcache (Making it redundant.)
+    * Fixed output of src/modules/Makefile saying it was made by Craig.net tongue.gif
+    * Updated for test gcc4 compatibility
+    * Added support back for ./inspircd
+    * Added a line to automatically chmod ./inspircd to 0744 ('Last Second Save!')
+    * configure now supports any future .file.inc includes (Yes, i can see into the future)
+    * Updated makefile
+    * New Perl ./configure
+    * Added -Woverloaded-virtual to catch annoying module typos
+    * Fixed to always look for the ircd.log within the bin/ dir
+    * Fixed to not spool the error log after ./inspircd debug
+    * Sanity checks for fd_ref in addclient
+    * Fixed 'server ignores me forever if i throttle the server with connections' bug
+    * Debugging now allowed from ./inspircd (./inspircd debug)
+    * Added LD_LIBRARY_PATH hacks/kludges to the .inspircd.inc file to make it find libmysql in funny situations
+    * Added final documentation for inspircd Beta 4
+    * Added important note relating to ip addresses in <link:ipaddr>
+    * Added schema for m_sqllog.so
+    * Added m_sqloper, allows storage of opers within a mysql database
+    * Commented new functions
+    * Major *MAJOR* optimizations by double-referencing channels to users (never need to scan the entire user hash again except in very rare circumstances)
+    * Added channel 'counter', increases speed of quits, parts, kicks
+    * commented some users and connections code
+    * added remote @* notice
+    * Added remote versioning
+    * Fixed dicky buffer (due to cleanup the wrong variable was being used)
+    * Services speedups for stupid buffered i/o uplinks
+    * Added server input buffers (for systems that decide buffering is fun)
+    * Major code tidyup (-W)
+    * Fixed some flood checking
+    * added noticeall
+    * Added a Server:: method to send server notices to channels
+    * Added explicit oper tracking in a vector of userrec* pointers, optimizes sending out oper notices
+    * Fixed: +s and +p channels wouldn't be synched correctly
+    * Fixed: +s and +p never show in whois even when you're a member of them
+    * Fixed: +s and +p never show in list even if you're a member of them
+    * Added Server::FindDescriptor
+    * Added and tested fd crossreference table - improves speed a lot, and fixes one of the /STATS chars which has been broken a while
+    * Added OnAddBan and OnDelBan module api calls, and fixed glitch which required them in m_timedbans module
+    * Added OnOperCompare function to override strcmp in password check for /oper
+    * Added module message passing architecture
+    * Added a few anti-flood features
+    * Updated buffering, faster and more sensible (old code sucks)
+    * Added password field
+    * Removed some debug output
+    * Added /stats T
+    * Empty but non-null string passed to is_uline now returns true
+    * Added numeric 318 to /WHOIS when nick is not found (end of whois should still be there as its a list response)
+    * Added numeric 412 "no text to send"
+    * Changed to handle : as a NOP token so that 'assuming' inspircd knows RFC commands wont cause tons of errors
+    * Fix to a mode parsing bug (eating wrong version of parameter?)
+    * fixed warning of redefinition of RUSAGE_SELF
+    * Fix annoying off-by-one error in connection::RecvPacket
+    * Added more fault tolerance to server links
+    * Added new /stats z
+    * Fixes to /who output
+    * Added mode 'compression', stops abuse with modes like: +s-s+s-s+s-s
+    * Test fixes for /version strings not being set in burst
+    * Fixed a reversed strcmp
+    * Added 901 numeric - end of modules list
+    * Added support for /SQUIT <mask> and checks against /SQUIT *
+    * Changed remote kill reason text
+    * Fixed strange leading ":" on remote Z/K/G lines
+    * Fixed so that quitprefixes are shown in client exit notices
+    * Added global oper monitoring through modules and global connect monitoring through modules
+    * Fixed weird issues when anope sends large amounts of text at once to the uplink
+    * Fixed dodgy poll()
+    * Added new and improved GetBuffer function based on research on crappy redhat 7.3
+    * Fixed park crash bug #63 reported by ViaraiX
+    * Reordered some on-connect network stuff to stop services being so confused
+    * Extra safety checks to avoid trying to write() remote users
+    * Optimized WriteCommon and WriteCommonExcept
+    * Fixed weird line wrapping bug with extremely long lines
+    * Made xline notices neater when notifying of unknown connections
+    * Fixed WriteCommon not writing to the source user when not on any channels
+    * Changed "is now running" message to AFTER port bind checks
+    * Added PID reporting and testing before daemonize
+    * Changed startup ascii to green. Elphaba would be so proud tongue.gif
+    * Fix to prevent empty umodes
+    * Fixed empty modes from nickserv
+    * Optimized modes (removed strlens etc)
+    * Fixed empty modes issue that emerged after dodgy code was corrected
+    * Fixed services not being informed of force joins
+    * Fix to prevent quits being sent onto the network for nonexistent users
+    * Added faster wildcard checking routines
+    * Fix for bug #62 (replaces only occur once per line in m_censor)
+    * m_chanfilter now works on gcc 2.95.x again.
+    * m_chanprotect fixed to remove privilages upon kick
+    * Fixed WriteChannelWithServ
+    * Added module which provides MD5 encryption for oper passwords plus /mkpasswd
+    * Added another check for 'NoServerUline' type thing in m_services.
+    * Added Check for 'NoServer' when +r ing a channel in m_services.
+    * Added m_timedbans (timed bans module for channel ops/halfops)
+    * Added m_sql, module to provide sql db access to other modules
+    * Added m_sqlauth - allows authorizing of connections via an arbitary mysql table with a username and password field
+    * Added m_sqllog - allows you to log your irc information to an sql database
+    * Added m_sqloper, allows storage of opers within a mysql database
+
+1.0 Beta 3
+
+Added rm -rf src/modules/*.so to make modclean
+Added module message passing architecture
+added Module::OnMeshToken
+added Server::MeshSendAll
+added Server::MeshSendCommon
+added Server::MeshSendAllAlive
+added Server::MeshSendUnicast
+added Server::MeshSendAllExcept
+added Server::MeshCheckChan
+added Server::MeshCheckCommon
+added Server::FindModule
+added New docs for API
+added Module::OnRawMode
+added Module::OnCheckInvite
+added Module::OnCheckKey
+added Module::OnCheckLimit
+added Module::OnCheckBan
+added Module::OnStats
+added Module::OnChangeLocalUserHost
+added Module::OnChangeLocalUserGECOS
+added Module::OnLocalTopicChange
+Added Server::AddGLine
+Added Server::AddKLine
+Added Server::AddZLine
+Added Server::AddQLine
+Added Server::AddELine
+Added Server::DelGLine
+Added Server::DelKLine
+Added Server::DelZLine
+Added Server::DelQLine
+Added Server::DelELine
+Added Server::Duration
+Fixed /LUSERS server count
+Updated documentation of <connect> tags at request of Strike
+Fixed somebody putting double closing tags, nullifying the effect of allowhalfop in the example conf
+Removed deprecated class 'packet'
+Fixed Dns free() errors
+Added ability for modules to hold users in a 'holding pattern' while they do stuff on connect
+Added OnUserDisconnect method to modules.* to fix fd leak in m_ident.cpp
+Added the m_chanfilter module, implements chanmode +g which allows channel specific badwords (YAY)
+Added Module::OnSendList
+Added m_conn_lusers.so: Sends /LUSERS on connect
+Added m_ident.so: nonblocking ident lookup module
+Fixed /kill bug in m_operlevels (couldnt kill non-opers)
+Changed m_override: Fine-grained control over what can be overridden by whom
+Added m_park, user parking to keep ops during a ping timeout (suggested by Ib3N)
+Fixed limit checking in core and m_redirect.so
+Added m_setidle, allows opers to set their idle times
+Added Module::OnBackgroundTimer method, ticks approximately every 5 seconds
+Yet more optimizations!
+Added 'server already exists' check for u-type links
+Fixed bug when ordering a bot to leave using anope services
+Fixed anope module sending L tokens with 2 instead of 3 params (made code more tolerant instead of changing module)
+Fixed broken server/server handshake for U-type server links (services)
+Fixed strhashcomp to forbid matching scandanvian nicks properly eg. [Brain] and {Brain}
+Fixed lingering (SO_REUSEADDR was being set to 0?)
+Added Module::OnCheckReady and Module::OnUserRegister
+Updated /INFO
+Fixed to allow server to server traffic again (DOH)
+Added PID reporting and testing before daemonize
+Changed "is now running" message to AFTER port bind checks
+Fixed strange join behavior reported by w00t (mirc requesting MODE immediately after JOIN)
+Fixed bug #47 reported (and suggested fix) by Om
+Fixed bug where if channel limit was lower than the user count users could still join, but not if it was equal
+Added Module::OnUserKick and Module::OnUserPreKick
+Added Server::PseudoToUser and Server::UserToPseudo
+Made setrlimit a commandline option
+Removed some old uneeded code
+Made cmode and chanmode more safe
+Fixed a double free in dnsqueue.cpp
+Fixed a resolver issue (weird segfault on gentoo?) in server linking
+Double 367 numeric glitch fixed
+Added Server::IsValidHostMask
+Added getrlimit/setrlimit to set process limits to allow a core dump
+Removed some logging from wildcard.cpp
+
+1.0 Beta 2
+
+* Added a lot of small fixes based on feedback of beta 1
+* Fixed compile issues on freebsd due to an icky shellscript expression that failed to detect strlcat
+* Added more advanced m_override.cpp module due to user request (thanks Rob)
+
 1.0 Beta 1
 
 * Enough optimizations to shake a very big stick at
index 60ddc369e8b82d3f473990c82fdd56d8835d0c54..69049f9fade8e7621ce0083075cfab3fad38f5d5 100644 (file)
@@ -1,10 +1,3 @@
-As this release is ALPHA, not everything is supported. Because of this, this
-document will show you the commands and modes that are supported in this
-version. All commands listed below are as listed in request for comments (RFC)
-number 1459, the original IRC documentation. Anything extra to this RFC
-(with the exception of commands for loading plugins etc) will be a loadable
-module and not implemented in the core.
-
 Implimented server to server commands:
 
        SERVER  CONNECT
@@ -32,24 +25,25 @@ Implemented commands:
 
 Module commands (non-rfc):
 
-       MODLIST  CHGHOST
-       GLOBOPS  HELPOP
-       KNOCK    OPERMOTD
-       QUOTE    SAJOIN
-       SAMODE   SANICK
-       SAPART   SAQUIT
-       SETNAME  SETHOST
-
-
+       MODLIST   CHGHOST
+       GLOBOPS   HELPOP
+       KNOCK     OPERMOTD
+       QUOTE     SAJOIN
+       SAMODE    SANICK
+       SAPART    SAQUIT
+       SETNAME   SETHOST
+       PARKSTATS PARK
+       SETIDLE   TBAN
 
 ------------------------------------------------------------------------------
 
 CHANNEL MODES:     i,m,n,t,k,l,p,s,o,h**,v,b
 USER MODES:        i,w,s,o
-MODULE CHAN MODES:  c,G,K,C,V,Q,N,T,O,L,r,R,M,S,Z
+MODULE CHAN MODES:  c,G,K,C,V,Q,N,T,O,L,r,R,M,S,Z,g
 MODULE USER MODES:  B,G,x,g,h,r,R,W,S
 
-NOTE: Module Modes will be documented in the near future.
+       Documentation for all modes and commands may be found on the wiki:
+       http://www.inspircd.org/wiki/
 
 ------------------------------------------------------------------------------
 
@@ -64,7 +58,13 @@ The following features are supported:
 The following operating systems are supported:
 
        * Linux         (i386, possibly others)
-                               Tested on: RedHat, Slackware, Gentoo
+                               Tested on: RedHat, Slackware, Gentoo, SELinux, Debian
        * FreeBSD       (i386, possibly others)
-                               Tested on: 4.10, 4.11, 5.0, 5.2.1
+                               Tested on: 4.10, 4.11, 5.0, 5.2.1, 5.3, 5.4
+
+* FreeBSD users may make use of performance enhancements built into InspIRCd.
+
+
+The following compilers are supported:
 
+       * GCC           (2.95, 2.96, 3.0, 3.1, 3.2, 3.3, 3.4, 4.0)
index 3320602c7e93fd4356ea1c3f8ac6c09dc4504b55..8bebb05798317945363e7d7e73c8e396f086ad3f 100644 (file)
-This is a list of datagram types supported by this version of
-InspIRCd. The datagrams must be encapsulated in a valid link
-packet, and except for those prefixed with a *, a pseudo-session
-must be established along which secure commands may pass.
-
-S *            Active server connect
-s *            Passive server connect (response to S)
-O *            Exchange session key
-E *            Error response
-?              Ping
-!              Pong
-*              No Operation
-Y              Begin netburst
-N              Introduce new client
-n              Client nickchange
-t              Change channel topic
-i              Invite user
-k              Kick user
-J              Join a user to one or more channels
-T              Server topic change
-M              Server mode change
-m              User mode change
-P              PRIVMSG
-V              NOTICE
-L              User leaving a channel
-Q              User disconnect
-F              End netburst
-K              Remote kill
-@              WALLOPS
-a              Change displayed host
-b              Change GECOS
+This is a list of all tokens used by InspIRCd at the time of writing for server to server communication. Module coders may find this information 
+useful when syncronising module data between different servers on the mesh. All tokens are case sensitive. Token names are given, however these are 
+just a way of identifying the token, so if you hear developers talking of the 'CHGNAME token' you can be sure they are talking about the 'a' symbol.
+
+Modules should try to avoid low ascii values. The only illegal token characters are ASCII 0, ASCII 13, and ASCII 10.
+
+--------------------------------------------------------------------------------
+Compatibility Translations
+
+InspIRCd will translate some RFC-style commands into mesh tokens, to maintain compatibility with some services packages. This only occurs if the 
+server is a U-type link (see the tokens below for an explaination). The translated commands are:
+
+    * 433 - Translated to *
+    * 432 - Translated to *
+    * PING - Translated to *
+    * NOTICE - Translated to V
+    * PRIVMSG - Translatd to P
+    * QUIT - Translated to Q
+    * SQUIT - Translated to &
+    * SVSMODE - Translated to m
+    * SVS2MODE - Translated to m
+    * MODE - Translated to m
+    * KICK - Translated to k
+    * KILL - Translated to K
+    * SVSJOIN - Translated to J 
+
+--------------------------------------------------------------------------------
+Mesh Tokens
+--------------------------------------------------------------------------------
+AuthCookie: - Token
+
+Syntax: - <authcookie> <servername> :<serverdesc>
+
+When a server links into the mesh, it passes an Auth Cookie with its link request (in an S token). All other servers on the mesh respond by connecting 
+back to the initiating server and issuing this token with a valid auth cookie. If the auth cookie is valid, the server accepts their mesh link, 
+otherwise it rejects it.
+--------------------------------------------------------------------------------
+Inbound Server: S Token
+
+Syntax: S <servername> <password> <port> :<description>
+
+To initiate a mesh link, a server must connect to the port given in its <connect> tag, and issue this command. The port number is the port number the 
+initiator is listening on for incoming server connections, it must be provided so that other servers in the mesh can link back and issue auth cookies. 
+This is known as an 'active' connect, e.g. the initiator always uses the uppercase S token.
+--------------------------------------------------------------------------------
+Set version reply: v Token
+
+Syntax: v <servername> <arbitary version string>
+
+This token indicates the version string of a server on the mesh. Rather than send it each time it is requested, inspircd simply updates the mesh with 
+its details either on bursting or if/when the data changes.
+--------------------------------------------------------------------------------
+Outbound Server: s Token
+
+Syntax: s <servername> <password> <port> :<description>
+
+Upon receiving a valid S token, if the password and servername are accepted, the receiving server replies with this token. It is a different token to 
+S to avoid loops, and diffrentiate between initiator and receiver in the linking process. Once the initiator accepts the s token, the link is 
+established and the burst begins.
+--------------------------------------------------------------------------------
+Non-Mesh Server: U Token
+
+Syntax: U <servername> <password> :<description>
+
+The U token is similar to the S token in that it initiates a server to server link, but it is designed primarily to link systems which are not able to 
+become a fully meshed node, for example IRC Services packages. Upon a successful "U type" (as this is known) authentication, the other servers are 
+informed of the introduction of the server via means of a H token, but will never connect back to it, they will route all messages via its uplink 
+(messier than meshing it, but if the application is physically incapapable of joining the mesh, this is what must be done).
+--------------------------------------------------------------------------------
+Error: E Token
+
+Syntax: E :<error message>
+
+The E token indicates a protocol error, or invalid credentials etc, and immediately after an E token the connection is dropped. Failure to 
+authenticate during a link is usually the cause of such tokens being sent.
+--------------------------------------------------------------------------------
+Begin Netburst: Y Token
+
+Syntax: Y <time>
+
+The Y token indicates the start of the netburst. The time value is used simply to correctly calculate the length of the burst (a similar token is sent 
+at the end of the netburst which also contains a time, allowing the delta to match up correctly without clock syncronization)
+--------------------------------------------------------------------------------
+Set Auth Cookie: ~ Token
+
+Syntax: ~ <new auth cookie>
+
+The ~ token adds a new auth cookie to the servers allowed list. A server may permit multiple auth cookies at any one time to cope with resyncs.
+--------------------------------------------------------------------------------
+Begin Mesh: + Token
+
+Syntax: + <servername> <portnumber> <authcookie>
+
+When a server successfully initiates a connection, it sends this token out to all servers it already has in its mesh, which inform all the servers to 
+connect back upon the servername given, on the port provided, using the given auth cookie. When this occurs all servers will send the "-" token to it 
+upon connection.
+--------------------------------------------------------------------------------
+Send Routing Table: $ Token
+
+Syntax: $ <source server> <reachable server> [<reachable server>...]
+
+The $ token is a means of transmitting routing tables around the mesh. A server sends a list of servers it can reach directly. These tables are 
+updated periodically. If a server cannot be reached directly, the ircd will scan the routing tables it has looking for an ircd which can reach it 
+directly, and inform that server to route the message for it.
+--------------------------------------------------------------------------------
+SQUIT: & Token
+
+Syntax: & <servername>
+
+The & symbol is sent by a server when it leaves the mesh, or by servers which detect that other servers are completely unroutable. Upon receipt of an 
+& symbol, the local server will instantly and recursively (according to its routing table) remove all users along that route.
+--------------------------------------------------------------------------------
+Reroute: R Token
+
+Syntax: R <target-server> <anything>
+
+This is the R or 'reroute' token, which indicates the <anything> provided should be instantly routed to <target-server> and only to <target-server> 
+without processing it any further. Usually the server will receive these if it is the only available and direct route to <target-server>.
+--------------------------------------------------------------------------------
+PONG: ? Token
+
+Syntax: ?
+
+This token is used as a PONG, and has no parameters or responses. Only locally connected servers send pings (! token) to their peers, so no source is 
+required.
+--------------------------------------------------------------------------------
+NOP: * or : Token
+
+Syntax: *|:
+
+This token is a NOP (No-Operation) message.
+--------------------------------------------------------------------------------
+USER: N Token
+
+Syntax: N <time> <nick> <host> <displayed-host> <ident> <modes> <ipaddress> <server> :<GECOS>
+
+This token introduces a new user into the network. The server specified by <server> is responsible for all local checking of that user's actions, such 
+as channel joins, PINGs, QUITs etc. The <time> value is a unix epoch time, and the <ipaddress> field is the user's ip address in dotted decimal 
+(1.2.3.4) form.
+--------------------------------------------------------------------------------
+CHGNAME: a Token
+
+Syntax: a <nick> :<GECOS>
+
+Change realname (GECOS) of a connected user.
+--------------------------------------------------------------------------------
+CHGHOST: b Token
+
+Syntax: b <nick> :<displayed-host>
+
+Change the displayed hostname of a connected user (vhost) to the one provided. No checking of this value is done, it is up to the local server to 
+check this value before sending it out onto the mesh.
+--------------------------------------------------------------------------------
+TOPIC: t Token
+
+Syntax: t <nick> <channel> :<topic>
+
+This token indicates a user set or changed a channel topic. This token should not be used in netjoins, the T token (with a timestamp) should be used 
+instead to check which topic 'wins'.
+--------------------------------------------------------------------------------
+INVITE: i Token
+
+Syntax: i <nick> <source> <channel>
+
+Invite a user to a channel. The user specified by <nick> is invited to channel <channel> by <source>.
+--------------------------------------------------------------------------------
+KICK: k Token
+
+Syntax: k <source> <dest> <channel> :<reason>
+
+This token indicates a user was kicked from a channel.
+--------------------------------------------------------------------------------
+NICK: n Token
+
+Syntax: n <old nick> <new nick>
+
+Indicates a nickchange.
+--------------------------------------------------------------------------------
+JOIN: J Token
+
+Syntax: J <nick> [permissions]<channel> [[permissions]<channel>...]
+
+This token indicates that a user is joining one or more channels, and indicates their privilages upon said channel. For example: "J MrFoo @#bar +#qux 
+#baz".
+--------------------------------------------------------------------------------
+SERVERTOPIC: T Token
+
+Syntax: T <settime> <nick> <channel> :<topic>
+
+This token indicates the server set or changed a channel topic. This token should be used in netjoins to check which topic 'wins'.
+--------------------------------------------------------------------------------
+SERVERMODE: M Token
+
+Syntax: M <target> <modes> [mode-parameters]
+
+This token sets channel or user modes (depending upon the target given). The server sets the modes with this token as opposed to the 'm' token (lower 
+case 'm') in which a user sets the modes.
+--------------------------------------------------------------------------------
+MODE: m Token
+
+Syntax: m <source> <target> <modes> [mode-parameters]
+
+This token sets channel or user modes (depending upon the target given). The user given as <source> sets the modes with this token. You cannot specify 
+<source> as a server, for this you must use the M token instead.
+--------------------------------------------------------------------------------
+PRIVMSG: P Token
+
+Syntax: P <source> <target> :<text>
+
+The P token indicates a PRIVMSG between a user and a channel or other user. Target may be either a channel, or a user, source may only be a user.
+--------------------------------------------------------------------------------
+NOTICE: V Token
+
+Syntax: V <source> <target> :<text>
+
+The V token indicates a NOTICE between a user and a channel or other user. Target may be either a channel, or a user, source may only be a user.
+
+As of 1.0 Beta 4, there are two special cases for the V token, in which the target may be one of:
+
+    * "*" - Specify a target of * to send the notice to all users upon that server.
+    * "@*" - Specify this target to send to all opers upon that server and place the nickname of the originator within the body of the notice. 
+
+--------------------------------------------------------------------------------
+PART: L Token
+
+Syntax: L <nick> <channel> :<reason>
+
+This token indicates a user is leaving a channel with the given reason. The reason field is not optional, if there is no reason the field is just a 
+colon (":").
+--------------------------------------------------------------------------------
+QUIT: Q Token
+
+Syntax: Q <nick> :<reason>
+
+The Q token indicates a user is quitting. The reason given is not optional, if none is specified the field contains just a colon symbol (":").
+--------------------------------------------------------------------------------
+Non-Mesh-Add: H Token
+
+Syntax: H <servername>
+
+Adds a U-Type server to the map without any other information. This is used to maintain links to services.
+--------------------------------------------------------------------------------
+KILL: K Token
+
+Syntax: K <source> <nick> :<reason>
+
+This token is the KILL token, which indicates a user is to be KILLed. Its use generates a QUIT token from the local server. Source may only be a user, 
+not a server, as server kills are always handled locally.
+--------------------------------------------------------------------------------
+WALLOPS: @ Token
+
+Syntax: @ <source> :<text>
+
+This token sends a global WALLOPS. Source may only be a user, not a server.
+--------------------------------------------------------------------------------
+GLINE: # Token
+
+Syntax: # <mask> <who-set-it> <time-set> <duration> :<reason>
+
+Adds a permenant or timed G-Line to all servers on the mesh. The mask contains both the ident and hostname in ident@host form. <who-set-it> is 
+arbitary text, and can be a user or a server.
+--------------------------------------------------------------------------------
+UNGLINE: . Token
+
+Syntax: . <mask> <who>
+
+Removes a G-Line from all servers on the mesh.
+--------------------------------------------------------------------------------
+QLINE: { Token
+
+Syntax: { <mask> <who-set-it> <time-set> <duration> :<reason>
+
+Adds a permenant or timed Q-Line to all servers on the mesh. The mask contains a nickname pattern. <who-set-it> is arbitary text, and can be a user or 
+a server.
+--------------------------------------------------------------------------------
+UNQLINE: [ Token
+
+Syntax: [ <nickmask> <who>
+
+Removes a Q-Line from all servers on the mesh.
+--------------------------------------------------------------------------------
+ZLINE: } Token
+
+Syntax: } <mask> <who-set-it> <time-set> <duration> :<reason>
+
+Adds a permenant or timed Z-Line to all servers on the mesh. The mask contains an ip address mask. <who-set-it> is arbitary text, and can be a user or 
+a server. If duration is 0, the ban is permenant.
+--------------------------------------------------------------------------------
+UNZLINE: ] Token
+
+Syntax: ] <mask> <who>
+
+Deletes a Z-Line from all servers on the mesh.
+--------------------------------------------------------------------------------
+OPERTYPE: | Token
+
+Syntax: | <nick> <opertype>
+
+Sets the opertype of an oper to the given string. This is done so that all ircds are aware of what the oper types of each oper is globally. 
+Configuration of oper types and classes should match network wide.
+--------------------------------------------------------------------------------
+End-Netburst: F Token
+
+Syntax: F <time>
+
+This token indicates the end of the netburst, for more information see the 'Y' token.
+--------------------------------------------------------------------------------
+SERVICE1: / Token
+
+Syntax: / <nickserv nick>
+
+This token is used to indicate the name of a nickname service and is reserved for future use.
+--------------------------------------------------------------------------------
+End-Netburst-NM: f Token
+
+Syntax: f <time>
+
+This is identical in syntax and operation to the F token, except its use does not cause mesh links, as in the server is added in a disconnected state 
+to force routing through its uplink. Used by services servers.
+--------------------------------------------------------------------------------
+Begin-Burst: X Token
+
+Syntax: X <time>
+
+This token when sent indicates that the server is ready to receive the other servers (recipient of this token) netburst data.
+--------------------------------------------------------------------------------
+Example Server Conversation
+
+This is an example of a services server linking to an InspIRd server. During the 'conversation' two users connect, one of which is an oper, one of 
+which is a normal user.
+
+>> U services-dev.chatspike.net xxxxxxxx :Developer Services
+>> / NickServ
+>> N 1111691007 OperServ chatspike.net chatspike.net services-dev +oio 0.0.0.0 services-dev.chatspike.net :Operator Server
+>> N 1111691007 Global chatspike.net chatspike.net services-dev +oio 0.0.0.0 services-dev.chatspike.net :Global Noticer
+>> N 1111691007 NickServ chatspike.net chatspike.net services-dev +oo 0.0.0.0 services-dev.chatspike.net :Nickname Server
+>> N 1111691007 ChanServ chatspike.net chatspike.net services-dev +oo 0.0.0.0 services-dev.chatspike.net :Channel Server
+>> N 1111691007 MemoServ chatspike.net chatspike.net services-dev +oo 0.0.0.0 services-dev.chatspike.net :Memo Server
+<< Y 1111691007
+<< X 0
+<< N 1111690997 [Brain] synapse.brainbox.winbot.co.uk netadmin.chatspike.net ~brain +xiwsogh 10.0.0.2 test.chatspike.net :Brain
+>> V NickServ [Brain] :This nickname is registered and protected.  If it is your nickname, type msg NickServ...
+>> V NickServ [Brain] :If you do not change within one minute, I will change your nickname.
+<< | [Brain] NetAdmin
+<< J [Brain] @#chatspike
+<< M #chatspike +nt
+<< H services-dev.chatspike.net
+<< $ test.chatspike.net services-dev.chatspike.net
+<< F 1111691007
+<< $ test.chatspike.net services-dev.chatspike.net
+>> m ChanServ #chatspike +ntrl 99
+<< P [Brain] NickServ :identify xxxxxxxx
+>> m NickServ [Brain] :+r
+>> V NickServ [Brain] :Password accepted -- you are now recognized.
+>> m ChanServ #chatspike +q [Brain]
+<< n [Brain] [Brain
+>> m NickServ [Brain :-r
+<< n [Brain [Brain]
+>> m NickServ [Brain] :+r
+<< P [Brain] NickServ : identify xxxxxxx
+>> m NickServ [Brain] :+r
+>> V NickServ [Brain] :Password accepted -- you are now recognized.
+<< N 1111691073 Om xxxxxx.gotadsl.co.uk ChatSpike-7A15BE0A.gotadsl.co.uk ~om +x 81.6.252.165 test.chatspike.net :Om
+<< b Om ChatSpike-7A15BE0A.gotadsl.co.uk
+<< m Om Om +x
+>> V NickServ Om :This nickname is registered and protected.  If it is your nickname, type...
+<< m Om Om +wsi
+<< J Om #chatspike
+<< P Om NickServ :identify xxxx
+>> V NickServ Om :Password incorrect.
+