/[cvs]/eggdrop1.4/src/eggdrop.h
ViewVC logotype

Annotation of /eggdrop1.4/src/eggdrop.h

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.8 - (hide annotations) (download) (as text)
Sat Oct 9 17:33:47 1999 UTC (20 years ago) by arthur2
Branch: MAIN
Changes since 1.7: +3 -3 lines
File MIME type: text/x-csrc
tcl-version-checking.diff

1 segfault 1.1 /*
2     * EGGDROP compile-time settings
3     *
4     * IF YOU ALTER THIS FILE, YOU NEED TO RECOMPILE THE BOT.
5     */
6     /*
7     * This file is part of the eggdrop source code
8     * copyright (c) 1997 Robey Pointer
9     * and is distributed according to the GNU general public license.
10     * For full details, read the top of 'main.c' or the file called
11     * COPYING that was distributed with this code.
12     */
13    
14     #ifndef _H_EGGDROP
15     #define _H_EGGDROP
16    
17     /*
18     * if you're *only* going to link to new version bots (1.3.0 or higher)
19     * then you can safely define this
20     */
21    
22     #undef NO_OLD_BOTNET
23    
24     /***********************************************************************/
25     /***** the 'configure' script should make this next part automatic *****/
26     /***********************************************************************/
27    
28     /*
29     * define the maximum length a handle on the bot can be.
30     * (standard is 9 characters long)
31     * (DO NOT MAKE THIS VALUE LESS THAN 9 UNLESS YOU WANT TROUBLE!)
32     * (beware that using lengths over 9 chars is 'non-standard' and if you
33     * wish to link to other bots, they _must_ both have the same maximum
34     * handle length)
35     */
36    
37     #define HANDLEN 9 /* valid values 9->NICKMAX */
38    
39     /* handy maximum string lengths */
40     #define NICKMAX 15 /* valid values HANDLEN->32 */
41     #define UHOSTLEN 161 /* reasonable, i think? */
42     #define DIRLEN 256 /* paranoia */
43     #define MAX_LOG_LINE (767) /* for misc.c/putlog() <cybah> */
44    
45     #define NICKLEN NICKMAX + 1
46     #define NOTENAMELEN ((HANDLEN * 2) + 1)
47 guppy 1.3
48     #define LANGDIR "./language" /* language file directory */
49    
50 segfault 1.1 /* have to use a weird way to make the compiler error out cos not all
51     * compilers support #error or error */
52     #if !HAVE_VSPRINTF
53     #include "error_you_need_vsprintf_to_compile_eggdrop"
54     #endif
55    
56     #if HAVE_UNISTD_H
57     #include <unistd.h>
58     #endif
59    
60     #ifndef STATIC
61     #if (!defined(MODULES_OK) || !defined(HAVE_DLOPEN)) && !defined(HPUX_HACKS)
62     #include "you_can't_compile_with_module_support_on_this_system_try_make_static"
63     #endif
64     #endif
65    
66     #if !defined(STDC_HEADERS)
67     #include "you_need_to_upgrade_your_compiler_to_a_standard_c_one_mate!"
68     #endif
69    
70     #if (NICKMAX < 9) || (NICKMAX > 32)
71 arthur2 1.8 #include "invalid NICKMAX value"
72 segfault 1.1 #endif
73    
74     #if (HANDLEN < 9) || (HANDLEN > 32)
75     #include "invalid HANDLEN value"
76     #endif
77    
78     #if HANDLEN > NICKMAX
79     #include "HANDLEN MUST BE <= NICKMAX"
80     #endif
81    
82     /* almost every module needs some sort of time thingy, so... */
83     #if TIME_WITH_SYS_TIME
84     #include <sys/time.h>
85     #include <time.h>
86     #else
87     #if HAVE_SYS_TIME_H
88     #include <sys/time.h>
89     #else
90     #include <time.h>
91     #endif
92     #endif
93    
94     #if !HAVE_SRANDOM
95     #define srandom(x) srand(x)
96     #endif
97    
98     #if !HAVE_RANDOM
99     #define random() (rand()/16)
100     #endif
101    
102     #if !HAVE_SIGACTION /* old "weird signals" */
103     #define sigaction sigvec
104     #ifndef sa_handler
105     #define sa_handler sv_handler
106     #define sa_mask sv_mask
107     #define sa_flags sv_flags
108     #endif
109     #endif
110    
111     #if !HAVE_SIGEMPTYSET
112     /* and they probably won't have sigemptyset, dammit */
113     #define sigemptyset(x) ((*(int *)(x))=0)
114     #endif
115    
116     /* handy aliases for memory tracking and core dumps */
117    
118     #define nmalloc(x) n_malloc((x),__FILE__,__LINE__)
119     #define nrealloc(x,y) n_realloc((x),(y),__FILE__,__LINE__)
120     #define nfree(x) n_free((x),__FILE__,__LINE__)
121    
122     #define context { cx_ptr=((cx_ptr + 1) & 15); \
123     strcpy(cx_file[cx_ptr],__FILE__); \
124     cx_line[cx_ptr]=__LINE__; \
125     cx_note[cx_ptr][0] = 0; }
126     /* It's usefull to track variables too <cybah> */
127     #define contextnote(string) { cx_ptr=((cx_ptr + 1) & 15); \
128     strncpy(cx_file[cx_ptr],__FILE__,29); \
129     cx_file[cx_ptr][29] = 0; \
130     cx_line[cx_ptr]=__LINE__; \
131     strncpy(cx_note[cx_ptr],string,255); \
132     cx_note[cx_ptr][255] = 0; }
133 guppy 1.7 #define ASSERT(expr) { if (!(expr)) assert_failed (NULL, __FILE__, __LINE__); }
134    
135 segfault 1.1 /* move these here, makes more sense to me :) */
136     extern int cx_line[16];
137     extern char cx_file[16][30];
138     extern char cx_note[16][256];
139     extern int cx_ptr;
140    
141     #undef malloc
142     #undef free
143     #define malloc(x) dont_use_old_malloc(x)
144     #define free(x) dont_use_old_free(x)
145    
146     /* IP type */
147 arthur2 1.8 #if (SIZEOF_INT == 4)
148 segfault 1.1 typedef unsigned int IP;
149    
150     #else
151 arthur2 1.8 #if (SIZEOF_LONG == 4)
152 segfault 1.1 typedef unsigned long IP;
153    
154     #else
155     #include "cant/find/32bit/type"
156     #endif
157     #endif
158    
159     /* macro for simplifying patches */
160     #define PATCH(str) { \
161     char *p=strchr(egg_version,'+'); \
162     if (p==NULL) p=&egg_version[strlen(egg_version)]; \
163     sprintf(p,"+%s",str); \
164     egg_numver++; \
165     sprintf(&egg_xtra[strlen(egg_xtra)]," %s",str); \
166     }
167    
168     #define debug0(x) putlog(LOG_DEBUG,"*",x)
169     #define debug1(x,a1) putlog(LOG_DEBUG,"*",x,a1)
170     #define debug2(x,a1,a2) putlog(LOG_DEBUG,"*",x,a1,a2)
171     #define debug3(x,a1,a2,a3) putlog(LOG_DEBUG,"*",x,a1,a2,a3)
172     #define debug4(x,a1,a2,a3,a4) putlog(LOG_DEBUG,"*",x,a1,a2,a3,a4)
173    
174     /***********************************************************************/
175    
176     /* public structure for the listening port map */
177     struct portmap {
178     int realport;
179     int mappedto;
180     struct portmap *next;
181     };
182    
183     /* public structure of all the dcc connections */
184     struct dcc_table {
185     char *name;
186     int flags;
187     void (*eof) (int);
188     void (*activity) (int, char *, int);
189     int *timeout_val;
190     void (*timeout) ();
191     void (*display) (int, char *);
192     int (*expmem) (void *);
193     void (*kill) (int, void *);
194     void (*output) (int, char *, void *);
195     };
196    
197     struct userrec;
198    
199     struct dcc_t {
200     long sock; /* this should be a long to keep 64-bit machines sane */
201     IP addr;
202     unsigned int port;
203     struct userrec *user;
204     char nick[NICKLEN];
205     char host[UHOSTLEN + 1]; /* extra safety char ;) */
206     struct dcc_table *type;
207     time_t timeval; /* use for any timing stuff
208     * - this is used for timeout checking */
209     unsigned long status; /* A LOT of dcc types have status thingos, this
210     * makes it more avaliabe */
211     union {
212     struct chat_info *chat;
213     struct file_info *file;
214     struct edit_info *edit;
215     struct xfer_info *xfer;
216     struct bot_info *bot;
217     struct relay_info *relay;
218     struct script_info *script;
219     int ident_sock;
220     void *other;
221     } u; /* special use depending on type */
222     };
223    
224     struct chat_info {
225     char *away; /* non-NULL if user is away */
226     int msgs_per_sec; /* used to stop flooding */
227     int con_flags; /* with console: what to show */
228     int strip_flags; /* what codes to strip (b,r,u,c,a,g,*) */
229     char con_chan[81]; /* with console: what channel to view */
230     int channel; /* 0=party line, -1=off */
231     struct msgq *buffer; /* a buffer of outgoing lines (for .page cmd) */
232     int max_line; /* maximum lines at once */
233     int line_count; /* number of lines sent since last page */
234     int current_lines; /* number of lines total stored */
235     char *su_nick;
236     };
237    
238     struct file_info {
239     struct chat_info *chat;
240     char dir[161];
241     };
242    
243     struct xfer_info {
244     char filename[121];
245     char dir[121]; /* used when uploads go to the current dir */
246     unsigned long length;
247     unsigned long acked;
248     char buf[4]; /* you only need 5 bytes! */
249     unsigned char sofar; /* how much of the byte count received */
250     char from[NICKLEN]; /* [GET] user who offered the file */
251     FILE *f; /* pointer to file being sent/received */
252     };
253    
254     struct bot_info {
255     char version[121]; /* channel/version info */
256     char linker[NOTENAMELEN + 1]; /* who requested this link */
257     int numver;
258     int port; /* base port */
259     };
260    
261     struct relay_info {
262     struct chat_info *chat;
263     int sock;
264     int port;
265     int old_status;
266     };
267    
268     struct script_info {
269     struct dcc_table *type;
270     union {
271     struct chat_info *chat;
272     struct file_info *file;
273     void *other;
274     } u;
275     char command[121];
276     };
277    
278     /* flags about dcc types */
279     #define DCT_CHAT 0x00000001 /* this dcc type receives botnet chatter */
280     #define DCT_MASTER 0x00000002 /* received master chatter */
281     #define DCT_SHOWWHO 0x00000004 /* show the user in .who */
282     #define DCT_REMOTEWHO 0x00000008 /* show in remote who */
283     #define DCT_VALIDIDX 0x00000010 /* valid idx for outputting to in tcl */
284     #define DCT_SIMUL 0x00000020 /* can be tcl_simul'd */
285     #define DCT_CANBOOT 0x00000040 /* can be booted */
286     #define DCT_GETNOTES DCT_CHAT /* can receive notes */
287     #define DCT_FILES 0x00000080 /* gratuitous hack ;) */
288     #define DCT_FORKTYPE 0x00000100 /* a forking type */
289     #define DCT_BOT 0x00000200 /* a bot connection of some sort... */
290     #define DCT_FILETRAN 0x00000400 /* a file transfer of some sort */
291     #define DCT_FILESEND 0x00000800 /* a sending file transfer, getting = !this */
292     #define DCT_LISTEN 0x00001000 /* a listening port of some sort */
293    
294     /* for dcc chat & files: */
295     #define STAT_ECHO 1 /* echo commands back? */
296     #define STAT_DENY 2 /* bad username (ignore password & deny access) */
297     /*#define STAT_XFER 4 has 'x' flag on chat line */
298     #define STAT_CHAT 8 /* in file-system but may return */
299     #define STAT_TELNET 16 /* connected via telnet */
300     #define STAT_PARTY 32 /* only on party line via 'p' flag */
301     #define STAT_BOTONLY 64 /* telnet on bots-only connect */
302     #define STAT_USRONLY 128 /* telnet on users-only connect */
303     #define STAT_PAGE 256 /* page output to the user */
304    
305     /* for stripping out mIRC codes */
306     #define STRIP_COLOR 1 /* remove mIRC color codes */
307     #define STRIP_BOLD 2 /* remove bold codes */
308     #define STRIP_REV 4 /* remove reverse video codes */
309     #define STRIP_UNDER 8 /* remove underline codes */
310     #define STRIP_ANSI 16 /* remove ALL ansi codes */
311     #define STRIP_BELLS 32 /* remote ctrl-g's */
312     #define STRIP_ALL 63 /* remove every damn thing! */
313    
314     /* for dcc bot links: */
315     #define STAT_PINGED 0x01 /* waiting for ping to return */
316     #define STAT_SHARE 0x02 /* sharing user data with the bot */
317     #define STAT_CALLED 0x04 /* this bot called me */
318     #define STAT_OFFERED 0x08 /* offered her the user file */
319     #define STAT_SENDING 0x10 /* in the process of sending a user list */
320     #define STAT_GETTING 0x20 /* in the process of getting a user list */
321     #define STAT_WARNED 0x40 /* warned him about unleaflike behavior */
322     #define STAT_LEAF 0x80 /* this bot is a leaf only */
323     #define STAT_LINKING 0x100 /* the bot is currently going through the
324     * linking stage */
325     #define STAT_AGGRESSIVE 0x200 /* aggressively sharing with this bot */
326    
327     /* chan & global */
328     #define FLOOD_PRIVMSG 0
329     #define FLOOD_NOTICE 1
330     #define FLOOD_CTCP 2
331     #define FLOOD_NICK 3
332     #define FLOOD_JOIN 4
333     #define FLOOD_KICK 5
334     #define FLOOD_DEOP 6
335     #define FLOOD_CHAN_MAX 7
336     #define FLOOD_GLOBAL_MAX 3
337    
338     /* for local console: */
339     #define STDIN 0
340     #define STDOUT 1
341     #define STDERR 2
342    
343     /* structure for internal logs */
344     typedef struct {
345     char *filename;
346     unsigned int mask; /* what to send to this log */
347     char *chname; /* which channel */
348     char szLast[MAX_LOG_LINE + 1]; /* for 'Last message repeated n times'
349     * stuff in misc.c/putlog() <cybah> */
350     int Repeats; /* number of times szLast has been repeated */
351 guppy 1.6 unsigned int flags; /* other flags <rtc> */
352 segfault 1.1 FILE *f; /* existing file */
353     } log_t;
354    
355     /* logfile display flags */
356     #define LOG_MSGS 0x000001 /* m msgs/notice/ctcps */
357     #define LOG_PUBLIC 0x000002 /* p public msg/notice/ctcps */
358     #define LOG_JOIN 0x000004 /* j channel joins/parts/etc */
359     #define LOG_MODES 0x000008 /* k mode changes/kicks/bans */
360     #define LOG_CMDS 0x000010 /* c user dcc or msg commands */
361     #define LOG_MISC 0x000020 /* o other misc bot things */
362     #define LOG_BOTS 0x000040 /* b bot notices */
363     #define LOG_RAW 0x000080 /* r raw server stuff coming in */
364     #define LOG_FILES 0x000100 /* x file transfer commands and stats */
365     #define LOG_LEV1 0x000200 /* 1 user log level */
366     #define LOG_LEV2 0x000400 /* 2 user log level */
367     #define LOG_LEV3 0x000800 /* 3 user log level */
368     #define LOG_LEV4 0x001000 /* 4 user log level */
369     #define LOG_LEV5 0x002000 /* 5 user log level */
370     #define LOG_LEV6 0x004000 /* 6 user log level */
371     #define LOG_LEV7 0x008000 /* 7 user log level */
372     #define LOG_LEV8 0x010000 /* 8 user log level */
373     #define LOG_SERV 0x020000 /* s server information */
374     #define LOG_DEBUG 0x040000 /* d debug */
375     #define LOG_WALL 0x080000 /* w wallops */
376     #define LOG_SRVOUT 0x100000 /* v server output */
377     #define LOG_BOTNET 0x200000 /* t botnet traffic */
378     #define LOG_BOTSHARE 0x400000 /* h share traffic */
379     #define LOG_ALL 0x7fffff /* (dump to all logfiles) */
380 guppy 1.6 /* internal logfile flags */
381     #define LF_EXPIRING 0x000001 /* Logfile will be closed soon */
382 segfault 1.1
383     #define FILEDB_HIDE 1
384     #define FILEDB_UNHIDE 2
385     #define FILEDB_SHARE 3
386     #define FILEDB_UNSHARE 4
387    
388     /* socket flags: */
389     #define SOCK_UNUSED 0x01 /* empty socket */
390     #define SOCK_BINARY 0x02 /* do not buffer input */
391     #define SOCK_LISTEN 0x04 /* listening port */
392     #define SOCK_CONNECT 0x08 /* connection attempt */
393     #define SOCK_NONSOCK 0x10 /* used for file i/o on debug */
394     #define SOCK_STRONGCONN 0x20 /* don't report success until sure */
395     #define SOCK_EOFD 0x40 /* it EOF'd recently during a write */
396 poptix 1.2 #define SOCK_PROXYWAIT 0x80 /* waiting for SOCKS traversal */
397 segfault 1.1
398     /* fake idx's for dprintf - these should be ridiculously large +ve nums */
399     #define DP_STDOUT 0x7FF1
400     #define DP_LOG 0x7FF2
401     #define DP_SERVER 0x7FF3
402     #define DP_HELP 0x7FF4
403     #define DP_STDERR 0x7FF5
404     #define DP_MODE 0x7FF6
405    
406     #define NORMAL 0
407     #define QUICK 1
408    
409     /* return codes for add_note */
410     #define NOTE_ERROR 0 /* error */
411     #define NOTE_OK 1 /* success */
412     #define NOTE_STORED 2 /* not online; stored */
413     #define NOTE_FULL 3 /* too many notes stored */
414     #define NOTE_TCL 4 /* tcl binding caught it */
415     #define NOTE_AWAY 5 /* away; stored */
416     #define NOTE_FWD 6 /* away; forwarded */
417 poptix 1.4 #define NOTE_REJECT 7 /* ignore mask matched */
418 segfault 1.1
419     #define STR_PROTECT 2
420     #define STR_DIR 1
421    
422     #define HELP_DCC 1
423     #define HELP_TEXT 2
424     #define HELP_IRC 16
425    
426     /* it's used in so many places, let's put it here */
427     typedef int (*Function) ();
428    
429     /* this is used by the net module to keep track of sockets and what's
430     * queued on them */
431     typedef struct {
432     int sock;
433     char flags;
434     char *inbuf;
435     char *outbuf;
436     unsigned long outbuflen; /* outbuf could be binary data */
437     } sock_list;
438    
439     #endif

webmaster@eggheads.org
ViewVC Help
Powered by ViewVC 1.1.23