/************************************************************************
 *   IRC - Internet Relay Chat, include/config.h
 *   Copyright (C) 1990 Jarkko Oikarinen
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 1, or (at your option)
 *   any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * $Id: config.h,v 1.3 2001/02/02 20:40:00 jpinto Exp $
 */
#ifndef INCLUDED_config_h
#define INCLUDED_config_h
#ifndef INCLUDED_setup_h
#include "setup.h"
#define INCLUDED_setup_h
#endif

/* PLEASE READ SECTION:
 *
 * I have commented out WHOIS_NOTICE and STATS_NOTICE
 * Personally, I feel opers do not need to know the information
 * returned by having those two defines defined, it is an invasion
 * of privacy. The original need/use of showing STATS_NOTICE
 * it seems to me, was to find stats flooders. They no longer
 * can do much damage with stats flooding, so why show it?
 * whois notice is just an invasion of privacy. Who cares?
 * I personally hope you agree with me, and leave these undef'ed
 * but at least you have been warned.
 *
 */

/***************** MAKE SURE THIS IS CORRECT!!!!!!!!! **************/
/* ONLY EDIT "HARD_FDLIMIT_" and "INIT_MAXCLIENTS" */

/* You may also need to hand edit the Makefile to increase
 * the value of FD_SETSIZE 
 */

/* These ultra low values pretty much guarantee the server will
 * come up initially, then you can increase these values to fit your
 * system limits. If you know what you are doing, increase them now
 */

#define HARD_FDLIMIT_   1000
#define INIT_MAXCLIENTS 1000
#define OWN_CRYPT

#if defined(__CYGWIN__)
#undef HARD_FDLIMIT_
#define HARD_FDLIMIT_   25
#undef INIT_MAXCLIENTS
#define INIT_MAXCLIENTS 20
#endif /* __CYGWIN__ */

/*
 * This is how many 'buffer connections' we allow... 
 * Remember, MAX_BUFFER + MAX_CLIENTS can't exceed HARD_FDLIMIT :)
 */
#define MAX_BUFFER      60

/* NICKNAMEHISTORYLENGTH - size of WHOWAS array
 * this defines the length of the nickname history.  each time a user changes
 * nickname or signs off, their old nickname is added to the top of the list.
 * NOTE: this is directly related to the amount of memory ircd will use whilst
 *       resident and running - it hardly ever gets swapped to disk!  Memory
 *       will be preallocated for the entire whowas array when ircd is started.
 *       You will want to crank this down if you are on a small net.
 */
#define NICKNAMEHISTORYLENGTH 10000

/* Don't change this... */
#define HARD_FDLIMIT    (HARD_FDLIMIT_ - 10)
#define MASTER_MAX      (HARD_FDLIMIT - MAX_BUFFER)
/*******************************************************************/

/* DPATH CPATH MPATH KPATH - directoy and files locations
 * Full pathnames and defaults of irc system's support files. Please note that
 * these are only the recommended names and paths. Change as needed.
 * You must define these to something, even if you don't really want them.
 *
 * DPATH = directory,
 * CPATH = conf file,
 * MPATH = MOTD
 * KPATH = kline conf file
 * DLPATH = dline conf file
 *
 * OMOTD = path to MOTD for opers
 * 
 * For /restart to work, SPATH needs to be a full pathname
 * (unless "." is in your exec path). -Rodder
 * Leave KPATH undefined if you want klines in main conf file.
 * HPATH is the opers help file, seen by opers on /quote help.
 * -Dianora
 *
 * DPATH must have a trailing /
 * Do not use ~'s in any of these paths
 *
 */

#define CPATH   "ircd.conf"
#define KPATH   "kline.conf"
#define DLPATH  "kline.conf"
#define MPATH   "ircd.motd"
#define LPATH   "ircd.log"
#define PPATH   "ircd.pid"
#define OPATH   "opers.motd"
#define WPATH   "webchat.motd"


/*
 * CRYPT_AUTH_PASSWORD - I: line passwords need to be crypted with
 * mkpasswd to be valid
 * Credits:  Hwy/larne
 */
#undef CRYPT_AUTH_PASSWORD

/* POST_REGISTER - Reject a client that issues the POST command
 * during registration.  This is often done by HTTP proxies.
 * Credits:  Hwy, backported from -7
 */
#define POST_REGISTER

/* NEG_PORT - Allow a negative port number to be used in a C: line to
 * specify a port number, but disable autoconnect on that C: line
 * Idea from jv's +hemp patch for IRCnet
 *
 * Enabling this option will also hide the "autoconnect is disabled" warnings
 * that will normally be sent every connection frequency minutes
 */
#define NEG_PORT


/* REGLIST - Only +r channels will get listed */
#undef REGLIST

/* HIDE_OPS
 * Define this to prevent non chanops from seeing what ops a channel has
 * NOT ADEQUATELY TESTED YET, DON'T USE ON PRODUCTION NETWORK --Rodder
 */
/* #undef HIDE_OPS */

/* SERVERHIDE
 * Define this to prevent users from seeing what server a user is on.
 * It also hide IP address in STATS commands and various notices, disables
 * TRACE and LTRACE, and prevents hunting by nickname for nonopers.
 * NOT ADEQUATELY TESTED YET, DON'T USE ON PRODUCTION NETWORK --Rodder
 */
/* #undef SERVERHIDE */

/* HIDE_SERVERS_IPS
 * Define this to prevent opers from seeing the IP of a server.
 * This will not show IPs of any server to anyone, to protect hidden
 * hubs from untrustable opers.
 */
#define HIDE_SERVERS_IPS

/* NETWORK_DESC
 * Displayed in place of the server info when SERVERHIDE is enabled
 */
#define NETWORK_DESC "Eris Free Network"

/* SLAVE_SERVERS - Use this to send LOCOPS and KLINES to servers you define
 * uses U: lines in ircd.conf, each server defined in an U: line
 * is sent a copy of the locally placed K-line, and will also
 * accept K-lines from those servers.
 * This is useful for sites with more than one client server.
 */
#undef SLAVE_SERVERS

/* FNAME_USERLOG and FNAME_OPERLOG - logs of local USERS and OPERS
 * Define this filename to maintain a list of persons who log
 * into this server. Logging will stop when the file does not exist.
 * Logging will be disable also if you do not define this.
 * FNAME_USERLOG just logs user connections, FNAME_OPERLOG logs every
 * successful use of /oper.  These are either full paths or files within DPATH.
 *
 * These need to be defined if you want to use SYSLOG logging, too.
 */
#define FNAME_USERLOG "users.log"
#define FNAME_OPERLOG "opers.log" 

/* RFC1035_ANAL
 * Defining this causes ircd to reject hostnames with non-compliant chars.
 * undef'ing it will allow hostnames with _ or / to connect
 */
#define RFC1035_ANAL

/* ALLOW_DOT_IN_IDENT
 * Defining this will allow periods in ident replies.  Use of this is
 * strongly discouraged on public networks
 */
#define ALLOW_DOT_IN_IDENT

/* MAX_MULTI_MESSAGES
 * Maximum number of recipients to a PRIVMSG.  Any more than MAX_MULTI_MESSAGES
 * will not be sent.  If MAX_MULTI_MESSAGES is 1, then any PRIVMSG with a ',' in
 * the target will be rejected
 */
#define MAX_MULTI_MESSAGES 1

/* NO_DUPE_MULTI_MESSAGES
 * Define this to check for duplicate recipients in PRIVMSG, at the expense
 * of noticeable CPU cycles.
 */
#define NO_DUPE_MULTI_MESSAGES

/* WARN_NO_NLINE
 * Define this if you want ops to get noticed about "things" trying to
 * connect as servers that don't have N: lines.  Twits with misconfigured
 * servers can get really annoying with this enabled.
 */
#define WARN_NO_NLINE

/* FAILED_OPER_NOTICE - send a notice to all opers when someone
 * tries to /oper and uses an incorrect password.
 */
#define FAILED_OPER_NOTICE

/* SHOW_FAILED_OPER_ID - if FAILED_OPER_NOTICE is defined, also notify when
 * a client fails to oper because of a identity mismatch (wrong host or nick)
 */
#define SHOW_FAILED_OPER_ID

/* SHOW_FAILED_OPER_PASSWD - if FAILED_OPER_NOTICE is defined, also show the
 * attempted passwd
 */
#undef SHOW_FAILED_OPER_PASSWD

/* CLIENT_SERVER - Don't be so fascist about idle clients ;)
 * changes behaviour of HTM code to make clients lag less.
 */
#define CLIENT_SERVER

/* REALBAN - if REALBAN is defined real hostname will be matched on bans
 */
#define REALBAN

/* BAN_INFO - Shows you who and when someone did a ban
 */
#define BAN_INFO

/* USE_UH - include user@host for BAN_INFO
 * define this if you want to use n!u@h for BAN_INFO
 */
#define USE_UH

/* TOPIC_INFO - Shows you who and when someone set the topic
 */
#define TOPIC_INFO

/* ANTI_NICK_FLOOD - prevents nick flooding
 * define if you want to block local clients from nickflooding
 */
#define ANTI_NICK_FLOOD

/* defaults allow 5 nick changes in 20 seconds */
#define MAX_NICK_TIME 10
#define MAX_NICK_CHANGES 3 

/*
 * Target flood time.
 * Minimum time between target changes.
 * (MAXTARGETS are allowed simultaneously however).
 * Its set to a power of 2 because we divide through it quite a lot.
 */
#define TARGET_DELAY 	128

#define MAXTARGETS      10

/* DO_IDENTD - check identd
 * if you undefine this, ircd will never check identd regardless of
 * @'s in I:lines.  You must still use @'s in your I: lines to get
 * ircd to do ident lookup even if you define this.
 */
#define DO_IDENTD

/* KLINE_WITH_REASON - show comment to client on exit
 * define this if you want users to exit with the kline/dline reason
 * (i.e. instead of "You have been K-lined" they will see the reason
 * and to see the kline/dline reason when they try to connect
 * It's a neat feature except for one thing... If you use a tcm
 * and it shows the nick of the oper doing the kline (as it does by default)
 * Your opers can be hit with retalitation... Or if your opers use
 * scripts that stick an ID into the comment field. etc. It's up to you
 * whether you want to use it or not.
 *
 * I have rewritten a portion of the k-line processing making it faster
 * unfortuantely, using KLINE_WITH_REASON would slow down this
 * processing slightly.. how much I can't say. For very few clients
 * being KLINED very little difference, but you have been forewarned
 *
 */
#define KLINE_WITH_REASON

/*
 * If KLINE_WITH_CONNECTION_CLOSED is defined and KLINE_WITH_REASON
 * above is undefined then the signoff reason will be "Connection
 * closed". This prevents other users seeing the client disconnect
 * from harassing the IRCops.
 * However, the client will still see the real reason upon connect attempts.
 */
#undef KLINE_WITH_CONNECTION_CLOSED

/* STATS_NOTICE - See a notice when a user does a /stats
 *
 * This is left on by default.
 * Members of the development team were split on supporting the
 * default here.
 */
#define STATS_NOTICE

/* WHOIS_NOTICE - Shows a notice to an oper when a user does a
 * /whois on them
 * Why do opers need this at all? Its an invasion of privacy. bah.
 * you don't need this. -Dianora
 */
#define WHOIS_NOTICE

/* WHOIS_WAIT - minimum seconds between remote use of WHOIS before
 * max use count is reset
 */
#define WHOIS_WAIT 1

/* NO_WHOIS_WILDCARDS - disable the use of wildcards in WHOIS.
 * this will probably be permanently enabled in the next release.
 */
#define NO_WHOIS_WILDCARDS

/* PACE_WAIT - minimum seconds between use of MOTD, INFO, HELP, LINKS, TRACE
 * -Dianora
 */
#define PACE_WAIT 0

/* KNOCK_DELAY 5 minutes per each KNOCK should be enough
 */
#define KNOCK_DELAY 300

/* If you are an admin that does not think operwall/wallops
 * should be used instead of a channel, define this.
 */
#define PACE_WALLOPS
#define WALLOPS_WAIT 10 

/* SHORT_MOTD
 * There are client ignoring the FORCE_MOTD MOTD numeric, there is
 * no point forcing MOTD on connecting clients IMO. Give them a short
 * NOTICE telling them they should read the motd, and leave it at that.
 */
#undef SHORT_MOTD

/* NO_OPER_FLOOD - disable flood control for opers
 * define this to remove flood control for opers
 */
#define NO_OPER_FLOOD

/* SHOW_INVISIBLE_LUSERS - show invisible clients in LUSERS
 * As defined this will show the correct invisible count for anyone who does
 * LUSERS on your server. On a large net this doesnt mean much, but on a
 * small net it might be an advantage to undefine it.
 */
#define SHOW_INVISIBLE_LUSERS

/* ZIP_LINKS - Compress server-to-server links
 * Use c: lines in the conf to disable zipped connection.
 *
 * Note that you may have to increase your sendQ size between server
 * if you have problems during particularly heavy bursts
 */
#define ZIP_LINKS

/* NO_DEFAULT_INVISIBLE - clients not +i by default
 * When defined, your users will not automatically be attributed with user
 * mode "i" (i == invisible). Invisibility means people dont showup in
 * WHO or NAMES unless they are on the same channel as you.
 */
#undef  NO_DEFAULT_INVISIBLE

/*
 * The compression level used for zipped links. (Suggested values: 1 to 5)
 * Above 4 will only give a rather marginal increase in compression for a
 * large increase in CPU usage.
 */
#define ZIP_LEVEL       4

/*
 * OPER_UMODES LOCOP_UMODES - set these to be the initial umodes when OPER'ing
 * These can be over-ridden in ircd.conf file, with flags in last O field
 */
#define OPER_UMODES   (FLAGS_OPER|FLAGS_WALLOP|FLAGS_SERVNOTICE)
#define LOCOP_UMODES   (FLAGS_LOCOP|FLAGS_WALLOP|FLAGS_SERVNOTICE)

/* MAXIMUM LINKS - max links for class 0 if no Y: line configured
 *
 * This define is useful for leaf nodes and gateways. It keeps you from
 * connecting to too many places. It works by keeping you from
 * connecting to more than "n" nodes which you have C:blah::blah:6667
 * lines for.
 *
 * Note that any number of nodes can still connect to you. This only
 * limits the number that you actively reach out to connect to.
 *
 * Leaf nodes are nodes which are on the edge of the tree. If you want
 * to have a backup link, then sometimes you end up connected to both
 * your primary and backup, routing traffic between them. To prevent
 * this, #define MAXIMUM_LINKS 1 and set up both primary and
 * secondary with C:blah::blah:6667 lines. THEY SHOULD NOT TRY TO
 * CONNECT TO YOU, YOU SHOULD CONNECT TO THEM.
 *
 * Gateways such as the server which connects Australia to the US can
 * do a similar thing. Put the American nodes you want to connect to
 * in with C:blah::blah:6667 lines, and the Australian nodes with
 * C:blah::blah lines. Have the Americans put you in with C:blah::blah
 * lines. Then you will only connect to one of the Americans.
 *
 * This value is only used if you don't have server classes defined, and
 * a server is in class 0 (the default class if none is set).
 *
 */
#define MAXIMUM_LINKS 1

/* CMDLINE_CONFIG - allow conf-file to be specified on command line
 * NOTE: defining CMDLINE_CONFIG and installing ircd SUID or SGID is a MAJOR
 * security problem - they can use the "-f" option to read any files
 * that the 'new' access lets them.
 */
#define CMDLINE_CONFIG

/* INIT_LOG_LEVEL - what level of information is logged to ircd.log
 * options are:
 *   L_CRIT, L_ERROR, L_WARN, L_NOTICE, L_TRACE, L_INFO, L_DEBUG
 */
#define INIT_LOG_LEVEL L_TRACE

/* USE_LOGFILE - log errors and such to LPATH
 * If you wish to have the server send 'vital' messages about server
 * to a logfile, define USE_LOGFILE.
 */
#define USE_LOGFILE

/* USE_SYSLOG - log errors and such to syslog()
 * If you wish to have the server send 'vital' messages about server
 * through syslog, define USE_SYSLOG. Only system errors and events critical
 * to the server are logged although if this is defined with FNAME_USERLOG,
 * syslog() is used instead of the above file. It is not recommended that
 * this option is used unless you tell the system administrator beforehand
 * and obtain their permission to send messages to the system log files.
 */
#undef USE_SYSLOG

#ifdef  USE_SYSLOG
/* SYSLOG_KILL SYSLOG_SQUIT SYSLOG_CONNECT SYSLOG_USERS SYSLOG_OPER
 * If you use syslog above, you may want to turn some (none) of the
 * spurious log messages for KILL,SQUIT,etc off.
 */
#undef  SYSLOG_KILL     /* log all operator kills to syslog */
#undef  SYSLOG_SQUIT    /* log all remote squits for all servers to syslog */
#undef  SYSLOG_CONNECT  /* log remote connect messages for other all servs */
#undef  SYSLOG_USERS    /* send userlog stuff to syslog */
#undef  SYSLOG_OPER     /* log all users who successfully become an Op */

/* LOG_FACILITY - facility to use for syslog()
 * Define the facility you want to use for syslog().  Ask your
 * sysadmin which one you should use.
 */
#define LOG_FACILITY LOG_LOCAL4

#endif /* USE_SYSLOG */

/* CRYPT_OPER_PASSWORD - use crypted oper passwords in the ircd.conf
 * define this if you want to use crypted passwords for operators in your
 * ircd.conf file.
 */
#define CRYPT_OPER_PASSWORD

/* CRYPT_LINK_PASSWORD - use crypted N-line passwords in the ircd.conf
 * If you want to store encrypted passwords in N-lines for server links,
 * define this.  For a C/N pair in your ircd.conf file, the password
 * need not be the same for both, as long as the opposite end has the
 * right password in the opposite line.
 */
#undef  CRYPT_LINK_PASSWORD

/* IDLE_FROM_MSG - Idle-time reset only from privmsg
 * Idle-time reset only from privmsg, if undefined idle-time
 * is reset from everything except ping/pong.
 * 
 */
#define IDLE_FROM_MSG

/* MAXSENDQLENGTH - Max amount of internal send buffering
 * Max amount of internal send buffering when socket is stuck (bytes)
 */
#define MAXSENDQLENGTH 10000000    /* Recommended value: 7050000 for efnet */

/*  BUFFERPOOL - the maximum size of the total of all sendq's.
 *  Recommended value is 4 times MAXSENDQLENGTH.
 */

#define BUFFERPOOL (MAXSENDQLENGTH * 2)

/* IRC_UID IRC_GID - user and group id ircd should switch to if run as root
 * If you start the server as root but wish to have it run as another user,
 * define IRC_UID to that UID.  This should only be defined if you are running
 * as root and even then perhaps not.
 */
/* #define IRC_UID 1001 */
/* #define IRC_GID 31 */

/* CLIENT_FLOOD - client excess flood threshold
 * this controls the number of bytes the server will allow a client to
 * send to the server without processing before disconnecting the client for
 * flooding it.  Values greater than 8000 make no difference to the server.
 */
#define CLIENT_FLOOD    2560

/* NOISY_HTM - should HTM be noisy by default
 * should be YES or NO
 */
#define NOISY_HTM YES

/*
 * LITTLE_I_LINE support
 * clients with a little i instead of an I in their I line
 * can be chanopped, but cannot chanop anyone else.
 */
#define LITTLE_I_LINES

/* MEW_CMODES - default channel modes to be set on channels locally created
 */
#define NEW_CMODES "+dnt"

/*
 * define either NO_CHANOPS_ON_SPLIT or NO_JOIN_ON_SPLIT 
 *
 * choose =one= only
 */


/* 
 * NO_CHANOPS_ON_SPLIT
 * 
 * When this is defined, users will not be allowed to join channels
 * while the server is split.
 */
#define NO_CHANOPS_ON_SPLIT

/*
 * NO_JOIN_ON_SPLIT
 *
 * When this is defined, users will not be allowed to join channels
 * while the server is split.
 */
#undef PRESERVE_CHANNEL_ON_SPLIT
#undef  NO_JOIN_ON_SPLIT

/*
 * SPLIT_SMALLNET_SIZE defines what constitutes a split from 
 * the net. for a leaf, 2 is fine. If the number of servers seen
 * on the net gets less than 2, a split is deemed to have happened.
 */
#define SPLIT_SMALLNET_SIZE 2

/*
 * SPLIT_SMALLNET_USER_SIZE defines how many global users on the
 * net constitute a "normal" net size. It's used in conjunction
 * with SPLIT_SMALLNET_SIZE to help determine the end of a split.
 * if number of server seen on net > SPLIT_SMALLNET_SIZE &&
 * number of users seen on net > SPLIT_SMALLNET_USER_SIZE start
 * counting down the SERVER_SPLIT_RECOVERY_TIME
 */
#define SPLIT_SMALLNET_USER_SIZE 1000

/*
 * SPLIT_PONG will send a PING to a server after the connect burst.
 * It will stay in "split" mode until it receives a PONG in addition
 * to meeting the other conditions.  This is very useful for true
 * leafs, less useful for "clustered" servers.  If this is enabled,
 * you should be able to crank DEFAULT_SERVER_SPLIT_RECOVERY_TIME
 * down to 1.
 */
#define SPLIT_PONG

/*
 * DEFAULT_SERVER_SPLIT_RECOVERY_TIME - determines how long to delay split
 * status after resyncing
 */
#define DEFAULT_SERVER_SPLIT_RECOVERY_TIME 1

/* LIMIT_UH
 * If this is defined, Y line limit is made against the actual
 * username not the ip. i.e. if you limit the connect frequency line
 * to 1, that allows only 1 username to connect instead of 1 client per ip
 * i.e. you can have 10 clients all with different usernames, but each user
 * can only connect once. Each non-idented client counts as the same user
 * i.e. ~a and ~b result in a count of two.
 *
 */
#undef LIMIT_UH

/* IDLE_CHECK
 * If this is defined, each client is checked for excessive idleness
 * This adds some CPU... you might not want to use this on a large server.
 * However, if defined, and a client is discovered idling more than
 * IDLE_TIME minutes, it is t-klined for 1 minute to discourage
 * reconnects. The idle time is settable via /quote set
 * /quote set idletime
 *
 * -Dianora
 *
 * IDLE_IGNORE will prevent the server from idle'ing clients connected from
 * the listed IP#s.  This should probably be moved into a .conf file entry
 * at some point in the future.
 * It has been. add '<' to I line prefix
 *
 * OPER_IDLE allows operators to remain idle when they idle
 * beyond the idle limit
 */
#undef  IDLE_CHECK
#define IDLE_TIME 60
#define OPER_IDLE

/* SEND_FAKE_KILL_TO_CLIENT - make the client think it's being /KILL'ed
 * 
 * This was originally intended to prevent clients from reconnecting to the
 * server after being dropped for idleness.  It can probably be used for
 * other events too.
 *
 * This really only works if the
 * client was compiled with QUIT_ON_OPERATOR_KILL which was mandatory policy
 * on UMich.Edu hosts.
 */
#define SEND_FAKE_KILL_TO_CLIENT
 
/*
 * Limited Trace - Reports only link and oper traces even when O:line is
 * active.
 *
 * Displays only Oper, Serv, Link, and Class reports even if the O-line is
 * active.  Useful for just showing pertinent info of a specific server. 
 * Note however that if the target server is not running this option then
 * you will still receive a normal trace output. 
 */
#undef LTRACE

/*
 * LWALLOPS - Like wallops but only local.
 *
 * This is actually a compatibility command which really calls m_locops().
 */
#define LWALLOPS

/* If you define this no reverse lookup is made for all connections,
 * as result all users will have the numerical IP on the host field,
 * and you cannot use hostnames on your .conf lines.    - Lamego
 */
#define NOREVERSELOOKUP

/*
 * Define this to reduce dns reverse lookup timeout,
 * less chances the host gets resolved, but connections for unknown hosts will
 * be much faster - Lamego
 */
#define FASTDNS

/*
 * comstud and I have both noted that solaris 2.5 at least, takes a hissy
 * fit if you don't read a fd that becomes ready right away. Unfortunately
 * the dog3 priority code relies upon not having to read a ready fd right away.
 * If you have HTM mode set low as it is normally, the server will
 * eventually grind to a halt.
 * Don't complain if Solaris lags if you don't define this. I warned you.
 *
 * -Dianora
 */

#undef NO_PRIORITY

/*   STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP STOP  */

/* You shouldn't change anything below this line, unless absolutely needed. */

/* INITIAL_DBUFS - how many dbufs to preallocate
 */

#define INITIAL_DBUFS 2000 /* 5 * 1024 ram */

 /* PORTNUM - default port that ircd uses to connect to remote servers, if
  * a port is not specified in the M: line.
  */
#define PORTNUM 6667


/* HLC - Hub Lag Check --pier
 * when defined will disable client connections by setting MAXCLIENTS to 1
 * when the lag to the hub becomes greater or equal to LAGLIMIT
 */
#define HLC

/* HLC settings */
#define HCF 60          /* hub check frequency in seconds */
#define LAGLIMIT HCF*1  /* (1m) lag limit (if more or equal, lagmode=on) */
#define LAGMIN 15       /* if server is in lagmode but actual lag becomes
                           less than LAGMIN, return to normal mode */


/* MAXCONNECTIONS - don't touch - change the HARD_FDLIMIT_ instead
 * Maximum number of network connections your server will allow.  This should
 * never exceed max. number of open file descriptors and wont increase this.
 */
/* change the HARD_FDLIMIT_ instead */
#define MAXCONNECTIONS  HARD_FDLIMIT

/* TIMESEC - Time interval to wait and if no messages have been received,
 * then check for PINGFREQUENCY and CONNECTFREQUENCY 
 */
#define TIMESEC  5              /* Recommended value: 5 */

/* PINGFREQUENCY - ping frequency for idle connections
 * If daemon doesn't receive anything from any of its links within
 * PINGFREQUENCY seconds, then the server will attempt to check for
 * an active link with a PING message. If no reply is received within
 * (PINGFREQUENCY * 2) seconds, then the connection will be closed.
 *
 * This only specifies the default for class 0, only used for lines
 * not specifying a class, or specifying an invalid class 
 */
#define PINGFREQUENCY    120    /* Recommended value: 120 */

/* CONNECTFREQUENCY - time to wait before auto-reconencting
 * If the connection to to uphost is down, then attempt to reconnect every 
 * CONNECTFREQUENCY  seconds.
 *
 * This only specifies the default for class 0 
 */
#define CONNECTFREQUENCY 600    /* Recommended value: 600 */

/* HANGONGOODLINK and HANGONGOODLINK
 * Often the net breaks for a short time and it's useful to try to
 * establishing the same connection again faster than CONNECTFREQUENCY
 * would allow. But, to keep trying on bad connection, we require
 * that connection has been open for certain minimum time
 * (HANGONGOODLINK) and we give the net few seconds to steady
 * (HANGONRETRYDELAY). This latter has to be long enough that the
 * other end of the connection has time to notice it broke too.
 * 1997/09/18 recommended values by ThemBones for modern Efnet
 */

#define HANGONGOODLINK 3600     /* Recommended value: 30-60 minutes */
#define HANGONRETRYDELAY 30     /* Recommended value: 30-60 seconds */

/* WRITEWAITDELAY - Number of seconds to wait for write to
 * complete if stuck.
 */
#define WRITEWAITDELAY     15   /* Recommended value: 15 */

/* CONNECTTIMEOUT -
 * Number of seconds to wait for a connect(2) call to complete.
 * NOTE: this must be at *LEAST* 10.  When a client connects, it has
 * CONNECTTIMEOUT - 10 seconds for its host to respond to an ident lookup
 * query and for a DNS answer to be retrieved.
 */
#define CONNECTTIMEOUT  7      /* Recommended value: 30 */

/* KILLCHASETIMELIMIT -
 * Max time from the nickname change that still causes KILL
 * automatically to switch for the current nick of that user. (seconds)
 */
#define KILLCHASETIMELIMIT 20   /* Recommended value: 90 */

/* SENDQ_ALWAYS - should always be defined.
 * SendQ-Always causes the server to put all outbound data into the sendq and
 * flushing the sendq at the end of input processing. This should cause more
 * efficient write's to be made to the network.
 * There *shouldn't* be any problems with this method.
 * -avalon
 */
#define SENDQ_ALWAYS

/* FLUD - CTCP Flood Detection and Protection
 * 
 * This enables server CTCP flood detection and protection for local clients.
 * It works well against fludnets and flood clones.  The effect of this code
 * on server CPU and memory usage is minimal, however you may not wish to
 * take the risk, or be fundamentally opposed to checking the contents of
 * PRIVMSG's (though no privacy is breached).  This code is not useful for
 * routing only servers (ie, HUB's with little or no local client base), and
 * the hybrid team strongly recommends that you do not use FLUD with HUB.
 * The following default thresholds may be tweaked, but these seem to work
 * well.
 */
#define FLUD

/* ANTI_DRONE_FLOOD - anti flooding code for drones
 * This code adds server side ignore for a client who gets
 * messaged more than drone_count times within drone_time seconds
 * unfortunately, its a great DOS, but at least the client won't flood off.
 * I have no idea what to use for values here, trying 8 privmsgs
 * within 1 seconds. (I'm told it is usually that fast)
 * I'll do better next time, this is a Q&D -Dianora
 */
#define ANTI_DRONE_FLOOD
#define DEFAULT_DRONE_TIME 1
#define DEFAULT_DRONE_COUNT 8

/* JUPE_CHANNEL - jupes a channel from being joined on this server only
 * if added to Q lines e.g. Q:\#packet_channel:Tired of packets
 * This also enables local channel mode +j.
 */
#undef JUPE_CHANNEL

/* 
 * ANTI_SPAMBOT
 * if ANTI_SPAMBOT is defined try to discourage spambots
 * The defaults =should= be fine for the timers/counters etc.
 * but you can play with them. -Dianora
 *
 * Defining this also does a quick check whether the client sends
 * us a "user foo x x :foo" where x is just a single char.  More
 * often than not, it's a bot if it did. -ThemBones
 */
#define ANTI_SPAMBOT

/* ANTI_SPAMBOT parameters, don't touch these if you don't
 * understand what is going on.
 *
 * if a client joins MAX_JOIN_LEAVE_COUNT channels in a row,
 * but spends less than MIN_JOIN_LEAVE_TIME seconds
 * on each one, flag it as a possible spambot.
 * disable JOIN for it and PRIVMSG but give no indication to the client
 * that this is happening.
 * every time it tries to JOIN OPER_SPAM_COUNTDOWN times, flag
 * all opers on local server.
 * If a client doesn't LEAVE a channel for at least 2 minutes
 * the join/leave counter is decremented each time a LEAVE is done
 *
 */
#define MIN_JOIN_LEAVE_TIME  60
#define MAX_JOIN_LEAVE_COUNT  8
#define OPER_SPAM_COUNTDOWN   5 
#define JOIN_LEAVE_COUNT_EXPIRE_TIME 120

/*
 * If ANTI_SPAMBOT_WARN_ONLY is #define'd 
 * Warn opers about possible spambots only, do not disable
 * JOIN and PRIVMSG if possible spambot is noticed
 * Depends on your policies.
 */
#undef ANTI_SPAMBOT_WARN_ONLY

#ifdef FLUD
#define FLUD_NUM        10      /* Number of flud messages to trip alarm */
#define FLUD_TIME       10      /* Seconds in which FLUD_NUM msgs must occur */
#define FLUD_BLOCK      20      /* Seconds to block fluds */
#endif

/* REJECT_HOLD 
 * clients that reconnect but are k-lined will have their connections
 * "held" for REJECT_HOLD_TIME seconds, they cannot PRIVMSG. The idea
 * is to keep a reconnecting client from forcing the ircd to re-scan
 * mtrie_conf.
 *
 */
  
#undef REJECT_HOLD
#define REJECT_HOLD_TIME 30 

/* maximum number of fd's that will be used for reject holding */
#define REJECT_HELD_MAX 25



/*
 * OLD_Y_LIMIT
 *
 * #define this if you prefer the old behaviour of I lines
 * the default behaviour is to limit the total number of clients
 * using the max client limit in the corresponding Y line (class)
 * The old behaviour was to limit the client count per I line
 * without regard to the total class limit. Each have advantages
 * and disadvantages. In an open I line server, the default behaviour
 * i.e. #undef OLD_Y_LIMIT makes more sense, because you can limit
 * the total number of clients in a class. In a closed I line server
 * The old behaviour can make more sense.
 *
 * -Dianora
*/
#undef OLD_Y_LIMIT

/*
 * If the OS has SOMAXCONN use that value, otherwise
 * Use the value in HYBRID_SOMAXCONN for the listen(); backlog
 * try 5 or 25. 5 for AIX and SUNOS, 25 should work better for other OS's
*/
#define HYBRID_SOMAXCONN 2048


/* DEBUGMODE is used mostly for internal development, it is likely
 * to make your client server very sluggish.
 * You usually shouldn't need this. -Dianora
*/
#undef DEBUGMODE               /* define DEBUGMODE to enable debugging mode.*/

#ifdef __CYGWIN__
#define NORES
#endif

#define GLINEFILE       "gline.log"

/* ----------------- archaic and/or broken section -------------------- */
#undef DNS_DEBUG

/* SETUID_ROOT - plock - keep the ircd from being swapped out.
 * BSD swapping criteria do not match the requirements of ircd.
 * Note that the server needs to be setuid root for this to work.
 * The result of this is that the text segment of the ircd will be
 * locked in core; thus swapper cannot touch it and the behavior
 * noted above will not occur.  This probably doesn't work right
 * anymore.  IRCD_UID MUST be defined correctly if SETUID_ROOT.
 */
#undef SETUID_ROOT
 
/* SUN_GSO_BUG support removed
 *
 * if you still have a machine with this bug, it doesn't belong on EFnet
 */

/* CHROOTDIR - chroot() before reading conf
 * Define for value added security if you are paranoid.
 * All files you access must be in the directory you define as DPATH.
 * (This may effect the PATH locations above, though you can symlink it)
 *
 * You may want to define IRC_UID and IRC_GID
 */
#undef CHROOTDIR

/* ------------------------- END CONFIGURATION SECTION -------------------- */
#define MAX_CLIENTS INIT_MAXCLIENTS

#if defined(CLIENT_FLOOD) && ((CLIENT_FLOOD > 8000) || (CLIENT_FLOOD < 512))
#error CLIENT_FLOOD needs redefining.
#endif

#if !defined(CLIENT_FLOOD)
#error CLIENT_FLOOD undefined.
#endif

#if defined(DEBUGMODE)
#  define Debug(x) debug x
#  define LOGFILE LPATH
#else
#  define Debug(x) ;
#  define LOGFILE "/dev/null"
#endif

#define REPORT_DLINE_TO_USER

#ifdef NO_JOIN_ON_SPLIT
#define NO_CHANOPS_ON_SPLIT
#endif

#if defined(NO_CHANOPS_ON_SPLIT) || defined(NO_JOIN_ON_SPLIT)
#define NEED_SPLITCODE
#endif

#ifdef ANTI_SPAMBOT
#define MIN_SPAM_NUM 5
#define MIN_SPAM_TIME 60
#endif

#ifdef IDLE_CHECK
#define MIN_IDLETIME 1800
#endif

#define CONFIG_H_LEVEL_6_1

#endif /* INCLUDED_config_h */


