/************************************************************************
 *   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.28 2006/06/25 22:53:01 sheik Exp $ */

#ifndef	__config_include__
#define	__config_include__

#include "setup.h"
#include "defs.h"


/* READ THIS FIRST BEFORE EDITING!!!
 *
 * Most people will have no real reason to edit config.h, with the
 * exception of perhaps turning off certain things such as throttling
 * or flood protection options.  Most of the stuff you will have to edit
 * can be found in the ircd.conf - see doc/reference.conf for information
 * on that.
 */

/*
 * 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.
 */

#define	NO_DEFAULT_INVISIBLE

/*
 * 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.
 * 
 * IT IS STRONGLY RECOMMENDED THAT YOU *DO* USE SYSLOG.  Many fatal ircd
 * errors are only logged to syslog.
 */
#ifdef HAVE_SYSLOG_H
#define	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 */
#undef	SYSLOG_SQUIT	        /* log all remote squits */
#undef	SYSLOG_CONNECT	        /* log remote connect messages */
#undef	SYSLOG_USERS		/* send userlog stuff to syslog */
#undef	SYSLOG_OPER		/* log all users who successfully oper */
#undef  SYSLOG_BLOCK_ALLOCATOR /* debug block allocator */

/*
 * 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 /* HAVE_SYSLOG_H  */

/* Defaults for things in option block of ircd.conf */

/* WGMON notices are sent to users to warn them about the proxy scans. */
#define DEFAULT_WGMON_URL "http://kline.dal.net/proxy/"
#define DEFAULT_WGMON_HOST "some.bot.host"

/* Hostmasking address */
#define DEFAULT_STAFF_ADDRESS "staff.solid-ircd.com"

/* Default help channel */
#define DEFAULT_HELPCHAN "#Help"

/* Default website */
#define DEFAULT_WEBSITE "http://www.solid-ircd.com"

/* Default AUP */
#define DEFAULT_AUP "http://www.solid-ircd.com"

/* Sent to users in 001 and 005 numerics */
#define DEFAULT_NETWORK "VidGameChat"

/* used for services aliases */
#define DEFAULT_SERVICES_NAME "services.solid-ircd.com"
#define DEFAULT_STATS_NAME "stats.solid-ircd.com"

/* sent to users when they have been klined from the server */
#define DEFAULT_NKLINE_ADDY "ircops@solid-ircd.com"
#define DEFAULT_LKLINE_ADDY "ircops@solid-ircd.com"

/* Sent to users when they encounter mode +R */
#define DEFAULT_NS_REGISTER_URL "http://docs.dal.net/docs/nsemail.html"

/* self explanitory */
#define DEFAULT_MAXCHANNELSPERUSER 10

/* Default difference in time sync between servers before we complain */
#define DEFAULT_TSMAXDELTA 120
#define DEFAULT_TSWARNDELTA 15


/* Default host domain name */
#define DEFAULT_HOST_DOMAIN "solid-ircd.com"

/* default clone limits */
#define DEFAULT_LOCAL_IP_CLONES    10
#define DEFAULT_LOCAL_IP24_CLONES  60
#define DEFAULT_GLOBAL_IP_CLONES   25
#define DEFAULT_GLOBAL_IP24_CLONES 150

/* 
 * STRICT_LIST
 * This function is enabled by default it prevents unregistered
 * users from viewing channels using /list they're notified  to use /qlist instead
 * this helps prevent spambots.
 * -Sheik 16/04/2005
 *
 */

#undef STRICT_LIST


/* 
 * IRCOP_LIST
 * This option will enable /ircops  which list all the active
 * opers on the network, +H opers are excluded from this.
 * Added by Sheik on  22/04/2005
 *
 */

#define IRCOP_LIST


/* STRICT_HOSTMASK  
 *
 * This function prevents users from unsetting +v
 * This is used to prevent users from evading bans by unsetting their hostmaks.
 */

#undef STRICT_HOSTMASK

/*
 * STATS_P_ENABLED
 * If Defined will make a /stats P request by opers return
 * all listneing ports and rather they are ssl or not
 * if not defined it acts as a /stats p request
 */
#define STATS_P_ENABLED

/*
 * STATS_P_OPERONLY
 * Recommended
 * Allows only opers to do a /stats P request and view
 * Listening ports and rather they are ssl or not
 * Requires STATS_P_ENABLED
 * if you undefine this you must also undefine NO_LOCAL_USER_STATS  
 *  & NO_USER_STATS  only do this if you want normal users to  be able to use /stats 
 */

#define STATS_P_OPERONLY


/* PLUS_R_TO_NONREG_WARN
 * Warn +R users that their target will not be able to reply.
 */


#undef PLUS_R_TO_NONREG_WARN



/* 
 * HIDEULINEDSERVS 
 * Define this if you want to hide the location of U:lined servers (and 
 * then clients on them) from nonopers. With this defined, no non-oper 
 * should be able to find out which server the U:lined server is connected
 * to. If you are connected to the main DALnet network, you MUST have this
 * enabled.
 */

#define HIDEULINEDSERVS 1



/*
 * RWHO_PROBABILITY
 * Define this to enable probability calculation support for RWHO.
 */
#define RWHO_PROBABILITY


/*
 * RESTRICT_ADMINONLY
 * This function will restrict stats C & c for server administrators only.
 *
 */

 #define RESTRICT_C_LINES_ADMINONLY

/*
 * ERROR_FREEZE_NOTICE
 * When a user is freezed if this is defined the user will get a error message of text not send
 * when ever they attempt to talk.
 */

#define ERROR_FREEZE_NOTICE



/*
 * TOYS
 * Define this if you want to enable our toys.
 * This feature enables Elmer,Silly & Normal
 * Elmer makes the user to talk like elmer the user is not aware when this mode is set
 * the syntax is /elmer <nick> <reason> 
 * If you enable this you must have include "elmer.conf" in you ircd.conf in order for this work.
 * Silly makes user say "Whee" the user is also is not aware when this mode is set.
 * Normal is used to restore the user back to normal when they're elmered or silly
 * the synax is /normal <nick>
 *
 * We created this toys to make fun of does annoying users you know what I mean ;) -Sheik 16/04/2005
 * Enable this at your own risk currently elmer is  not working but silly works. - Sheik 1/7/2005
 */

#define TOYS

/* File names
 * the server will look for these files
 */
#define	MPATH	"ircd.motd"
#define	SMPATH	"ircd.smotd"
#define	LPATH	"ircd.log"
#define	PPATH	"ircd.pid"
#define HPATH	"opers.txt"


/* Services Definitions */
#define CHANSERV "ChanServ"
#define NICKSERV "NickServ"
#define MEMOSERV "MemoServ"
#define ROOTSERV "RootServ"
#define OPERSERV "OperServ"
#define STATSERV "StatServ"
#define HELPSERV "HelpServ"
#define BOTSERV  "BotServ"
#define DENORA    "DENORA"

/*
 * DENY_SERVICES_MSGS
 * Define this to cause PRIVMSG <service> to be rejected with numeric 487,
 * explaining that "/msg <service>" is no longer supported, and to use
 * "/msg <service>@<services_name>" or "/<service>" instead.
 */
#undef DENY_SERVICES_MSGS

/*
 * PASS_SERVICES_MSGS
 * Define this to cause PRIVMSG <service> to be passed to services as-is,
 * instead of being converted to the shortform ("PRIVMSG NickServ" -> "NS").
 * Useful if services behaves differently when it gets a target of <service>
 * instead of <service>@<server>.  DENY_SERVICES_MSGS overrides this.
 */
#define PASS_SERVICES_MSGS

/*
 * SUPER_TARGETS_ONLY
 * Define this to allow the nick@server form of PRIVMSG/NOTICE to target super
 * servers only.  If not defined, the target may be on any server.
 */

#define SUPER_TARGETS_ONLY

/*
 * 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.
 * 
 */

#undef FNAME_USERLOG
#undef FNAME_OPERLOG

/*
#define FNAME_USERLOG "/usr/local/ircd/users"	
#define FNAME_OPERLOG "/usr/local/ircd/opers"
*/

/* define this if you want to support non-noquit servers.  handy for
 * services that are not noquit compliant.
 */

#undef NOQUIT

/*
 * DEFAULT_KLINE_TIME
 *
 * Define this to the default time for a kline (in minutes) for klines with
 * unspecified times.  A time of 0 will create a permanent kline.
 */
#define DEFAULT_KLINE_TIME 30


/*
 * KLINE_MIN_STORE_TIME
 *
 * The minimum duration (in minutes) a kline must be before it will be stored
 * in the on-disk journal.
 */

#define KLINE_MIN_STORE_TIME 180

/*
 * KLINE_STORE_COMPACT_THRESH
 *
 * The maximum number of entries to write to the active kline storage journal
 * before compacting it.  This threshold prevents the journal from growing
 * indefinitely while klines are added and removed on a running server.
 */

#define KLINE_STORE_COMPACT_THRESH 1000



/*
 * DEFAULT_GLINE_TIME
 *
 * Define this to the default time for a gline (in minutes) for glines with
 * unspecified times.  A time of 0 will create a permanent gline.
 */

#define DEFAULT_GLINE_TIME 30


/*
 * GLINE_MIN_STORE_TIME
 *
 * The minimum duration (in minutes) a gline must be before it will be stored
 * in the on-disk journal.
 */

#define GLINE_MIN_STORE_TIME 180

/*
 * GLINE_STORE_COMPACT_THRESH
 *
 * The maximum number of entries to write to the active gline storage journal
 * before compacting it.  This threshold prevents the journal from growing
 * indefinitely while glines are added and removed on a running server.
 */

#define GLINE_STORE_COMPACT_THRESH 1000

/*
 * Pretty self explanatory: These are shown in server notices and to the 
 * recipient of a "you are banned" message.
 */

#define LOCAL_BAN_NAME          "k-line"
#define NETWORK_BAN_NAME        "autokill"
#define LOCAL_BANNED_NAME       "k-lined"
#define NETWORK_BANNED_NAME     "autokilled"
#define SHUN_NAME               "shun"
#define SHUNNED_NAME            "shunned"
#define NETWORK_GLINE_NAME	    "g-line"
#define NETWORK_GLINNED_NAME	"g-lined"

/*
 * 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

/*
 * IGNORE_FIRST_CHAR - define this for NO_MIXED_CASE if you wish to
 * ignore the first character
 */

#define IGNORE_FIRST_CHAR

/*
 * USERNAMES_IN_TRACE - show usernames in trace Define this if you want
 * to see usernames in /trace.
 */

#define USERNAMES_IN_TRACE

/*
 * 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

/* IDENTD_COMPLAIN - yell at users that don't have identd installed */
#define IDENTD_COMPLAIN

/*
 * MOTD_WAIT - minimum seconds between use of MOTD, INFO, HELP, LINKS * 
 * before max use count is reset * -Dianora 
 */
#define MOTD_WAIT 10

/* MOTD_MAX * max use count before delay above comes into effect */
#define MOTD_MAX 3

/* SHOW_HEADERS - Shows messages like "looking up hostname" */
#define SHOW_HEADERS

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

#undef 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

/*
 * DEFAULT_HELP_MODE - default your opers to +h helper mode.  This
 * is strongly recommended
 */
#define DEFAULT_HELP_MODE

/*
 * NICER_UMODENOTICE_SEPARATION
 * By default, all usermode notices (+d, for instance) come as
 * :servername NOTICE nick :*** Notice -- blah blah
 * This makes them come as *** Debug, or *** Spy, etc.
 */

#define NICER_UMODENOTICE_SEPARATION

/*
 * 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

/*
 * IRCII_KLUDGE - leave it defined Define this if you want the server
 * to accomplish ircII standard Sends an extra NOTICE in the beginning
 * of client connection
 */

#define IRCII_KLUDGE

/*
 * 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	1560

/*
 * 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

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

#define FAILED_OPER_NOTICE

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

#define ANTI_NICK_FLOOD

/*
 * defaults allow 4 nick changes in 20 seconds 
 */

#define MAX_NICK_TIME 4
#define MAX_NICK_CHANGES 3

/* NO_AWAY_FLUD
 * reallow propregation of AWAY messages, but do not allow AWAY flooding
 * I reccomend a max of 5 AWAY's in 3 Minutes
 */

#define NO_AWAY_FLUD

#ifdef NO_AWAY_FLUD
#define MAX_AWAY_TIME 180  /* time in seconds */
#define MAX_AWAY_COUNT 5
#endif



/*
 * 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
 * enabled.
 */

#define WARN_NO_NLINE

/*
 * RIDICULOUS_PARANOIA_LEVEL
 *
 * This indicates the level of ridiculous paranoia the admin has.
 * The settings are as follows:
 *
 * 0 - No hostmasking is available.
 * 1 - All +A users can see the real IP.
 * 2 - Local +A can see the real IP.
 * 3 - Noone can see the real IP.  It is still logged.
 *
 * WARNING:
 * Running levels above 1 on DALnet will result in your server being juped
 * from the network if a security breech is suspected.
 *
 * If level 3 is selected, USE_SYSLOG must be defined.
 */

#define RIDICULOUS_PARANOIA_LEVEL 1
#if (RIDICULOUS_PARANOIA_LEVEL==3)
#ifndef USE_SYSLOG
#error "USE_SYSLOG MUST BE DEFINED FOR LEVEL 3"
#endif
#endif

/*
 * Forward /quote help to HelpServ
 *
 * If defined, any /quote help requests from users sent to the ircd
 * will forward the help message over to HelpServ if defined, as
 * well as the default HelpServ topic request command. -srd
 */

#define HELP_FORWARD_HS
#ifdef HELP_FORWARD_HS
#define DEF_HELP_CMD "?"
#endif

/*
 * For all of these options below, #define NETWORK_PARANOIA
 * and leave the individual ones alone.
 */
#undef NETWORK_PARANOIA

/*
 * NO_USER_SERVERKILLS
 * Users can't set mode +k
 *
 * NO_USER_OPERKILLS
 * Users can't set mode +s
 *
 * NO_USER_STATS
 * Users can't get /stats from anything
 *
 * NO_LOCAL_USER_STATS
 * Local users can't get /stats from anything, each server does its own 
 * checking (not recommended)
 * No effect if NO_USER_STATS is defined 
 *
 * NO_USER_TRACE
 * Users can't use TRACE
 *
 * NO_USER_OPERTARGETED_COMMANDS
 * Users can't do /motd oper, /admin oper, /whois oper oper, 
 * /whois server.* oper on any oper that is set +I 
 * (see oper hiding section)
 *
 * HIDE_NUMERIC_SOURCE
 * All numerics going out to local clients come from the local server
 * Necessary for numerics from remote servers not giving information away
 * 
 * HIDE_KILL_ORIGINS
 * All /kills appear, from a user standpoint, to come from HIDDEN_SERVER_NAME
 * Note that NO_USER_OPERKILLS and NO_USER_SERVERKILLS must be defined for
 * this to actually provide any security.
 *
 * HIDE_SPLIT_SERVERS
 * Hide the names of servers during netsplits
 *
 * HIDE_SERVERMODE_ORIGINS
 * Hide the origins of server modes (ie, in netjoins).
 * (They will all come from me.name)
 */

#define NO_USER_SERVERKILLS
#define NO_USER_OPERKILLS 
/* #undef NO_USER_STATS */

#define NO_USER_STATS 
/* #undef NO_LOCAL_USER_STATS */
#define NO_USER_TRACE 
/* #undef NO_USER_OPERTARGETED_COMMANDS */
/* #undef HIDE_NUMERIC_SOURCE */
 #define HIDE_KILL_ORIGINS 
/* #undef HIDE_SPLIT_SERVERS */
 #define HIDE_SERVERMODE_ORIGINS 

/***********************/
/* OPER HIDING SECTION */
/***********************/

/* 
 * ALLOW_HIDDEN_OPERS
 * 
 * Allow your opers to be set +I (hidden) -- required for the commands below
 * If not defined, everything below in the oper hiding section must be 
 * undefined.
 */
#define ALLOW_HIDDEN_OPERS

/*
 * DEFAULT_MASKED_HIDDEN
 * 
 * Makes all your opers that hostmasked +I (hidden) by default
 * ALLOW_HIDDEN_OPERS must be defined with this enabled.
 */
#define DEFAULT_MASKED_HIDDEN

/*
 * ALL_OPERS_HIDDEN
 * 
 * Makes all your opers on a 'hidden' server by default (sets +I at /oper)
 * ALLOW_HIDDEN_OPERS must be defined with this enabled.
 * DEFAULT_MASKED_HIDDEN is reccommended with this enabled.
 */
#undef ALL_OPERS_HIDDEN

/*
 * FORCE_OPERS_HIDDEN
 *
 * Makes it so that all opers can't set -I (not hidden)
 *
 * Define ALL_OPERS_HIDDEN, DEFAULT_MASKED_HIDDEN, ALLOW_HIDDEN_OPERS
 * with this as well, or things will not work properly
 */
#undef FORCE_OPERS_HIDDEN

/*
 * FORCE_EVERYONE_HIDDEN
 *
 * Makes it so that everyone on your server is set +I and can't set -I
 * 
 * Every other hidden option in the oper hiding section must be 
 * defined as well.
 */
#undef FORCE_EVERYONE_HIDDEN

/* 
 * Show these for hidden opers, self explanatory
 * DO NOT CHANGE ON A SERVER TO SERVER BASIS
 * THESE ARE NETWORK-WIDE!
 */
#define HIDDEN_SERVER_NAME "*.solid-ircd.com" /*This was moved to the ircd.conf */
#define HIDDEN_SERVER_DESC "VidGameChat IRC Network" /*This was moved to the ircd.conf */

/***************************/
/* END OPER HIDING SECTION */
/***************************/

#ifdef NETWORK_PARANOIA
#define NO_USER_SERVERKILLS
#define NO_USER_OPERKILLS
#define NO_USER_STATS
#define NO_USER_TRACE
#define NO_USER_OPERTARGETED_COMMANDS
#define HIDE_NUMERIC_SOURCE
#define HIDE_KILL_ORIGINS
#define HIDE_SPLIT_SERVERS
#define HIDE_SERVERMODE_ORIGINS
#endif

/* EXEMPT_LISTS and INVITE_LISTS
 * Written by Sedition, Feb.04
 */
#define EXEMPT_LISTS
#define INVITE_LISTS

 
/* DCCALLOW
 * Enable the DCCALLOW system. Has been included, but now you can
 * disable it! :)
 */

#undef DCCALLOW


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

/*
 * PING_NAZI
 *
 * be nazi-ish about pings (re-check every client connect, 
 * user registration, etc)
 */
#undef PING_NAZI

/*
 * ALWAYS_SEND_DURING_SPLIT
 * on a large network, if your server is carrying large amounts of clients,
 * and your server splits from the main network, the amount of allocated
 * dbufs will skyrocket as buffers fill up with QUIT messages. This code
 * attempts to combat this by sending out data whenever possible during a
 * split. - lucas
 */
#define ALWAYS_SEND_DURING_SPLIT

/* INITIAL_DBUFS - how many dbufs to preallocate */
#define INITIAL_DBUFS 1024	/* preallocate 2 megs of dbufs */


/* INITIAL_SBUFS_X - how many bytes of sbufs to preallocate */
#define INITIAL_SBUFS_SMALL 2 * (1 << 20) /* 2 meg */
#define INITIAL_SBUFS_LARGE 2 * (1 << 20) /* 2 meg */
#define INITIAL_SBUFS_USERS 256           /* number of sbuf user structs to pool */

/*
 * MAXBUFFERS - increase socket buffers
 * 
 * Increase send & receive socket buffer up to 64k, keeps clients at 8K
 * and only raises servers to 64K
 */
#define MAXBUFFERS

/*
 * PORTNUM - default port where ircd resides Port where ircd resides.
 * NOTE: This *MUST* be greater than 1024 if you plan to run ircd under
 * any other uid than root.
 */
#define PORTNUM 7000 /* 7000 for DALnet */

/*
 * 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.
 */
#define NICKNAMEHISTORYLENGTH 2048

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

/*
 * MAXSENDQLENGTH - Max amount of internal send buffering Max amount of
 * internal send buffering when socket is stuck (bytes)
 */

#define MAXSENDQLENGTH 5050000 /* Recommended value: 5050000  */

/*
 * 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.
 */

#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.
 */
#define CONNECTFREQUENCY 600	/* Recommended value: 600 */

/*
 * HANGONGOODLINK and HANGONGOODLINK Often 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 HANGONRETRYDELAY 60	/* Recommended value: 30-60 seconds */
#define HANGONGOODLINK 3600	/* Recommended value: 30-60 minutes */

/*
 * WRITEWAITDELAY - Number of seconds to wait for write to complete if
 * stuck.
 */
#define WRITEWAITDELAY     10	/* 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	30	/* Recommended value: 30 */

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

/*
 * 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_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  25
#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	   4	/* Number of flud messages to trip alarm */
# define FLUD_TIME	3	/* Seconds in which FLUD_NUM msgs must occur */
# define FLUD_BLOCK	15	/* Seconds to block fluds */
#endif

/*
 * 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 25

/*
 * Throttling support:
 * THROTTLE_ENABLE    - enable throttling code, if undefined, the functions
 *                      will be empty.  runtime settable.
 * THROTTLE_TRIGCOUNT - number of connections to triggle throttle action
 * THROTTLE_TRIGTIME  - number of seconds in which THROTTLE_TRIGCOUNT must
 *                      happen
 * THROTTLE_RECORDTIME- length to keep records for each ip (since last connect
                        from this ip)
 * THROTTLE_HASHSIZE  - size of the throttle hashtable, also tuneable
 *
 * Recommended values: 3, 15, 1800.  3+ connections in 15 or less seconds will
 * result in a connection throttle z:line.  These are also
 * z: line time grows, pseudo-exponentially 
 *  first zline : 2 minutes
 *  second zline: 5 minutes
 *  third zline : 15 minutes
 *  fourth zline: 30 minutes
 *  anything more is an hour
 * tuneable at runtime.  -wd */
/* part of options.h now #define THROTTLE_ENABLE */
#define THROTTLE_ENABLE 
#define THROTTLE_TRIGCOUNT 3
#define THROTTLE_TRIGTIME 15
#define THROTTLE_RECORDTIME 1800
#define THROTTLE_HASHSIZE 25147

/*
 * Message-throttling support.
 * MSG_TARGET_LIMIT: if defined, imposes limits on message targets
 * MSG_TARGET_MIN: initial number of message targets allowed (recommend 5 or less)
 * MSG_TARGET_MAX: maximum number of message targets stored (recommend 5 or
 *                 less)
 * MSG_TARGET_MINTOMAXTIME: number of seconds a user must be online
 *                          before given MSG_TARGET_MAX targets
 * MSG_TARGET_TIME: time before message targets expire (this is what you should
 *                  tweak)
 */

#define MSG_TARGET_LIMIT
#define MSG_TARGET_MIN  5
#define MSG_TARGET_MAX  8 /* MUST BE >= MSG_TARGET_MIN!!! */
#define MSG_TARGET_MINTOMAXTIME 300
#define MSG_TARGET_TIME 45

/*
 * Channel joining rate-throttling support
 *
 * DEFAULT_JOIN_NUM:  number of joins to allow, network-wide, in a period of
 *                    DEFAULT_JOIN_TIME seconds.
 * DEFAULT_JOIN_TIME: time to collect joins.
 * JOINRATE_SERVER_ONLY: Only let servers/U: lined things set +j.
 *                       KEEP THIS IF USING A NETWORK WITH PRE-1.4.36 SERVERS!
 */
/* defaults are very forgiving. */
#define DEFAULT_JOIN_NUM  8
#define DEFAULT_JOIN_TIME 4
#undef JOINRATE_SERVER_ONLY

/* Debugging configs */

#undef DNS_DEBUG

/*
 * DEBUGMODE is used mostly for internal development, it is likely to
 * make your client server very sluggish. You usually shouldn't need
 * this. -Dianora
 *
 * Currently, DEBUGMODE is pretty much useless.
 * Don't use it. - lucas
 */
#undef  DEBUGMODE		/* define DEBUGMODE to enable */
#undef DUMP_DEBUG


/*
 * MEMTRACE enables additional memory accounting for display in STATS Z.
 * Requires GNU C extensions for expression blocks.
 */
#undef MEMTRACE



/* DONT_CHECK_QLINE_REMOTE
 * Don't check for Q:lines on remote clients.  We can't do anything
 * if a remote client is using a nick q:lined locally, so
 * why check?  If you don't care about the wasted CPU, and you're
 * curious, feel free to #define this.  I recommend you don't
 * on a client server unless it's got a lot of power.
 * -wd */
#define DONT_CHECK_QLINE_REMOTE

/* ------------------------- END CONFIGURATION SECTION -------------------- */
#ifdef APOLLO
#define RESTARTING_SYSTEMCALLS
#endif /*
        * read/write are restarted after signals
        * defining this 1, gets siginterrupt call
        * compiled, which attempts to remove this
        * behaviour (apollo sr10.1/bsd4.3 needs this) 
        */

#define HELPFILE HPATH
#define MOTD MPATH
#define SHORTMOTD SMPATH
#define IRCD_PIDFILE PPATH

/* enforce a minimum, even though it'll probably break at runtime */
#if (MAXCONNECTIONS < 20)
# undef MAXCONNECTIONS
# define MAXCONNECTIONS 20
#endif

#if (MAXCONNECTIONS > 1000)
# define MAX_BUFFER (MAXCONNECTIONS / 100)
#else
# define MAX_BUFFER 10
#endif

#define MAX_ACTIVECONN (MAXCONNECTIONS - MAX_BUFFER)

#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) || defined(DNS_DEBUG)
extern void debug(int level, char *pattern, ...);
#define Debug(x) debug x
#define LOGFILE LPATH
#else
#define Debug(x) ;
#define LOGFILE "/dev/null"
#endif

#ifdef DENY_SERVICES_MSGS
#undef PASS_SERVICES_MSGS
#endif

#define CONFIG_H_LEVEL_183
#endif				/* __config_include__ */


syntax highlighted by Code2HTML, v. 0.9.1