summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/Makefile20
-rw-r--r--include/commands.h34
-rw-r--r--include/config.h76
-rw-r--r--include/datafiles.h71
-rw-r--r--include/defs.h40
-rw-r--r--include/depricated.h127
-rw-r--r--include/encrypt.h22
-rw-r--r--include/events.h64
-rw-r--r--include/extern.h1406
-rw-r--r--include/makefile.win3225
-rw-r--r--include/messages.h23
-rw-r--r--include/module.h16
-rw-r--r--include/modules.h383
-rw-r--r--include/pseudo.h20
-rw-r--r--include/resource.h20
-rw-r--r--include/services.h1389
-rw-r--r--include/slist.h50
-rw-r--r--include/sockets.h47
-rw-r--r--include/sysconf.h.in227
-rw-r--r--include/sysconf.h.win3250
-rw-r--r--include/timeout.h50
-rw-r--r--include/version.sh86
-rw-r--r--include/version.sh.c224
23 files changed, 4470 insertions, 0 deletions
diff --git a/include/Makefile b/include/Makefile
new file mode 100644
index 000000000..b5641c71b
--- /dev/null
+++ b/include/Makefile
@@ -0,0 +1,20 @@
+
+all: services.h extern.h pseudo.h version.h
+
+version.h: Makefile version.sh services.h pseudo.h messages.h $(SRCS)
+ sh version.sh
+
+services.h: sysconf.h config.h extern.h
+ touch $@
+
+extern.h: slist.h
+ touch $@
+
+pseudo.h: commands.h timeout.h encrypt.h datafiles.h slist.h
+ touch $@
+
+clean:
+ (rm -f language.h)
+
+distclean: clean
+ (rm -f sysconf.h version.h)
diff --git a/include/commands.h b/include/commands.h
new file mode 100644
index 000000000..bff95eb16
--- /dev/null
+++ b/include/commands.h
@@ -0,0 +1,34 @@
+/* Declarations for command data.
+ *
+ * (C) 2003-2008 Anope Team
+ * Contact us at info@anope.org
+ *
+ * Please read COPYING and README for furhter details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ * $Id$
+ *
+ */
+
+ #include "modules.h"
+
+/*************************************************************************/
+
+/* Routines for looking up commands. Command lists are arrays that must be
+ * terminated with a NULL name.
+ */
+
+extern MDE Command *lookup_cmd(Command *list, char *name);
+extern void run_cmd(char *service, User *u, Command *list,
+ char *name);
+extern void help_cmd(char *service, User *u, Command *list,
+ char *name);
+extern void do_run_cmd(char *service, User * u, Command *c,const char *cmd);
+extern MDE void do_help_limited(char *service, User * u, Command * c);
+extern void do_help_cmd(char *service, User * u, Command *c,const char *cmd);
+extern MDE void mod_help_cmd(char *service, User *u, CommandHash *cmdTable[],const char *cmd);
+extern MDE void mod_run_cmd(char *service, User *u, CommandHash *cmdTable[],const char *cmd);
+
+/*************************************************************************/
diff --git a/include/config.h b/include/config.h
new file mode 100644
index 000000000..648205e7c
--- /dev/null
+++ b/include/config.h
@@ -0,0 +1,76 @@
+/* Services configuration.
+ *
+ * (C) 2003-2008 Anope Team
+ * Contact us at info@anope.org
+ *
+ * Please read COPYING and README for furhter details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ * $Id$
+ *
+ */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+/* Note that most of the options which used to be here have been moved to
+ * services.conf. */
+
+/*************************************************************************/
+
+/******* General configuration *******/
+
+/* Name of configuration file (in Services directory) */
+#define SERVICES_CONF "services.conf"
+
+/* Name of log file (in Services directory) */
+#define LOG_FILENAME "services.log"
+
+/* Maximum amount of data from/to the network to buffer (bytes). */
+#define NET_BUFSIZE 65536
+
+/******* OperServ configuration *******/
+
+/* Define this to enable OperServ's svs commands (superadmin only). */
+ #define USE_OSSVS
+
+/* Define this to enable OperServ's debugging commands (Services root
+ * only). These commands are undocumented; "use the source, Luke!" */
+/* #define DEBUG_COMMANDS */
+
+/******************* END OF USER-CONFIGURABLE SECTION ********************/
+
+/* Size of input buffer (note: this is different from BUFSIZ)
+ * This must be big enough to hold at least one full IRC message, or messy
+ * things will happen. */
+#define BUFSIZE 1024
+
+/* Extra warning: If you change CHANMAX, your ChanServ database will be
+ * unusable.
+ */
+
+/* Maximum length of a channel name, including the trailing null. Any
+ * channels with a length longer than (CHANMAX-1) including the leading #
+ * will not be usable with ChanServ. */
+#define CHANMAX 64
+
+/* Maximum length of a nickname, including the trailing null. This MUST be
+ * at least one greater than the maximum allowable nickname length on your
+ * network, or people will run into problems using Services! The default
+ * (32) works with all servers I know of. */
+#define NICKMAX 32
+
+/* Maximum length of a password */
+#define PASSMAX 32
+
+/* Maximum length of a username */
+#define USERMAX 10
+
+/* Maximum length of a domain */
+#define HOSTMAX 64
+
+/**************************************************************************/
+
+#endif /* CONFIG_H */
diff --git a/include/datafiles.h b/include/datafiles.h
new file mode 100644
index 000000000..71f269252
--- /dev/null
+++ b/include/datafiles.h
@@ -0,0 +1,71 @@
+/* Database file descriptor structure and file handling routine prototypes.
+ *
+ * (C) 2003-2008 Anope Team
+ * Contact us at info@anope.org
+ *
+ * Please read COPYING and README for furhter details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ * $Id$
+ *
+ */
+
+#ifndef DATAFILES_H
+#define DATAFILES_H
+
+#ifndef _WIN32
+#include <sys/param.h>
+#endif
+
+/*************************************************************************/
+
+typedef struct dbFILE_ dbFILE;
+struct dbFILE_ {
+ int mode; /* 'r' for reading, 'w' for writing */
+ FILE *fp; /* The normal file descriptor */
+ FILE *backupfp; /* Open file pointer to a backup copy of
+ * the database file (if non-NULL) */
+ char filename[MAXPATHLEN]; /* Name of the database file */
+ char backupname[MAXPATHLEN]; /* Name of the backup file */
+};
+
+/*************************************************************************/
+
+/* Prototypes and macros: */
+
+E void check_file_version(dbFILE *f);
+E int get_file_version(dbFILE *f);
+E int write_file_version(dbFILE *f, uint32 version);
+
+E dbFILE *open_db(const char *service, const char *filename, const char *mode, uint32 version);
+E void restore_db(dbFILE *f); /* Restore to state before open_db() */
+E void close_db(dbFILE *f);
+E void backup_databases(void);
+
+#define read_db(f,buf,len) (fread((buf),1,(len),(f)->fp))
+#define write_db(f,buf,len) (fwrite((buf),1,(len),(f)->fp))
+#define getc_db(f) (fgetc((f)->fp))
+
+E int read_int16(uint16 *ret, dbFILE *f);
+E int write_int16(uint16 val, dbFILE *f);
+E int read_int32(uint32 *ret, dbFILE *f);
+E int write_int32(uint32 val, dbFILE *f);
+E int read_ptr(void **ret, dbFILE *f);
+E int write_ptr(const void *ptr, dbFILE *f);
+E int read_string(char **ret, dbFILE *f);
+E int write_string(const char *s, dbFILE *f);
+
+#define read_int8(ret,f) ((*(ret)=fgetc((f)->fp))==EOF ? -1 : 0)
+#define write_int8(val,f) (fputc((val),(f)->fp)==EOF ? -1 : 0)
+#define read_buffer(buf,f) (read_db((f),(buf),sizeof(buf)) == sizeof(buf))
+#define write_buffer(buf,f) (write_db((f),(buf),sizeof(buf)) == sizeof(buf))
+#define read_buflen(buf,len,f) (read_db((f),(buf),(len)) == (len))
+#define write_buflen(buf,len,f) (write_db((f),(buf),(len)) == (len))
+#define read_variable(var,f) (read_db((f),&(var),sizeof(var)) == sizeof(var))
+#define write_variable(var,f) (write_db((f),&(var),sizeof(var)) == sizeof(var))
+
+/*************************************************************************/
+
+#endif /* DATAFILES_H */
diff --git a/include/defs.h b/include/defs.h
new file mode 100644
index 000000000..78371946d
--- /dev/null
+++ b/include/defs.h
@@ -0,0 +1,40 @@
+/* Set default values for any constants that should be in include files but
+ *
+ * (C) 2003-2008 Anope Team
+ * Contact us at info@anope.org
+ *
+ * Please read COPYING and README for furhter details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ *
+ * $Id$
+ *
+ */
+
+/*************************************************************************/
+
+#ifndef NAME_MAX
+# define NAME_MAX 255
+#endif
+
+#ifndef BUFSIZ
+# define BUFSIZ 256
+#else
+# if BUFSIZ < 256
+# define BUFSIZ 256
+# endif
+#endif
+
+/* Length of an array: */
+#define lenof(a) (sizeof(a) / sizeof(*(a)))
+
+/* Telling compilers about printf()-like functions: */
+#ifdef __GNUC__
+# define FORMAT(type,fmt,start) __attribute__((format(type,fmt,start)))
+#else
+# define FORMAT(type,fmt,start)
+#endif
+
+/*************************************************************************/
diff --git a/include/depricated.h b/include/depricated.h
new file mode 100644
index 000000000..0d2f7073d
--- /dev/null
+++ b/include/depricated.h
@@ -0,0 +1,127 @@
+/* depricated.h
+ *
+ * (C) 2003-2008 Anope Team
+ * Contact us at info@anope.org
+ *
+ * Please read COPYING and README for furhter details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ *
+ */
+
+/*
+ All of these functions were replaced in 1.7.6, you should move your modules
+ to use the new functions
+*/
+
+#define change_user_mode(u, modes, arg) common_svsmode(u, modes, arg)
+#define GetIdent(x) common_get_vident(x)
+#define GetHost(x) common_get_vhost(x)
+
+#define NEWNICK(nick,user,host,real,modes,qline) \
+ anope_cmd_bot_nick(nick,user,host,real,modes)
+
+#define s_akill(user, host, who, when, expires, reason) \
+ anope_cmd_akill(user, host, who, when, expires, reason)
+
+#define set_umode(user, ac, av) anope_set_umode(user, ac, av)
+
+#define s_svsnoop(server, set) anope_cmd_svsnoop(server, set)
+
+#define s_sqline(mask, reason) anope_cmd_sqline(mask, reason)
+
+#define s_sgline(mask, reason) anope_cmd_sgline(mask, reason)
+#define s_szline(mask, reason) anope_cmd_szline(mask, reason)
+#define s_unsgline(mask) anope_cmd_unsgline(mask)
+#define s_unsqline(mask) anope_cmd_unsqline(mask)
+#define s_unszline(mask) anope_cmd_unszline(mask)
+
+#define s_rakill(user, host) anope_cmd_remove_akill(user, host)
+
+
+# define NICKSERV_MODE ircd->nickservmode
+# define CHANSERV_MODE ircd->chanservmode
+# define HOSTSERV_MODE ircd->hostservmode
+# define MEMOSERV_MODE ircd->memoservmode
+# define BOTSERV_MODE ircd->botservmode
+# define HELPSERV_MODE ircd->helpservmode
+# define OPERSERV_MODE ircd->oprservmode
+# define DEVNULL_MODE ircd->devnullmode
+# define GLOBAL_MODE ircd->globalmode
+# define NICKSERV_ALIAS_MODE ircd->nickservaliasmode
+# define CHANSERV_ALIAS_MODE ircd->chanservaliasmode
+# define MEMOSERV_ALIAS_MODE ircd->memoservaliasmode
+# define BOTSERV_ALIAS_MODE ircd->botservaliasmode
+# define HELPSERV_ALIAS_MODE ircd->helpservaliasmode
+# define OPERSERV_ALIAS_MODE ircd->operservaliasmode
+# define DEVNULL_ALIAS_MODE ircd->devnullaliasmode
+# define GLOBAL_ALIAS_MODE ircd->globalaliasmode
+# define HOSTSERV_ALIAS_MODE ircd->hostservaliasmode
+# define BOTSERV_BOTS_MODE ircd->botserv_bot_mode
+#define CHAN_MAX_SYMBOL ircd->max_symbols
+#define MODESTOREMOVE ircd->modestoremove
+
+#ifdef IRC_HYBRID
+# define HAS_HALFOP
+# define HAS_EXCEPT
+#endif
+
+#ifdef IRC_VIAGRA
+# define HAS_HALFOP
+# define HAS_VHOST
+# define HAS_VIDENT
+# define HAS_EXCEPT
+#endif
+
+#ifdef IRC_BAHAMUT
+# define HAS_NICKIP
+# define HAS_EXCEPT
+# define HAS_SVSHOLD
+#endif
+
+#ifdef IRC_RAGE2
+# define HAS_HALFOP
+# define HAS_EXCEPT
+# define HAS_VHOST
+# define HAS_NICKVHOST
+#endif
+
+#ifdef IRC_PTLINK
+# define HAS_NICKVHOST
+# define HAS_VHOST
+# define HAS_FMODE
+# define HAS_EXCEPT
+#endif
+
+#ifdef IRC_ULTIMATE2
+# define IRC_ULTIMATE /* gotta do this for old mods */
+# define HAS_FMODE
+# define HAS_HALFOP
+# define HAS_LMODE
+# define HAS_VHOST
+# define HAS_VIDENT
+# define HAS_EXCEPT
+#endif
+
+#if defined(IRC_UNREAL31) || defined(IRC_UNREAL32)
+# define IRC_UNREAL /* gotta do this for old mods */
+# define HAS_FMODE
+# define HAS_HALFOP
+# define HAS_LMODE
+# define HAS_NICKVHOST
+# define HAS_VHOST
+# define HAS_VIDENT
+# define HAS_EXCEPT
+#endif
+
+#ifdef IRC_ULTIMATE3
+# define HAS_HALFOP
+# define HAS_VHOST
+# define HAS_NICKVHOST
+# define HAS_VIDENT
+# define HAS_EXCEPT
+#endif
+
+
diff --git a/include/encrypt.h b/include/encrypt.h
new file mode 100644
index 000000000..7ac3d884a
--- /dev/null
+++ b/include/encrypt.h
@@ -0,0 +1,22 @@
+/* Include file for high-level encryption routines.
+ *
+ * (C) 2003-2008 Anope Team
+ * Contact us at info@anope.org
+ *
+ * Please read COPYING and README for furhter details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ * $Id$
+ *
+ */
+
+typedef struct encryption_ {
+ int (*encrypt)(const char *src, int len, char *dest, int size);
+ int (*encrypt_in_place)(char *buf, int size);
+ int (*encrypt_check_len)(int passlen, int bufsize);
+ int (*decrypt)(const char *src, char *dest, int size);
+ int (*check_password)(const char *plaintext, const char *password);
+} Encryption;
+
diff --git a/include/events.h b/include/events.h
new file mode 100644
index 000000000..77ec0bf8e
--- /dev/null
+++ b/include/events.h
@@ -0,0 +1,64 @@
+/* Prototypes and external variable declarations.
+ *
+ * (C) 2003-2008 Anope Team
+ * Contact us at info@anope.org
+ *
+ * Please read COPYING and README for furhter details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ * $Id$
+ *
+ */
+
+#define EVENT_START "start"
+#define EVENT_STOP "stop"
+
+#define EVENT_DB_SAVING "db_saving"
+#define EVENT_DB_BACKUP "db_backup"
+#define EVENT_NEWNICK "newnick"
+#define EVENT_BOT_UNASSIGN "bot_unassign"
+#define EVENT_BOT_JOIN "bot_join"
+#define EVENT_BOT_CREATE "bot_create"
+#define EVENT_BOT_CHANGE "bot_change"
+#define EVENT_BOT_FANTASY "bot_command"
+#define EVENT_BOT_FANTASY_NO_ACCESS "bot_command_no_access"
+#define EVENT_BOT_DEL "bot_del"
+#define EVENT_BOT_ASSIGN "bot_assign"
+#define EVENT_BOT_KICK "bot_kick"
+#define EVENT_BOT_BAN "bot_ban"
+#define EVENT_TOPIC_UPDATED "chan_topic_updated"
+#define EVENT_CHAN_EXPIRE "chan_expire"
+#define EVENT_CHAN_REGISTERED "chan_registered"
+#define EVENT_CHAN_DROP "chan_dropped"
+#define EVENT_CHAN_FORBIDDEN "chan_forbidden"
+#define EVENT_CHAN_SUSPENDED "chan_suspended"
+#define EVENT_CHAN_UNSUSPEND "chan_unsuspend"
+#define EVENT_CONNECT "connect"
+#define EVENT_DB_EXPIRE "db_expire"
+#define EVENT_RESTART "restart"
+#define EVENT_RELOAD "reload"
+#define EVENT_SHUTDOWN "shutdown"
+#define EVENT_SIGNAL "signal"
+#define EVENT_NICK_REGISTERED "nick_registered"
+#define EVENT_NICK_DROPPED "nick_dropped"
+#define EVENT_NICK_FORBIDDEN "nick_forbidden"
+#define EVENT_NICK_EXPIRE "nick_expire"
+#define EVENT_CHANGE_NICK "change_nick"
+#define EVENT_USER_LOGOFF "user_logoff"
+#define EVENT_GROUP "nick_group"
+#define EVENT_NICK_IDENTIFY "nick_id"
+#define EVENT_SERVER_SQUIT "server_squit"
+#define EVENT_SERVER_CONNECT "server_connect"
+#define EVENT_DEFCON_LEVEL "defcon_level"
+#define EVENT_NICK_SUSPENDED "nick_suspended"
+#define EVENT_NICK_UNSUSPEND "nick_unsuspend"
+#define EVENT_JOIN_CHANNEL "join_channel"
+#define EVENT_PART_CHANNEL "part_channel"
+#define EVENT_ACCESS_ADD "access_add"
+#define EVENT_ACCESS_CHANGE "access_change"
+#define EVENT_ACCESS_DEL "access_del"
+#define EVENT_ACCESS_CLEAR "access_clear"
+#define EVENT_NICK_LOGOUT "nick_logout"
+#define EVENT_CHAN_KICK "chan_kick"
diff --git a/include/extern.h b/include/extern.h
new file mode 100644
index 000000000..89e03689b
--- /dev/null
+++ b/include/extern.h
@@ -0,0 +1,1406 @@
+/* Prototypes and external variable declarations.
+ *
+ * (C) 2003-2008 Anope Team
+ * Contact us at info@anope.org
+ *
+ * Please read COPYING and README for furhter details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ * $Id$
+ *
+ */
+
+#ifndef EXTERN_H
+#define EXTERN_H
+
+#ifndef _WIN32
+#define E extern
+#define EI extern
+#else
+#ifndef MODULE_COMPILE
+#define E extern __declspec(dllexport)
+#define EI extern __declspec(dllimport)
+#else
+#define E extern __declspec(dllimport)
+#define EI extern __declspec(dllexport)
+#endif
+#endif
+
+#include "slist.h"
+
+E void ModuleRunTimeDirCleanUp(void);
+
+
+E char *uplink;
+
+/* IRC Variables */
+
+E IRCDVar *ircd;
+E IRCDCAPAB *ircdcap;
+E char *flood_mode_char_set;
+E char *flood_mode_char_remove;
+E int UseTSMODE; /* hack to get around bahamut clones that don't send TSMODE */
+EI unsigned long umodes[128];
+E char csmodes[128];
+E CMMode cmmodes[128];
+E CBMode cbmodes[128];
+E CBModeInfo *cbmodeinfos;
+E CUMode cumodes[128];
+E char *IRCDModule;
+E IRCDProto ircdproto;
+
+/**** actions.c ****/
+
+E void kill_user(char *source, char *user, char *reason);
+E void bad_password(User * u);
+E void sqline(char *mask, char *reason);
+E void common_unban(ChannelInfo * ci, char *nick);
+E void common_svsmode(User * u, char *modes, char *arg);
+
+/**** botserv.c ****/
+
+E BotInfo *botlists[256];
+E int nbots;
+E void get_botserv_stats(long *nrec, long *memuse);
+E void bs_init(void);
+E void botserv(User *u, char *buf);
+E void botmsgs(User *u, BotInfo *bi, char *buf);
+E void botchanmsgs(User *u, ChannelInfo *ci, char *buf);
+E void load_bs_dbase(void);
+E void save_bs_dbase(void);
+E void save_bs_rdb_dbase(void);
+E BotInfo *makebot(char *nick);
+E BotInfo *findbot(char *nick);
+E void bot_join(ChannelInfo *ci);
+E void bot_rejoin_all(BotInfo *bi);
+E char *normalizeBuffer(char *);
+E void unassign(User * u, ChannelInfo * ci);
+E void insert_bot(BotInfo * bi);
+
+E void bot_raw_ban(User * requester, ChannelInfo * ci, char *nick, char *reason);
+E void bot_raw_kick(User * requester, ChannelInfo * ci, char *nick, char *reason);
+E void bot_raw_mode(User * requester, ChannelInfo * ci, char *mode, char *nick);
+
+/**** channels.c ****/
+
+E Channel *chanlist[1024];
+
+E void add_ban(Channel * chan, char *mask);
+E void chan_adduser2(User * user, Channel * c);
+E void add_invite(Channel * chan, char *mask);
+E void chan_delete(Channel * c);
+E void del_ban(Channel * chan, char *mask);
+E void chan_set_key(Channel * chan, char *value);
+E void set_limit(Channel * chan, char *value);
+E void del_invite(Channel * chan, char *mask);
+E char *get_key(Channel * chan);
+E char *get_limit(Channel * chan);
+E Channel *chan_create(char *chan, time_t ts);
+E Channel *join_user_update(User * user, Channel * chan, char *name, time_t chants);
+
+E void add_exception(Channel * chan, char *mask);
+E void del_exception(Channel * chan, char *mask);
+E char *get_flood(Channel * chan);
+E void set_flood(Channel * chan, char *value);
+E char *get_redirect(Channel * chan);
+E void set_redirect(Channel * chan, char *value);
+
+
+E void get_channel_stats(long *nrec, long *memuse);
+E Channel *findchan(const char *chan);
+E Channel *firstchan(void);
+E Channel *nextchan(void);
+
+E void chan_deluser(User * user, Channel * c);
+
+E int is_on_chan(Channel * c, User * u);
+E User *nc_on_chan(Channel * c, NickCore * nc);
+
+E char *chan_get_modes(Channel * chan, int complete, int plus);
+E void chan_set_modes(const char *source, Channel * chan, int ac,
+ char **av, int check);
+
+E int chan_get_user_status(Channel * chan, User * user);
+E int chan_has_user_status(Channel * chan, User * user, int16 status);
+E void chan_remove_user_status(Channel * chan, User * user, int16 status);
+E void chan_set_user_status(Channel * chan, User * user, int16 status);
+
+E int get_access_level(ChannelInfo * ci, NickAlias * na);
+E const char *get_xop_level(int level);
+
+E void do_cmode(const char *source, int ac, char **av);
+E void do_join(const char *source, int ac, char **av);
+E void do_kick(const char *source, int ac, char **av);
+E void do_part(const char *source, int ac, char **av);
+E void do_sjoin(const char *source, int ac, char **av);
+E void do_topic(const char *source, int ac, char **av);
+E void do_mass_mode(char *modes);
+
+E void chan_set_correct_modes(User * user, Channel * c, int give_modes);
+E void restore_unsynced_topics(void);
+
+E Entry *entry_create(char *mask);
+E Entry *entry_add(EList *list, char *mask);
+E void entry_delete(EList *list, Entry *e);
+E EList *list_create();
+E int entry_match(Entry *e, char *nick, char *user, char *host, uint32 ip);
+E int entry_match_mask(Entry *e, char *mask, uint32 ip);
+E Entry *elist_match(EList *list, char *nick, char *user, char *host, uint32 ip);
+E Entry *elist_match_mask(EList *list, char *mask, uint32 ip);
+E Entry *elist_match_user(EList *list, User *u);
+E Entry *elist_find_mask(EList *list, char *mask);
+E long get_memuse(EList *list);
+
+
+#define whosends(ci) ((!(ci) || !((ci)->botflags & BS_SYMBIOSIS) || !(ci)->bi || !(ci)->c || (ci)->c->usercount < BSMinUsers) ? s_ChanServ : (ci)->bi->nick)
+
+/**** chanserv.c ****/
+
+E ChannelInfo *chanlists[256];
+E CSModeUtil csmodeutils[];
+E LevelInfo levelinfo[];
+
+E void listchans(int count_only, const char *chan);
+E void get_chanserv_stats(long *nrec, long *memuse);
+
+E int delchan(ChannelInfo * ci);
+E void alpha_insert_chan(ChannelInfo * ci);
+E void reset_levels(ChannelInfo * ci);
+E void cs_init(void);
+E void chanserv(User * u, char *buf);
+E void load_cs_dbase(void);
+E void save_cs_dbase(void);
+E void save_cs_rdb_dbase(void);
+E void expire_chans(void);
+E void cs_remove_nick(const NickCore * nc);
+E void cs_remove_bot(const BotInfo * bi);
+
+E int is_real_founder(User * user, ChannelInfo * ci);
+
+E void check_modes(Channel * c);
+E int check_valid_admin(User * user, Channel * chan, int servermode);
+E int check_valid_op(User * user, Channel * chan, int servermode);
+E int check_should_op(User * user, char *chan);
+E int check_should_voice(User * user, char *chan);
+E int check_should_halfop(User * user, char *chan);
+E int check_should_owner(User * user, char *chan);
+E int check_should_protect(User * user, char *chan);
+E int check_kick(User * user, char *chan, time_t chants);
+E void record_topic(const char *chan);
+E void restore_topic(char *chan);
+E int check_topiclock(Channel * c, time_t topic_time);
+
+E ChannelInfo *cs_findchan(const char *chan);
+E int check_access(User * user, ChannelInfo * ci, int what);
+E int is_founder(User * user, ChannelInfo * ci);
+E int get_access(User * user, ChannelInfo * ci);
+E ChanAccess *get_access_entry(NickCore * nc, ChannelInfo * ci);
+E void update_cs_lastseen(User * user, ChannelInfo * ci);
+E int get_idealban(ChannelInfo * ci, User * u, char *ret, int retlen);
+E AutoKick *is_stuck(ChannelInfo * ci, char *mask);
+E void stick_mask(ChannelInfo * ci, AutoKick * akick);
+E void stick_all(ChannelInfo * ci);
+E char *cs_get_flood(ChannelInfo * ci);
+E void cs_set_flood(ChannelInfo * ci, char *value);
+E char *cs_get_key(ChannelInfo * ci);
+E void cs_set_key(ChannelInfo * ci, char *value);
+E char *cs_get_limit(ChannelInfo * ci);
+E void cs_set_limit(ChannelInfo * ci, char *value);
+E char *cs_get_redirect(ChannelInfo * ci);
+E void cs_set_redirect(ChannelInfo * ci, char *value);
+
+E int levelinfo_maxwidth;
+E ChannelInfo *makechan(const char *chan);
+E int is_identified(User * user, ChannelInfo * ci);
+E char *get_mlock_modes(ChannelInfo * ci, int complete);
+
+/**** compat.c ****/
+
+#if !HAVE_SNPRINTF
+# if BAD_SNPRINTF
+# define snprintf my_snprintf
+# endif
+# define vsnprintf my_vsnprintf
+E int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
+E int snprintf(char *buf, size_t size, const char *fmt, ...);
+#endif
+#if !HAVE_STRICMP && !HAVE_STRCASECMP
+E int stricmp(const char *s1, const char *s2);
+E int strnicmp(const char *s1, const char *s2, size_t len);
+#endif
+#if !HAVE_STRDUP
+E char *strdup(const char *s);
+#endif
+#if !HAVE_STRSPN
+E size_t strspn(const char *s, const char *accept);
+#endif
+#if !HAVE_STRERROR
+E char *strerror(int errnum);
+#endif
+#if !HAVE_STRSIGNAL
+char *strsignal(int signum);
+#endif
+#ifdef _WIN32
+char *sockstrerror(int error);
+#endif
+
+/**** config.c ****/
+
+E char *RemoteServer;
+E int RemotePort;
+E char *RemotePassword;
+E char *RemoteServer2;
+E int RemotePort2;
+E char *RemotePassword2;
+E char *RemoteServer3;
+E int RemotePort3;
+E char *RemotePassword3;
+E char *LocalHost;
+E int LocalPort;
+
+E char *ServerName;
+E char *ServerDesc;
+E char *ServiceUser;
+E char *ServiceHost;
+
+E char *HelpChannel;
+E char *LogChannel;
+E char *NetworkName;
+E int NickLen;
+
+E char *s_NickServ;
+E char *s_ChanServ;
+E char *s_MemoServ;
+E char *s_BotServ;
+E char *s_HelpServ;
+E char *s_OperServ;
+E char *s_GlobalNoticer;
+E char *s_DevNull;
+E char *desc_NickServ;
+E char *desc_ChanServ;
+E char *desc_MemoServ;
+E char *desc_BotServ;
+E char *desc_HelpServ;
+E char *desc_OperServ;
+E char *desc_GlobalNoticer;
+E char *desc_DevNull;
+
+E char *HostDBName;
+E char *desc_HostServ;
+E char *s_HostServ;
+E void load_hs_dbase(void);
+E void save_hs_dbase(void);
+E void save_hs_rdb_dbase(void);
+E int do_on_id(User * u);
+E void delHostCore(char *nick);
+E void hostserv(User * u, char *buf);
+
+E char *s_NickServAlias;
+E char *s_ChanServAlias;
+E char *s_MemoServAlias;
+E char *s_BotServAlias;
+E char *s_HelpServAlias;
+E char *s_OperServAlias;
+E char *s_GlobalNoticerAlias;
+E char *s_DevNullAlias;
+E char *s_HostServAlias;
+E char *desc_NickServAlias;
+E char *desc_ChanServAlias;
+E char *desc_MemoServAlias;
+E char *desc_BotServAlias;
+E char *desc_HelpServAlias;
+E char *desc_OperServAlias;
+E char *desc_GlobalNoticerAlias;
+E char *desc_DevNullAlias;
+E char *desc_HostServAlias;
+
+E char *PIDFilename;
+E char *MOTDFilename;
+E char *NickDBName;
+E char *PreNickDBName;
+E char *ChanDBName;
+E char *BotDBName;
+E char *OperDBName;
+E char *AutokillDBName;
+E char *NewsDBName;
+
+E int NoBackupOkay;
+E int StrictPasswords;
+E int BadPassLimit;
+E int BadPassTimeout;
+E int UpdateTimeout;
+E int ExpireTimeout;
+E int ReadTimeout;
+E int WarningTimeout;
+E int TimeoutCheck;
+E int KeepLogs;
+E int KeepBackups;
+E int ForceForbidReason;
+E int UsePrivmsg;
+E int UseStrictPrivMsg;
+E int DumpCore;
+E int LogUsers;
+E int NickRegDelay;
+E int UseSVSHOLD;
+E int UseSVS2MODE;
+E int RestrictOperNicks;
+E int UseTokens;
+E int NewsCount;
+E char *Numeric;
+E int UnRestrictSAdmin;
+E int UseTS6;
+
+E char **HostSetters;
+E int HostNumber;
+
+E int UseMail;
+E char *SendMailPath;
+E char *SendFrom;
+E int RestrictMail;
+E int MailDelay;
+E int DontQuoteAddresses;
+
+E int NSDefFlags;
+E int NSDefLanguage;
+E int NSRegDelay;
+E int NSResendDelay;
+E int NSExpire;
+E int NSRExpire;
+E int NSForceEmail;
+E int NSMaxAliases;
+E int NSAccessMax;
+E char *NSEnforcerUser;
+E char *NSEnforcerHost;
+E int NSReleaseTimeout;
+E int NSAllowKillImmed;
+E int NSNoGroupChange;
+E int NSListOpersOnly;
+E int NSListMax;
+E char *NSGuestNickPrefix;
+E int NSSecureAdmins;
+E int NSStrictPrivileges;
+E int NSEmailReg;
+E int NSModeOnID;
+E int NSRestrictGetPass;
+E int NSNickTracking;
+E int NSAddAccessOnReg;
+
+E int CSDefFlags;
+E int CSMaxReg;
+E int CSExpire;
+E int CSDefBantype;
+E int CSAccessMax;
+E int CSAutokickMax;
+E char *CSAutokickReason;
+E int CSInhabit;
+E int CSListOpersOnly;
+E int CSListMax;
+E int CSRestrictGetPass;
+E int CSOpersOnly;
+
+E int MSMaxMemos;
+E int MSSendDelay;
+E int MSNotifyAll;
+E int MSMemoReceipt;
+
+E int BSDefFlags;
+E int BSKeepData;
+E int BSMinUsers;
+E int BSBadWordsMax;
+E int BSSmartJoin;
+E int BSGentleBWReason;
+E int BSCaseSensitive;
+E char *BSFantasyCharacter;
+
+E int HideStatsO;
+E int GlobalOnCycle;
+E int AnonymousGlobal;
+E char *GlobalOnCycleMessage;
+E char *GlobalOnCycleUP;
+E char **ServicesRoots;
+E int RootNumber;
+E int LogMaxUsers;
+E int SuperAdmin;
+E int LogBot;
+E int AutokillExpiry;
+E int ChankillExpiry;
+E int SGLineExpiry;
+E int SQLineExpiry;
+E int SZLineExpiry;
+E int AkillOnAdd;
+E int KillonSGline;
+E int KillonSQline;
+E int DisableRaw;
+E int WallOper;
+E int WallBadOS;
+E int WallOSGlobal;
+E int WallOSMode;
+E int WallOSClearmodes;
+E int WallOSKick;
+E int WallOSAkill;
+E int WallOSSGLine;
+E int WallOSSQLine;
+E int WallOSSZLine;
+E int WallOSNoOp;
+E int WallOSJupe;
+E int WallOSRaw;
+E int WallAkillExpire;
+E int WallSGLineExpire;
+E int WallSQLineExpire;
+E int WallSZLineExpire;
+E int WallExceptionExpire;
+E int WallDrop;
+E int WallForbid;
+E int WallGetpass;
+E int WallSetpass;
+E int AddAkiller;
+
+E int parse_directive(Directive * d, char *dir, int ac, char *av[MAXPARAMS], int linenum, int reload, char *s);
+
+/**
+ * Modules Stuff
+ **/
+E char **ModulesAutoload;
+E int ModulesNumber;
+E char **ModulesDelayedAutoload;
+E int ModulesDelayedNumber;
+
+E char **HostServCoreModules;
+E int HostServCoreNumber;
+
+E char **HelpServCoreModules;
+E int HelpServCoreNumber;
+
+E char **MemoServCoreModules;
+E int MemoServCoreNumber;
+
+E char **BotServCoreModules;
+E int BotServCoreNumber;
+
+E char **OperServCoreModules;
+E int OperServCoreNumber;
+
+E char **NickServCoreModules;
+E int NickServCoreNumber;
+
+E char **ChanServCoreModules;
+E int ChanServCoreNumber;
+
+E int LimitSessions;
+E int DefSessionLimit;
+E int ExceptionExpiry;
+E int MaxSessionKill;
+E int MaxSessionLimit;</