energymech/src/global.h

460 lines
12 KiB
C
Raw Normal View History

2014-03-08 19:56:21 -05:00
/*
EnergyMech, IRC bot software
2018-03-09 03:51:03 +01:00
Copyright (c) 1997-2018 proton
2014-03-08 19:56:21 -05:00
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 2 of the License, 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.
*/
#ifndef GLOBAL_H
#define GLOBAL_H 1
#ifdef MAIN_C
#define MDEF(x) = x
#define BEG LS
#else /* MAIN_C */
#define MDEF(x)
#define BEG extern
#endif /* MAIN_C */
/*
*
*/
#define DEFAULTCMDCHAR '-'
#define MECHUSERLOGIN "v3.energymech.net"
2018-03-09 01:29:18 +01:00
BEG const char VERSION[] MDEF("3.0.99p4");
BEG const char SRCDATE[] MDEF("March 13th, 2018");
2014-03-08 19:56:21 -05:00
#ifdef __CYGWIN__
BEG const char BOTCLASS[] MDEF("WinMech");
#else /* ! CYGWIN */
BEG const char BOTCLASS[] MDEF("EnergyMech");
#endif /* CYGWIN */
BEG const char BOTLOGIN[] MDEF("emech");
BEG const char NULLSTR[] MDEF("<NULL>");
BEG const char ERR_CHAN[] MDEF("I'm not on %s");
BEG const char ERR_FILEOPEN[] MDEF("Couldn't open the file %s");
BEG const char ERR_INIT[] MDEF("init: Warning:");
BEG const char ERR_NICK[] MDEF("Invalid nickname: %s");
BEG const char ERR_NOCHANNELS[] MDEF("I'm not active on any channels");
BEG const char ERR_NOTOPPED[] MDEF("I'm not opped on %s");
BEG const char ERR_UNKNOWN_COMMAND[] MDEF("Squeeze me?");
BEG const char __SPYSTR_RAWIRC[] MDEF("rawirc");
BEG const char __SPYSTR_MESSAGE[] MDEF("message");
BEG const char __SPYSTR_STATUS[] MDEF("status");
BEG const char __SPYSTR_BOTNET[] MDEF("botnet");
#define SPYSTR_RAWIRC __SPYSTR_RAWIRC
#define SPYSTR_MESSAGE __SPYSTR_MESSAGE
#define SPYSTR_STATUS __SPYSTR_STATUS
#define SPYSTR_BOTNET __SPYSTR_BOTNET
#ifdef URLCAPTURE
BEG const char __SPYSTR_URL[] MDEF("url");
#define SPYSTR_URL __SPYSTR_URL
#endif /* URLCAPTURE */
2014-03-08 19:56:21 -05:00
BEG const char STR_MECHRESET[] MDEF("MECHRESET=");
BEG Mech *botlist MDEF(NULL);
BEG Mech *current;
BEG char *executable;
BEG char *configfile MDEF(CFGFILE);
BEG char *mechresetenv MDEF(NULL);
BEG time_t uptime MDEF(0);
BEG int do_exec MDEF(FALSE); /* call mech_exec on mechexit */
BEG int makecore MDEF(FALSE);
BEG int respawn MDEF(0);
BEG int sigmaster MDEF(0);
BEG int ctimeout MDEF(30); /* proc var */
BEG ino_t parent_inode;
BEG KillSock *killsocks MDEF(NULL);
BEG Server *serverlist MDEF(NULL);
BEG ServerGroup *servergrouplist MDEF(NULL);
BEG ServerGroup *currentservergroup MDEF(NULL);
BEG int servergroupid MDEF(0);
BEG int serverident MDEF(1);
BEG char CurrentNick[NUHLEN];
BEG Client *CurrentDCC MDEF(NULL);
BEG Chan *CurrentChan MDEF(NULL);
BEG User *CurrentUser MDEF(NULL);
BEG Shit *CurrentShit MDEF(NULL);
BEG const OnMsg *CurrentCmd MDEF(NULL);
BEG User *cfgUser MDEF(NULL);
BEG User __internal_users[2];
#define CoreUser (__internal_users[0])
#define LocalBot (__internal_users[1])
/*
* generic output buffer, can be used as buffer in any `leaf' function
* (functions that do not call any other non-trivial functions)
*/
BEG char gsockdata[MAXLEN];
BEG char nick_buf[MAXHOSTLEN];
BEG char nuh_buf[NUHLEN];
/*
* select() stuff.
*/
BEG fd_set read_fds;
BEG fd_set write_fds;
BEG int hisock;
BEG int short_tv;
/*
* current UNIX timestamp
*/
BEG time_t now;
/*
* defined features
*/
#ifdef ALIAS
BEG Alias *aliaslist MDEF(NULL);
#endif /* ALIAS */
#ifdef BOTNET
BEG const char UNKNOWNATUNKNOWN[] MDEF("unknown@unknown");
#define UNKNOWN (&UNKNOWNATUNKNOWN[8])
BEG BotNet *botnetlist MDEF(NULL);
BEG NetCfg *netcfglist MDEF(NULL);
BEG char *linkpass MDEF(NULL); /* proc var */
BEG int linkport MDEF(0); /* proc var */
BEG int autolink MDEF(0); /* proc var */
BEG time_t last_autolink MDEF(0);
BEG NetCfg *autolink_cfg MDEF(NULL);
BEG int global_tick MDEF(0);
#endif /* BOTNET */
#ifdef BOUNCE
BEG ircLink *bnclist MDEF(NULL);
BEG int bounce_sock MDEF(-1);
BEG int bounce_port MDEF(0); /* proc var */
#endif /* BOUNCE */
#ifdef CTCP
BEG time_t ctcp_slot[CTCP_SLOTS];
#endif /* CTCP */
#ifdef DEBUG
BEG char debugbuf[MAXLEN];
BEG char *debugfile MDEF(NULL);
BEG int dodebug MDEF(FALSE);
BEG int debug_fd MDEF(-1);
BEG int debug_on_exit MDEF(FALSE);
BEG aMEA *mrrec;
BEG void *mallocdoer;
#endif /* DEBUG */
#ifdef NOTE
BEG Note *notelist MDEF(NULL);
#endif /* NOTE */
#ifdef RAWDNS
2014-03-08 19:56:21 -05:00
BEG dnsList *dnslist MDEF(NULL);
BEG dnsAuthority *dnsroot MDEF(NULL);
BEG struct in_addr ia_ns[MAX_NAMESERVERS];
BEG struct in_addr ia_default;
2014-03-08 19:56:21 -05:00
#ifdef SESSION
BEG Strp *dnsrootfiles MDEF(NULL);
#endif /* SESSION */
#endif /* RAWDNS */
2014-03-08 19:56:21 -05:00
#ifdef REDIRECT
LS struct
{
char *to;
int method;
#ifdef BOTNET
int guid;
#endif /* BOTNET */
} redirect;
#endif /* REDIRECT */
#ifdef SCRIPTING
BEG Hook *hooklist MDEF(NULL);
#endif /* SCRIPTING */
2014-03-08 19:56:21 -05:00
#ifdef SEEN
BEG char *seenfile MDEF(NULL); /* proc var */
BEG Seen *seenlist MDEF(NULL);
#endif /* SEEN */
#ifdef TRIVIA
BEG int triv_qdelay MDEF(30); /* proc var */
BEG char *triv_qfile MDEF(NULL); /* proc var */
BEG char triv_qchar MDEF('*'); /* proc var */
BEG TrivScore *scorelist MDEF(NULL);
#endif /* TRIVIA */
#ifdef UPTIME
BEG int uptimeport MDEF(9969); /* proc var */
BEG char *uptimehost MDEF(NULL); /* proc var */
BEG char *uptimenick MDEF(NULL); /* proc var */
BEG int uptimesock;
BEG ulong uptimeip MDEF((ulong)-1);
BEG ulong uptimecookie;
BEG ulong uptimeregnr MDEF(0);
BEG time_t uptimelast MDEF(0);
BEG const char *defaultuptimehost MDEF("uptime.energymech.net");
2014-03-08 19:56:21 -05:00
#endif /* UPTIME */
#ifdef URLCAPTURE
BEG int urlhistmax MDEF(20); /* proc var */
BEG Strp *urlhistory MDEF(NULL);
#endif /* URLCAPTURE */
2014-03-08 19:56:21 -05:00
#ifdef WEB
BEG int websock MDEF(-1);
BEG int webport MDEF(0);
#endif /* WEB */
#ifndef I_HAVE_A_LEGITIMATE_NEED_FOR_MORE_THAN_4_BOTS
BEG int spawning_lamer MDEF(0);
#endif /* I_HAVE_A_LEGITIMATE_NEED_FOR_MORE_THAN_4_BOTS */
/*
* attrtab defines
*/
#define NUM 0x01
#define NICK 0x02
#define FIRST 0x04
#define CRLF 0x08
#define FNICK (NICK|FIRST)
#define NNICK (NICK|NUM)
#ifdef MAIN_C
/*
* tolowertab blatantly ripped from ircu2.9.32
*/
LS const uchar tolowertab[256] =
{
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
' ', '!', '"', '#', '$', '%', '&', 0x27,
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
};
/*
* be wary, this is not a normal upper-to-lower table...
*/
LS const uchar nickcmptab[256] =
{
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
' ', 0x00, '"', '#', '$', '%', '&', 0x27, /* <-- observe! the '!' changed to 0x00 */
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
};
LS const uchar attrtab[256] =
{
0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 - 0x07 */
0, 0, CRLF, 0, 0, CRLF, 0, 0, /* 0x08 - 0x0F */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 - 0x17 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x18 - 0x1F */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 - 0x27 */
0, 0, 0, 0, 0, NICK, 0, 0, /* 0x28 - 0x2F */
NNICK, NNICK, NNICK, NNICK, NNICK, NNICK, NNICK, NNICK, /* 0x30 - 0x37 */
NNICK, NNICK, 0, 0, 0, 0, 0, 0, /* 0x38 - 0x3F */
0, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, /* 0x40 - 0x47 */
FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, /* 0x48 - 0x4F */
FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, /* 0x50 - 0x57 */
FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, /* 0x58 - 0x5F */
FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, /* 0x60 - 0x67 */
FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, /* 0x68 - 0x6F */
FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, /* 0x70 - 0x77 */
FNICK, FNICK, FNICK, FNICK, FNICK, FNICK, 0, 0, /* 0x78 - 0x7F */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x80 - 0x87 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x88 - 0x8F */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x90 - 0x97 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x98 - 0x9F */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xA0 - 0xA7 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xA8 - 0xAF */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xB0 - 0xB7 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xB8 - 0xBF */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xC0 - 0xC7 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xC8 - 0xCF */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xD0 - 0xD7 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xD8 - 0xDF */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xE0 - 0xE7 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xE8 - 0xEF */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xF0 - 0xF7 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0xF8 - 0xFF */
};
/*
* user struct for the core client
*/
2018-03-12 04:58:44 +01:00
LS const Strp CMA =
2014-03-08 19:56:21 -05:00
{
NULL,
"*"
};
/*
* client struct for the core client
*/
LS ShortClient CoreClient =
{
NULL, /* next */
(User*)&CoreUser, /* user */
-1, /* socket */
0, /* flags */
0, /* inputcount */
0 /* lasttime */
};
LS ShortChan CoreChan =
{
NULL,
NULL
};
typedef struct coreServerGroup
{
ServerGroup *next;
int servergroup;
char name[8];
} coreServerGroup;
LS coreServerGroup defaultServerGroup =
{
NULL, /* next */
0, /* servergroup */
"default" /* name */
};
#else /* MAIN_C */
extern const uchar tolowertab[];
extern const uchar nickcmptab[];
extern const uchar attrtab[];
extern const User xxCoreUser;
extern const User xxLocalBot;
extern ShortClient CoreClient;
extern ShortChan CoreChan;
extern ServerGroup defaultServerGroup;
#endif /* MAIN_C */
#endif /* GLOBAL_H */