/* * EGGDROP compile-time settings * * IF YOU ALTER THIS FILE, YOU NEED TO RECOMPILE THE BOT. */ /* * Settings which toggle certain features of the bot to be enabled * or disabled -- use "#define" to enable and "#undef" to disable */ /* not connected to any server ("in limbo") -- this is currently */ /* still just barely supported */ #undef NO_IRC /* define this if you have problems with "zombie" processes */ #define HUNT_ZOMBIES /* if you want the bot to die when it receives the TERM or HUP */ /* signals, define this (normally TERM just causes the bot to */ /* save the userfile and HUP causes a rehash) */ #undef DIE_ON_TERMHUP /* add the 'exec' command (ie, give masters access to your shell)? */ #undef EXEC /* add the 'simul' command (masters can manipulate other people on */ /* the party line)? */ #undef SIMUL /* have a separate user level called "owner" (+n) which is above master */ /* and has exclusive use of chattr/die/edit/exec/set/tcl ? (recommended) */ #define OWNER /* allow people from other bots (in your bot-net) to boot people off */ /* your bot's party line? */ #define REMOTE_BOOTS /* enable console mode 'r'? this mode shows every raw message from the */ /* server to people with console 'r' selected -- will take a bit more */ /* cpu. this also enables TCL bind 'raw' */ #undef USE_CONSOLE_R /* ping other bots on the botnet only once every 5 minutes? should be */ /* used if your net is ratty; the default is one ping every minute */ #undef SLOW_PING /* squelch the error message when rejecting a dcc chat or send? */ /* (normally it says something like "i don't accept dcc chats from */ /* strangers!") */ #undef QUIET_REJECTION /* check for stoned servers? (ie: where the server connection has */ /* died, but eggdrop hasn't been notified yet) works okay for most */ /* people */ #define CHECK_STONED /* maximum number of dcc connections you will allow */ #define MAXDCC 50 /* maximum number of lines to queue to the server */ /* if you're going to dump large chunks of text to people over irc, you */ /* will probably want to raise this -- most people are fine at 200 though */ #define MAXQMSG 200 /* maximum number of tandem bots you will ever have in a chain */ #define MAXTAND 200 /* maximum number of logfiles to allow */ #define MAXLOGS 5 /* time (in seconds) to wait for someone to return from a netsplit */ #define WAIT_SPLIT 300 /* time (in seconds) that someone must have been off-channel before */ /* re-displaying their info */ #define WAIT_INFO 180 /* time (in seconds) that a dcc file transfer can remain inactive */ /* before being timed out */ #define WAIT_DCC_XFER 300 /* time (in seconds) to attempt to connect a dcc chat or bot link */ /* before giving up */ #define WAIT_CONNECT 120 /***********************************************************************/ /***** the 'configure' script should make this next part automatic *****/ /***********************************************************************/ /* have to use a weird way to make the compiler error out cos not all compilers support #error or error */ #if !HAVE_VSPRINTF #include "error/you/need/vsprintf/to/compile/eggdrop" #endif #if HAVE_UNISTD_H #include #endif /* almost every module needs some sort of time thingy, so... */ #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif #if !HAVE_RENAME #define rename movefile #endif #if !HAVE_GETDTABLESIZE /* make a good guess */ #define getdtablesize() MAXDCC+10 #endif #if !HAVE_SRANDOM #define srandom(x) srand(x) #endif #if !HAVE_RANDOM #define random() (rand()/16) #endif #if !HAVE_SIGACTION /* old "weird signals" */ #define sigaction sigvec #ifndef sa_handler #define sa_handler sv_handler #define sa_mask sv_mask #define sa_flags sv_flags #endif #endif #if !HAVE_SIGEMPTYSET /* and they probably won't have sigemptyset, dammit */ #define sigemptyset(x) ((*(int *)(x))=0) #endif /* older BSD machines will collapse because of this. sorry. */ #define wait_t int /* handy aliases for memory tracking and core dumps */ #define nmalloc(x) n_malloc((x),__FILE__,__LINE__) #define nfree(x) n_free((x),__FILE__,__LINE__) #define context { strcpy(cx_file,__FILE__); cx_line=__LINE__; } #undef malloc #undef free #define malloc(x) dont_use_old_malloc(x) #define free(x) dont_use_old_free(x) #undef atol #define atol my_atol /* using the math library will cause 'log' to be a bit... wrong :) */ #define log my_log /***********************************************************************/ /* used to queue a lot of things */ struct eggqueue { char *item; struct eggqueue *next; }; /* public structure of all the dcc connections */ struct dcc_t { int sock; unsigned long addr; unsigned int port; char nick[10]; char host[121]; unsigned char type; union { struct chat_info *chat; struct file_info *file; struct edit_info *edit; struct xfer_info *xfer; struct tand_info *tand; struct relay_info *relay; struct fork_info *fork; struct script_info *script; void *other; } u; /* special use depending on type */ }; /* standard chat modes */ /* 1 dcc chat 2 dcc chat, waiting for password 3 dcc send active 4 dcc get active 5 dcc get waiting for connection 6 telnet (open listening socket) 7 telnet, waiting for handle 8 file section 9 (unused) 10 tandem connection 11 tandem connection being established 12 relay 13 relaying 14 forked process, attempting to connect 15 file section, waiting for password 16 lost connection (not often used any more) 17 telnet, new user, waiting for handle 18 telnet, new user, waiting for password 19 script has control */ #define DCC_CHAT 1 /* dcc-chat: command mode */ #define DCC_CHAT_PASS 2 /* receiving password for dcc chat */ #define DCC_TELNET_ID 7 /* telnetter identifying self */ #define DCC_TELNET_NEW 17 /* new user via telnet, giving nick */ #define DCC_TELNET_PW 18 /* new user via telnet, setting password */ struct chat_info { char *away; /* non-NULL if user is away */ unsigned long status; /* status flags */ time_t timer; /* last time the user typed something */ int msgs_per_sec; /* used to stop flooding */ int con_flags; /* with console: what to show */ int channel; /* 0=party line, -1=off */ }; #define DCC_TELNET 6 /* acceptor socket for telnet */ /* (no other info defined) */ #define DCC_FILES 8 /* file subsystem */ #define DCC_FILES_PASS 15 /* awaiting password, file subsystem */ struct file_info { struct chat_info *chat; char dir[121]; }; /* used to be edit */ #define DCC_unused 9 #define DCC_SEND 3 /* receiving file */ #define DCC_GET 4 /* sending file */ #define DCC_GET_PENDING 5 /* waiting for connect to send file */ struct xfer_info { char filename[121]; char dir[121]; /* used when uploads go to the current dir */ unsigned long length; unsigned long sent; char buf[41]; /* temporary storage for byte counts */ unsigned char sofar; /* how much of the byte count received */ time_t pending; /* used to expire stale file offerings */ char from[10]; /* [GET] user who offered the file */ }; #define DCC_TANDEM 10 /* communication with a tandem-bot */ #define DCC_TANDEM_NEW 11 /* connecting to a tandem-bot... */ struct tand_info { unsigned long status; time_t timer; char version[121]; /* channel/version info */ char linker[21]; /* who requested this link */ void *user; /* when transferring userlist */ }; #define DCC_RELAY 12 /* relayed connection to a bot */ #define DCC_RELAYING 13 /* dcc chat user vanishing to relay connection */ struct relay_info { struct chat_info *chat; int sock; }; #define DCC_FORK 14 /* forked out to telnet */ struct fork_info { union { struct chat_info *chat; struct file_info *file; struct tand_info *tand; struct relay_info *relay; struct xfer_info *xfer; void *other; } u; unsigned char type; unsigned int pid; int x; /* differentiates for relay */ }; #define DCC_SCRIPT 19 /* dcc user in an interactive script */ struct script_info { unsigned char type; union { struct chat_info *chat; struct file_info *file; void *other; } u; char command[121]; }; #define DCC_LOST 16 /* lost in a child proess */ /* for dcc chat & files: */ #define STAT_ECHO 1 /* echo commands back? */ #define STAT_MASTER 2 /* is bot-master (full access) */ #define STAT_XFER 4 /* has 'x' flag on chat line */ #define STAT_CHAT 8 /* in file-system but may return */ #define STAT_TALK 16 /* using enhanced 'talk' script */ #define STAT_UNUSED3 32 #define STAT_TELNET 64 /* connected via telnet */ #define STAT_UNUSED2 128 #define STAT_PARTY 256 /* only on party line via 'p' flag */ /* for dcc tandem: */ #define STAT_PINGED 1 /* waiting for ping to return */ #define STAT_SHARE 2 /* sharing user data with the bot */ #define STAT_CALLED 4 /* this bot called me */ #define STAT_OFFERED 8 /* offered her the user file */ #define STAT_SENDING 16 /* in the process of sending a user list */ #define STAT_GETTING 32 /* in the process of getting a user list */ #define STAT_WARNED 64 /* warned him about unleaflike behavior */ #define STAT_LEAF 128 /* this bot is a leaf only */ #define USER_OP 0x00000001 /* o bot will op the user */ #define USER_DEOP 0x00000002 /* d bot makes sure user never gets op */ #define USER_OWNER 0x00000004 /* n user is the bot owner */ #define USER_KICK 0x00000008 /* k user is auto-kicked */ #define USER_MASTER 0x00000010 /* m user has full bot access */ #define USER_FRIEND 0x00000020 /* f user exempt from revenge */ #define USER_XFER 0x00000040 /* x user has file area access */ #define USER_PARTY 0x00000080 /* p user has party line access */ #define USER_COMMON 0x00000100 /* c user is actually a public irc site */ #define USER_FLAG1 0x00000200 /* 1 user-defined flag #1 */ #define USER_FLAG2 0x00000400 /* 2 user-defined flag #2 */ #define USER_FLAG3 0x00000800 /* 3 user-defined flag #3 */ #define USER_FLAG4 0x00001000 /* 4 user-defined flag #4 */ #define USER_FLAG5 0x00002000 /* 5 user-defined flag #5 */ #define USER_FLAG6 0x00004000 /* 6 user-defined flag #6 */ #define USER_FLAG7 0x00008000 /* 7 user-defined flag #7 */ #define USER_FLAG8 0x01000000 /* 8 user-defined flag #8 */ #define USER_FLAG9 0x02000000 /* 9 user-defined flag #9 */ #define USER_FLAG0 0x04000000 /* 0 user-defined flag #10 */ #define USER_JANITOR 0x08000000 /* j user has file area master */ #define USER_MASK (0x00ff01ff) /* all non-userdef flags */ #ifndef OWNER #undef USER_OWNER #define USER_OWNER USER_MASTER #endif /* ????j098 b??hrlas 7654321c pxfmkndo */ /* (users) (bots) (users) (users) */ /* flags specifically for bots */ #define BOT_SHARE 0x00010000 /* s bot shares user files */ #define BOT_AUTO 0x00020000 /* a make automatic connection */ #define BOT_LEAF 0x00040000 /* l may not link other bots */ #define BOT_REJECT 0x00080000 /* r automatically reject anywhere */ #define BOT_HUB 0x00100000 /* h only want one hub bot linked */ #define BOT_UNDEF_1 0x00200000 #define BOT_UNDEF_2 0x00400000 #define USER_BOT 0x00800000 /* b user is a bot (previously 't') */ /* for detecting floods: */ #define _NICK 0 #define _PRIVMSG 1 #define _NOTICE 2 #define _CTCP 3 #define _JOIN 4 /* for local console: */ #define STDIN 0 #define STDOUT 1 #define STDERR 2 /* logfile display flags */ #define LOG_MSGS 1 /* m msgs/notice/ctcps */ #define LOG_PUBLIC 2 /* p public msg/notice/ctcps */ #define LOG_CHAN 4 /* j channel joins/parts/etc */ #define LOG_MODES 8 /* k mode changes/kicks/bans */ #define LOG_CMDS 16 /* c user dcc or msg commands */ #define LOG_MISC 32 /* o other misc bot things */ #define LOG_TAND 64 /* b tandembot notices */ #define LOG_RAW 128 /* r raw server stuff coming in */ #define LOG_FILES 256 /* x file transfer commands and stats */ #define LOG_ALL 511 /* (dump to all logfiles) */ #define FORK_KILLED 234 /* sentinel value */