$Id: ircd.txt,v 1.6 2006/08/14 14:23:48 cyan Exp $

		** ircd.js : The Synchronet IRCd Service **
		     by: Randy Sommerfeld <cyan@rrx.ca>

1   .... Introduction
2   .... About this document
2.1 .... What this document hopes to accomplish
2.2 .... What this document won't accomplish
2.3 .... Assumptions we make about you
3   .... Installation
3.1 .... Getting the IRCd up and running
3.2 .... Linking to the Synchronet IRC Network (irc.synchro.net)
3.3 .... Using JSexec to run the IRCd
4   .... About the Synchronet IRC Network (irc.synchro.net)
5   .... Technical information
5.1 .... Limits of the Synchronet IRCd
5.2 .... Compliance with RFC's, and established protocols
5.3 .... Compatibility with other IRCd's
6   .... The Future
7   .... Frequently Asked Questions
7.1 .... Installation Questions
7.2 .... Technical Questions

=======- 1.0 -- Introduction -================================================

	The Synchronet IRCd (IRC daemon) service is the newest Synchronet
service written in 100% Javascript.  It's currently the largest (and perhaps
the most complex) service available for Synchronet.  The IRCd service aims to
eventually be a 'communications bridge' of sorts which will allow multiple
BBS's to link their "multinode chat" areas together in a network so that users
may talk to one another from the comfort of their home BBS.  While
accomplishing this goal, the Synchronet IRCd intends to also be a fully-
functional IRC daemon that rivals the bigger, legacy UNIX IRC daemons in terms
of features.  This way, everyone who wishes to chat on a common network will
be able to use the local BBS, or a standard IRC client (if they wish.)

=======- 2.0 -- About this document -=========================================

[2.1] - What this document hopes to accomplish

	First and foremost, this document is intended to be an absolute
reference regarding the Synchronet IRCd.  This document should be the first
place to look if you're having a problem of some kind, regardless of what that
problem may be.  It intends to be an installation guide which will aide you
through setting up your own IRCd.  Or, if you're simply curious about the IRCd
from a theoretical standpoint (it's not every day that you get to see an IRC
daemon as functional as this implemented inside of a scripting language), this
document will do its best to explain certain implementation decisions to you.

[2.2] - What this document won't accomplish

	This document is not a replacement for your brain.  If you're having a
problem of some kind, and it's not covered by this document, PLEASE take a few
hours to think about the problem and solve it.  Use a systematic approach to
the problem; "If I do X, does Y still happen?"  Remember, installation and
maintenance of the Synchronet IRCd isn't life or death, it's a hobby, and like
all good hobbies, you're supposed to learn something from it.  So, take a few
days before you even consider asking for support -- take a deep breath, go jog
around the block, turn off the computer -- and then come back later.  On the
other hand, if you've found a unique or interesting solution to your problem,
and it hasn't been covered here, then by all means tell us about it!

	We don't intend to teach you the basics of IRC here.  While you can
certainly still get the Synchronet IRCd up and running with a minimal amount
of effort and IRC knowledge, your experience will be more enjoyable if you
have at the very least a working knowledge of IRC.  To gauge your knowledge
of IRC, answer the following questions either with a 'true' or 'false':

	* People chat in 'rooms' on IRC.
	* 'IRCop' is short for 'IRC cop', the police officers of IRC.
	* A 'ping' is something submarines use to gauge distance under water.
	* CTCP and DCC stand for Client Tunneling Carrier Protocol and
	  Direct Channel Cutting, respectively.

	If you answered 'true' to any of the above questions, or if you don't
understand some of the terminology used in the questions, then it's best that
you go to http://www.irchelp.org and read through their very helpful documents
about IRC.  This way, you'll gain a better understanding about what IRC really
is, what it's here for, the terminology, and a little history, too.  At the
very least, this is so that when someone asks you to edit your 'M:Line' to
solve or diagnose a problem, you'll at least know what they're talking about.
We don't cover any IRC basics in this document.

	Don't be surprised if you're ignored or simply referred to a URL
without further explanation if you ask for help and refer to an IRC *channel*
as a room, call *IRC operators* 'cops', don't understand why a 10 second 'ping'
time is bad, or not know how to DCC SEND a file (such as your ircd.conf) to be
inspected.  That includes not having your NAT or proxy set correctly to
properly masquerade your IP address on a DCC CTCP.

[2.3] - Assumptions we make about you

	In short, this document assumes that you know:

	* How to use your computer and operating system effectively.
	* The basics of IRC and its terminology.
	* How to use, configure, and make basic modifications to Synchronet.
	* The basics of the Internet (or at least the ability to visualize
	  a routed, distributed network)

=======- 3.0 -- Installation -================================================

[3.1] - Getting the IRCd up and running

	(1) Make sure you are running a modern version of the Synchronet BBS
software.  The Synchronet IRCd is not intended to run on versions 3.10 or
earlier.  While care has been taken to ensure backwards compatibility with
3.10, it should only be run on that version for testing purposes.  Upgrading
may include retrieving the latest version of Synchronet from the Synchronet
CVS (if you're familiar with building from CVS), from the Synchronet web site
(http://www.synchro.net), or elsewhere.  Synchronet 3.11 is the minimum 
required version to run version 1.0 (or higher) of the Synchronet IRCd.

	Older versions of Synchronet also come packaged with older Javascript
libraries.  The Synchronet IRCd makes use of some of the newer Javascript
library features (such as the ability to treat strings as an array of
characters), therefore it's critical to have a modern JS library.  If your
Javascript library is from 2002 or earlier (you can check this in the 'system
information' part of your BBS main menu), then it's too old.  Time to upgrade.

	(2) Check to make sure that all of the components of the Synchronet
IRCd are resting in their correct directories.  While you're at it, check the
file sizes to make sure they're relatively normal (i.e. not 0 bytes long.)
Make sure that all of the files are readable by the user you're intending to
run the IRCd as.  Here's a chart to help:

	File		Synchronet Dir.	Description

	irclib.js	exec		Javascript IRC library functions
	ircd.js		exec		IRCd core
	ircd_channel.js	exec		Channel functions/objects
	ircd_server.js	exec		Functions/objects for servers
	ircd_unreg.js	exec		Handling of unregistered connections
	ircd_user.js	exec		Functions/objects for users
	ircd.conf	ctrl		Primary configuration file
	ircmotd.txt	text		Message users see upon connect

	(3) Edit your relevant services configuration file (in the Synchronet
'ctrl' directory.)  For Synchronet 3.11, this is most likely "services.ini",
however, backwards compatibility has been retained with the old style
"services.cfg" just in case you want to bring yours over from an older version
of Synchronet.  You may run the Synchronet IRCd on any port you wish, however,
standard convention dictates that it be run on port 6667 (which is the
standard port that most IRC clients will try to connect to, first.)  It's
important that the IRCd be defined as a STATIC service (i.e. one that runs in
the background continuously and does not require a connection to start the
service), and that it uses the LOOP option (so that if you wish to restart only
the IRCd, or if it crashes, it comes back up immediately.)

	The combined options for 'services.cfg' represented in hex is '806',
so that a completed services.cfg line should look like this:

;protocol	port	max_clients	options(hex)	command-line
IRC             6667    0               806             ircd.js

	An example IRC section from services.ini looks like this, and should
already be present in services.ini for Synchronet 3.11 and above.  The IRCd is
enabled by default in Synchronet 3.11, so, it's likely that it's already
operating:

[IRC]
Port=6667
Options=STATIC | LOOP
Command=ircd.js

	The 'maximum clients' value used inside of the services configuration
is *ignored* by Synchronet Services since that value is managed by the IRCd
itself.  The maximum number of IRC clients can be changed on a Y:Line in
your ircd.conf, and is set to 100 by default (more on the ircd.conf later.)

	(4) Take a look at your ircd.conf, and familiarize yourself with the
options and terminology.  Although the ircd.conf has been specifically made so
that it works right out of the box, you may wish to tweak some options.  The
configuration file is self-documenting, so you should carefully read about
each of the configuration options.  At the very least, this will familiarize
you with what a 'Z:Line' is, and where a 'K:Line' is, or how to enable
passwords on sensitive IRC commands.  If you intend to link to the Synchronet
IRC Network, pay careful attention to where the C:Line and N:Line pair is
configured.  We'll be dealing with those later.

	If you're already familiar with other IRC daemon configuration files,
the Synchronet ircd.conf has been carefully engineered to be compatible with
the Bahamut ircd.conf.  Thus, if you've already got a working Bahamut
configuration, putting that ircd.conf in place of the stock ircd.conf should
give you an IRCd configured exactly the way it was on Bahamut.  Configuration
files from other IRC daemons have *not* been tested, so your mileage may vary
with those (although the configuration should be very similar.)  Certainly if
you find an ircd.conf from another daemon that works, let us know about it!

	(5) Restart your BBS, or recycle your services so that your new IRC
service is brought online with your BBS.  Watch your BBS console carefully,
as you should see something similar to the following messages:

srvc 0007 IRC SynchronetIRCd-1.1b(1.102) started.
srvc 0007 IRC Reading Config: /sbbs/ctrl/ircd.conf

	You may have to scroll up to see the message.  Any errors should be
self-explanatory (and usually involve not being able to read the configuration
file.)  If you get an error about not being able to bind to a socket, or that
a socket is already in use, then you already have something running on the
port you defined in your services configuration.  Could it be another IRC
server running?  Try disabling any other IRC servers or proxies and restart
the BBS.  If you recently restarted Synchronet with users connected to an
already operating IRCd, then it's likely that some of your sockets are in a
'TIME_WAIT' state.  Wait a minute or two for the condition to clear up, then
try again.  Repeat this process of elimination until your IRCd starts
successfully.

	(6) Test your new IRCd by connecting to it with an IRC client.
At the very least, using 'telnet' to connect to the IRCd port should give you
something similar to the following line:

:rrx.synchro.net NOTICE * :*** SynchronetIRCd-1.1b(1.102) (RoadRunner X) Ready.

	Which is the standard Synchronet IRCd banner, informing you that the
IRCd is accepting new connections correctly.

	At this point, you should have a working, fully-functional IRC server
available for users to use.  You may want to point Synchronet's internal IRC
client to your local IRC server (just 'localhost' or '127.0.0.1'), so that
your BBS users will be able to make use of your new IRCd.  By default, an
O:Line has been added so that anyone connecting either from the BBS itself, or
your internal network will be able to make use of the /OPER command to become
an IRC Operator.  To become an IRC Operator, first /WHOIS yourself to make
sure that your hostname is your local BBS's hostname (i.e. mybbs.synchro.net)
If so, execute '/OPER Sysop <pass>', where <pass> is your local BBS system
password.  If your hostname isn't the local BBS's hostname, go ahead and edit
ircd.conf (in the Synchronet 'ctrl' directory) and add an O:Line for your
hostname as directed by the instructions inside of the configuration file.

[3.2] - Linking to the Synchronet IRC Network (irc.synchro.net)

	Connecting your IRC server to the Synchronet IRC Network has certain
advantages.  The best advantage is that you'll be allowing any users who use
your IRC server (i.e. your BBS users) to also talk to other users on the
network.  Since the network is largely BBS-oriented, there are a wide variety
of channels available for users to join and discuss various topics.
Furthermore, you'll be offering your system to the pool of IRC servers
available for the public to use.  Just like how DOVE-Net is a network of
Synchronet systems that pass message group messages to one another, the
Synchronet IRC Network is a network of Synchronet systems for the purposes of
chatting in realtime.

	In later versions of the IRCd or the network, you'll be able to offer
your BBS's files over IRC, integrate your BBS chat area with IRC, or even
receive alerts about new messages or BBS email while on IRC.

	Linking with the Synchronet IRC Network takes about as much time (if
not less) as it does to establish a DOVE-Net node.  Therefore, the procedures
have been kept very similar.  The Synchronet IRC Network is the only IRC
network in the world that allows you to link without going through a tiresome
application process, or other such bureaucracy.  In fact, no network admin need
be present at all for you to link to the Synchronet IRC network.

	Just as with establishing a DOVE-Net node, the following steps must be
taken to ensure a smooth link to the Synchronet IRC Network:

	(1) Ensure that you have a DOVE-Net node established.  Although you
aren't required to be a member of DOVE-Net to be a member of the Synchronet IRC
Network, you need to at least go through the same automatic registration
process to obtain and configure your QWK-ID.  Instructions about obtaining
your QWK-ID can be found here: http://www.synchro.net/docs/dove-net.txt
Only steps 1 and 2 need be followed, but heed the document's warning:
"Remember the password you used to create this account, you'll need it later."
You do not need to create a new QWK-ID for the IRCd if you already have an
existing one for DOVE-Net.

	(2) Setup the "dyndns.js" module with your appropriate QWK-id
information so that the hostname "mybbs.synchro.net" will point towards your
correct IP address.  This is required so that users who try to reach your IRC
server will be able to resolve the hostname used on the IRC network.  That
way, if anyone wishes to connect to your server/BBS specifically, they'll be
able to use "mybbs.synchro.net" (i.e. if your server happens to be faster,
closer, or offers interesting BBS features.)  The dyndns.js module comes
with Synchronet 3.11.

	To enable the dyndns module, add a timed event inside of SCFG under
"External Programs->Timed Events" to run the command "?dyndns <pass>" every
now and then.  Replace <pass> with your exact QWK password.  Running the
module once per day is usually acceptable, although you may want to run it
more often if your IP address is prone to changing rapidly.

	After the timed event has been configured, force the event to be ran.
This can be done at the BBS itself (by using ";EXEC ?dyndns <pass>" from the
BBS main menu.)  Then, after about 3 or 5 minutes, attempt to ping your new
hostname (qwk-id.synchro.net, where 'qwk-id' is your qwk-id.)  It is very
important that the IP address you're connecting to the Synchronet IRC Network
from and the IP address that your new hostname (in the form of
qwk-id.synchro.net) resolves to are exactly the same, otherwise you won't be
able to link.  This is to prevent anyone from arbitrarily linking their server
to the network by utilizing your qwk-id.

	(3) Edit your ircd.conf and include a C/N line pair for connecting to
'vert.synchro.net'.  These should be commented out in the stock ircd.conf, and
will look like this:

#C:vert.synchro.net:QWK_PASSWORD:*.synchro.net:6667:30
#N:vert.synchro.net:*:*.synchro.net::30

	Remove the '#' from each line, and replace 'QWK_PASSWORD' with the
password you were assigned (or selected) when registering for a QWK-ID.  The
ircd.conf contains a description of what each of the lines (and fields) mean.
It is very important that you leave the asterisks as they are, especially on
the N:Line.  This is because the server you're connecting to may be randomly
assigned, and the server will never echo your QWK password back to you, so it
chooses to echo a '*' back instead.  An asterisk in the N:Line also forbids any
servers from connecting *to* you, which is important, since you'll only be
doing outbound connects with this C/N pair.

	(4) Restart your BBS (or, if you know how to become an IRC operator,
simply use the /REHASH command), and you should see a message similar to the
following in your Synchronet console:

srvc 0008 IRC Routing: Auto-connecting to rrx.synchro.net
srvc 0008 IRC Routing: Connected!  Sending info...
srvc 0008 IRC 0018 Accepted new connection: 154.5.119.21 port 6667
srvc 0008 IRC Routing: Link with rrx.synchro.net established, states: TS

	If you see any messages in regards to "Server not configured" or
"Connection reset by peer", it's highly likely that you've mistyped your QWK
password into the C:Line in your ircd.conf.  Double-check to make sure that
the password is correct, and that you haven't otherwise malformed the C/N line
pair.  In particular, make sure all the asterisks (as per the default) are
where they should be.

	Otherwise, if you have received those messages, then you're connected!
You should be able to join the typical busy Synchronet IRC channels, #bbs and
#synchronet, and be able to chat with people across the network.  You can find
network administrators in #opers if you have any questions or concerns.

[3.3] - Using JSexec to run the IRCd

	There are times where you may wish to run the IRCd service separately
from Synchronet so that whenever your BBS goes up or down, the IRCd isn't
affected.  A special program, included with Synchronet, is called "JSexec" and
is intended for use in this way.  By using JSexec, your IRCd will remain
operational regardless of what your BBS is doing, while still integrating with
all of the regular Synchronet features.  In fact, in most respects, running
the IRCd via JSexec is the preferred method.

	To run your IRCd with JSexec, make sure that you've followed all the
installation instructions above.  In particular, take a look at your M:Line on
your ircd.conf and ensure that the last argument is the port you wish to run
the IRCd on (typically 6667.)  If you're currently running the IRCd through
Synchronet, shutdown your BBS and comment out (or remove) the sections in your
services configuration files (services.ini or services.cfg) so that the
service is not restarted when you bring the BBS back up.

	Just like when you're running the IRCd from within Synchronet, you
need to tell JSexec that the service you're running is to be 'looped,' which
is done with the -l option.  Thus, a typical JSexec execution will look like
this:

	jsexec -l ircd

	The above command is typed from within the Synchronet 'exec' directory.
All console commands and errors are logged to the terminal that JSexec was
started from.  You should see the standard IRCd startup messages, which means
that the IRCd is now operational through JSexec.  Connecting to the IRCd
should now work as per normal.

=======- 4.0 -- About the Synchronet IRC Network (irc.synchro.net) -==========

	The Synchronet IRC Network is currently a small network with a BBS
focus.  Like all new IRC networks, we hope that with the help of other BBS
sysops around the globe, the Synchronet IRC Network will grow to become a
thriving community sporting a wide variety of topics.  Currently, the network
has a very relaxed authoritative structure -- perhaps one of the most relaxed
among all IRC networks.  Even so, certain 'common sense' rules still apply.

	Servers linked to the Synchronet IRC Network are automatically put
into the DNS round-robin for 'irc.synchro.net', which means that you can
expect to see connections from other clients who choose to use that address to
connect to IRC.  You should expect to see your server listed in the round-
robin within about 30 minutes, although it typically takes less.

=======- 5.0 -- Technical Information -=======================================

[5.1] - Limits of the Synchronet IRCd

	Although the Synchronet IRCd Service is written in Javascript, an
interpreted scripting language, it has been written to scale relatively well.
Thanks to the DALnet Bahamut testing team, the IRCd has successfully held
over 1,000 clients without any noticable slowdown.  The old limit of 100 users
has been eliminated since version 1.1 of the IRCd.

	If you notice any slowdown or scaling problems, please let us know.

[5.2] - Compliance with RFC's, and established protocols

	The Synchronet IRCd has always aimed to be compliant with RFC1459, which
was the first published IRC specification.  However, it has chosen to deviate
from the RFC where appropriate.  This might be because of errors inside the
RFC itself (i.e. +p channels being listed as "*" instead of "Prv",) for the
purpose of added functionality (i.e. handling of the PASS message for dynamic
QWK connections,) or for security (not displaying some sensitive STATS output
to users who are not IRC operators.)  Compliance with the newer IRC RFC papers
(inclusive of RFC's 2810 through 2813) is mostly correct, however deviates
wherever Bahamut-specific extensions conflict.

	The DALnet-style Bahamut extensions to the server-to-server protocol
involve improving performance between server links by reducing the amount of
traffic that needs to go across any link.  Furthermore, extra arguments are
added to common commands (NICK, MODE, TOPIC, etc) in order to better establish
the authenticity of the message.  In particular, timestamps ("TS") have been
added to many commands in order to resolve conflicts between messages.
Although the Bahamut extensions are largely undocumented, the author chose to
use these extensions as a base for extending the IRC protocol (as described
in RFC1459) for the purpose of providing modern features.

	The Synchronet IRCd diverges from common IRC practice and Bahamut IRC
protocol in the following fashion:

	* The Synchronet IRCd does NOT make use of the "ident" protocol, which
is popular among larger IRC networks.  This exclusion was decided on because
it provides very little in the way of authoritative information.  Instead, a
user has been considered to be "identified" (by the lack of a tilde in the
username portion of the user "user@host" mask) when they have correctly
identified to a local BBS account.  Identifying to the BBS account is done by
sending a PASS message in the registration stage.  Checks against a local BBS
account are done against the username, and then the nickname respectively.
Thus, any IRC servers not running the Synchronet IRCd MUST NOT accept ident,
as it could seriously compromise a BBS-style authorization structure.

	* The PASS message has been extended to allow for the passing and
checking of QWK passwords in the case of dynamic connections:

		PASS <password> :<qwk-id> QWK

	No destination is specified within the message, as the routing is
handled by static configuration directives (in the form of flags on the N:Line)
which show a single path for the message to take.  This is to ensure that the
password cannot be sent over an arbitrary connection, improving the security
of the message.  The reply to a query looks like this:

		PASS <result> :<qwk-id> QWK <origin>

	Where <result> is "OK" if the password check succeeded, and anything
else (typically "VOID") on failure.  The origin is specified so that the
message may be routed back to the correct server.  Thus, a PASS message without
an origin is a check, and a PASS message with an origin is a reply.

	* Leaf servers are considered to be 'untrusted' servers by default, due
to the highly dynamic nature of a Synchronet-based IRC network.  This is to
prevent bogus messages from being injected into the network, false
representation of authority, or otherwise harmful activity.  Since untrusted
servers are allowed to connect to the network, leaf servers are restricted in
the following way beyond the standard behavior:

	- All timestamps received from a leaf are ignored and are instead
	  replaced by the current time.  Thus, nickname collisions cannot be
	  forced, and TS blasting is prevented.
	- User mode +o (oper) is ignored.  However, local operators still
	  retain authority over their local server.
	- The KILL and SQUIT messages are ignored and reversed if the target
	  is connected to a server beyond the scope of the leaf.
	- Services authorization modes (+z, +r, +q and friends) are ignored.
	- Authenticity of mode change messages (channel ops, voice, bans, etc)
	  are strictly checked and reversed if there's a mismatch.  Mode
	  hacking is thus prevented.
	- All channel modes are bounced on behalf of the leaf by the hub upon
	  a resync.
	- Private/Secret channels are not revealed to the leaf unless a user
	  on the leaf explicitly joins the channel.

[5.3] - Compatibility with other IRCd's

	The Synchronet IRCd has only been tested to be link compatible with:

	* Bahamut 1.4.35, 1.4.36		http://bahamut.dal.net
	* Andy Church's IRC Services 5.0	http://www.ircservices.za.net

	The IRCd should be compatible with any other daemon that supports the
DALnet-style Bahamut extensions.  If you successfully link another IRCd
(including a services package, or other pseudo-server,) then please feel free
to let us know about it in #synchronet.  Patches may be accepted to allow the
IRCd to be link compatible with other protocols at the sole discretion of the
author.

=======- 6.0 -- The Future -==================================================

	Although the original intention of the IRCd was to allow users to
interact between one another from the BBS multi-node chat area, that has yet
to occur.  Eventually, users will be able to talk to one another from various
BBS's and not even be aware that they're using IRC as the transport protocol
for their chat sessions.  For the time being, one can use the Synchronet IRC
client (irc.js) to connect to their local IRC server.

	Further compatibility with the later Bahamut daemons is planned,
including the server-to-server "RESYNCH" command, user-accessible "WATCH", and
"SILENCE."  Also, more umodes will be supported, in addition to the possibility
of gaining some of the Bahamut channel modes (i.e. +c)  Exception modes (+e,
etc) and exception lines (to circumvent K:Lines) may be implemented.

	Some sort of mechanism will be implemented to allow individual BBS's
to share their message and file areas over IRC.  This means that you'll be
able to DCC send/receive files from a BBS, QWK packets, messages, and that
sort of thing.

	I'm sure DigitalMan has a ton of cool ideas, too ;)

=======- 7.0 -- Frequently Asked Questions -==================================

[7.1] - Installation Questions

	Q: After setting up my IRCd, and trying to connect, it gives me an
	   error stating: "You're not authorized to use this server." or
	   "Your host isn't among the privileged." (Numeric 463)

	A: Most likely your Javascript libraries are too old.  Upgrade to
	   Synchronet 3.11, which contains sufficiently modern Javascript
	   libraries.  If you're certain that you're running new libraries,
	   double-check your I:Lines and Y:Lines inside the ircd.conf.
	   Javascript libraries before the year 2003 are considered to be too
	   old; you can check your Javascript library version from the 'system
	   information' portion of your BBS main menu.

	Q: I try to connect and it tells me "Password Incorrect" or "Denied."
	   (Numeric 464)

	A: You've required a password to be passed to the IRC server via
	   the PASS command upon registration.  Check your I:Lines.

	Q: I keep on getting "Error setting up socket for listening" or
	   "Error binding socket to TCP port."

	A: It's highly likely that you already have something running on the
	   port that you've defined the IRCd to use (typically 6667.)  If you
	   have another IRCd running, shut it down or redefine the port that
	   the Synchronet IRCd uses to listen for connections.  If you get
	   this error after having recently shut down Synchronet, one or more
	   sockets may be stuck in 'TIME_WAIT' or similar, in which case you
	   should wait until they expire (as viewable with "netstat".)

	Q: My server keeps on trying to auto-connect to other servers, and I
	   don't want this!  What do I do?

	A: The IRCd will attempt to auto-connect if there's a port defined in
	   the C:Line for that server.  Furthermore, a connect frequency must
	   be defined in a Y:Line for the applicable IRC class for an auto-
	   connect to be attempted.  Remove the port from the C:Line, or turn
	   the auto-connect frequency down to 0 in the Y:Line.

	Q: I installed the IRCd, but where are IRC Services? (ChanServ,
	   NickServ, etc.)

	A: IRC Services are not a part of the Synchronet IRCd.  Instead, we
	   recommend that you make use of an external services package such
	   as Andy Church's IRC Services (http://www.ircservices.za.net)
	   Furthermore, any services package which is compatible with the
	   Bahamut inter-server protocol should work.  There *may* be an IRC
	   services package written in Javascript for Synchronet later.

	Q: I've linked to the Synchronet IRC Network, and now I'm getting all
	   sorts of weird 'Routing' messages.

	A: These messages are sent whenever an 'important' event occurs on the
	   IRC network.  This includes whenever a server links or delinks from
	   the network, which occurs with quite a bit of regularity.  These
	   messages are informational only, and simply indicate that your IRCd
	   (and the network at large) are operating correctly.

	Q: I've successfully installed my IRCd, now how do I become an IRC
	   Operator?

	A: Use the /OPER command, which has a syntax of '/OPER <nick> <pass>'.
	   By default, the Synchronet IRCd configuration file is already pre-
	   configured so that you may OPER to a nickname of 'Sysop' with the
	   BBS system password so long as you're connecting from the BBS
	   machine itself, or a system on your local network.  This means you
	   would execute the command like this: '/OPER Sysop <syspass>'.
	   Also check out the O:Line section in ircd.conf.

	Q: My question isn't answered in this document, where can I go?

	A: First, make sure you've read this document *in its entirety*
	   Second, read section 2.2 again.
	   Third, if you're still having a problem, feel free to join
	   #synchronet on irc.synchro.net, the author typically uses the nick
	   of 'Cyan'  Support is not given via email or otherwise.

[7.2] - Technical Questions

	Q: Why were the Bahamut protocol extensions used instead of EFnet,
	   Undernet, Unreal, or otherwise?

	A: The Bahamut extensions were simply the extensions that the author
	   was most familiar with.  Bahamut is a widely-deployed IRC daemon in
	   use by many networks (DALnet in particular,) so it's had a strong
	   test cycle.  Furthermore, all modern IRC extensions are relatively
	   similar to each other, but differ in name.  For example, Bahamut's
	   SJOIN is similar to EFnet's NJOIN.

	Q: Will you be adding support for <X> protocol, or for <X> IRCd?

	A: Highly unlikely.  However, feel free to add in your own support and
	   send me a diff.  Depending on the scope of the changes, I may choose
	   to include them, or perhaps offer it externally as a patch.  When
	   coding in support for different IRC protocol extensions, try to
	   make use of modularity so that it's possible to link together
	   servers of different protocols, with the IRCd as the bridge.
	   Patches that follow this 'modular' approach are more likely to be
	   accepted.

	Q: Can I make modifications to the IRCd?

	A: By all means, go for it!  If you think that you've made a
	   particularly useful or clever hack, please feel free to send your
	   changes to ircd@rrx.ca (in unified diff format, preferably) along
	   with a description of what you've changed.

	Q: I'm an IRC guru, and I'd like to talk to the author about the IRCd,
	   where do I go?

	A: The author can typically be found in #synchronet as 'Cyan' on
	   irc.synchro.net, and welcomes all discussion about IRC protocol,
	   theory (especially as it relates to IRC3 proposals,) or general
	   banter among long-standing IRC users.

=======- EOF -================================================================
