extern.h

Go to the documentation of this file.
00001 /* Prototypes and external variable declarations.
00002  *
00003  * (C) 2003-2007 Anope Team
00004  * Contact us at info@anope.org
00005  *
00006  * Please read COPYING and README for furhter details.
00007  *
00008  * Based on the original code of Epona by Lara.
00009  * Based on the original code of Services by Andy Church. 
00010  * 
00011  * $Id: extern.h 1322 2007-12-28 19:12:02Z geniusdex $ 
00012  *
00013  */
00014 
00015 #ifndef EXTERN_H
00016 #define EXTERN_H
00017 
00018 #ifndef _WIN32
00019 #define E extern
00020 #define EI extern
00021 #else
00022 #ifndef MODULE_COMPILE
00023 #define E extern __declspec(dllexport)
00024 #define EI extern __declspec(dllimport)
00025 #else
00026 #define E extern __declspec(dllimport)
00027 #define EI extern __declspec(dllexport)
00028 #endif
00029 #endif
00030 
00031 #include "slist.h"
00032 
00033 E void ModuleRunTimeDirCleanUp(void);
00034 
00035 
00036 E char *uplink;
00037 
00038 /* IRC Variables */
00039 
00040 E IRCDVar *ircd;
00041 E IRCDCAPAB *ircdcap;
00042 E char *flood_mode_char_set;
00043 E char *flood_mode_char_remove;
00044 E int UseTSMODE; /* hack to get around bahamut clones that don't send TSMODE */
00045 EI unsigned long umodes[128];
00046 E char csmodes[128];
00047 E CMMode cmmodes[128];
00048 E CBMode cbmodes[128];
00049 E CBModeInfo *cbmodeinfos;
00050 E CUMode cumodes[128];
00051 E char *IRCDModule;
00052 E IRCDProto ircdproto;
00053 
00054 /**** actions.c ****/
00055 
00056 E void kill_user(char *source, char *user, char *reason);
00057 E void bad_password(User * u);
00058 E void sqline(char *mask, char *reason);
00059 E void common_unban(ChannelInfo * ci, char *nick);
00060 E void common_svsmode(User * u, char *modes, char *arg);
00061 
00062 /**** botserv.c ****/
00063 
00064 E BotInfo *botlists[256];
00065 E int nbots;
00066 E void get_botserv_stats(long *nrec, long *memuse);
00067 E void bs_init(void);
00068 E void botserv(User *u, char *buf);
00069 E void botmsgs(User *u, BotInfo *bi, char *buf);
00070 E void botchanmsgs(User *u, ChannelInfo *ci, char *buf);
00071 E void load_bs_dbase(void);
00072 E void save_bs_dbase(void);
00073 E void save_bs_rdb_dbase(void);
00074 E BotInfo *makebot(char *nick);
00075 E BotInfo *findbot(char *nick);
00076 E void bot_join(ChannelInfo *ci);
00077 E void bot_rejoin_all(BotInfo *bi);
00078 E char *normalizeBuffer(char *);
00079 E void unassign(User * u, ChannelInfo * ci);
00080 E void insert_bot(BotInfo * bi);
00081 
00082 E void bot_raw_ban(User * requester, ChannelInfo * ci, char *nick, char *reason);
00083 E void bot_raw_kick(User * requester, ChannelInfo * ci, char *nick, char *reason);
00084 E void bot_raw_mode(User * requester, ChannelInfo * ci, char *mode, char *nick);
00085 
00086 /**** channels.c ****/
00087 
00088 E Channel *chanlist[1024];
00089 
00090 E void add_ban(Channel * chan, char *mask);
00091 E void chan_adduser2(User * user, Channel * c);
00092 E void add_invite(Channel * chan, char *mask);
00093 E void chan_delete(Channel * c);
00094 E void del_ban(Channel * chan, char *mask);
00095 E void chan_set_key(Channel * chan, char *value);
00096 E void set_limit(Channel * chan, char *value);
00097 E void del_invite(Channel * chan, char *mask);
00098 E char *get_key(Channel * chan);
00099 E char *get_limit(Channel * chan);
00100 E Channel *chan_create(char *chan, time_t ts);
00101 E Channel *join_user_update(User * user, Channel * chan, char *name, time_t chants);
00102 
00103 E void add_exception(Channel * chan, char *mask);
00104 E void del_exception(Channel * chan, char *mask);
00105 E char *get_flood(Channel * chan);
00106 E void set_flood(Channel * chan, char *value);
00107 E char *get_redirect(Channel * chan);
00108 E void set_redirect(Channel * chan, char *value);
00109 
00110 
00111 E void get_channel_stats(long *nrec, long *memuse);
00112 E Channel *findchan(const char *chan);
00113 E Channel *firstchan(void);
00114 E Channel *nextchan(void);
00115 
00116 E void chan_deluser(User * user, Channel * c);
00117 
00118 E int is_on_chan(Channel * c, User * u);
00119 E User *nc_on_chan(Channel * c, NickCore * nc);
00120 
00121 E char *chan_get_modes(Channel * chan, int complete, int plus);
00122 E void chan_set_modes(const char *source, Channel * chan, int ac,
00123                       char **av, int check);
00124 
00125 E int chan_get_user_status(Channel * chan, User * user);
00126 E int chan_has_user_status(Channel * chan, User * user, int16 status);
00127 E void chan_remove_user_status(Channel * chan, User * user, int16 status);
00128 E void chan_set_user_status(Channel * chan, User * user, int16 status);
00129 
00130 E int get_access_level(ChannelInfo * ci, NickAlias * na);
00131 E const char *get_xop_level(int level);
00132 
00133 E void do_cmode(const char *source, int ac, char **av);
00134 E void do_join(const char *source, int ac, char **av);
00135 E void do_kick(const char *source, int ac, char **av);
00136 E void do_part(const char *source, int ac, char **av);
00137 E void do_sjoin(const char *source, int ac, char **av);
00138 E void do_topic(const char *source, int ac, char **av);
00139 E void do_mass_mode(char *modes);
00140 
00141 E void chan_set_correct_modes(User * user, Channel * c, int give_modes);
00142 E void restore_unsynced_topics(void);
00143 
00144 #define whosends(ci) ((!(ci) || !((ci)->botflags & BS_SYMBIOSIS) || !(ci)->bi || !(ci)->c || (ci)->c->usercount < BSMinUsers) ? s_ChanServ : (ci)->bi->nick)
00145 
00146 /**** chanserv.c ****/
00147 
00148 E ChannelInfo *chanlists[256];
00149 E CSModeUtil csmodeutils[];
00150 E LevelInfo levelinfo[];
00151 
00152 E void listchans(int count_only, const char *chan);
00153 E void get_chanserv_stats(long *nrec, long *memuse);
00154 
00155 E int delchan(ChannelInfo * ci);
00156 E void alpha_insert_chan(ChannelInfo * ci);
00157 E void reset_levels(ChannelInfo * ci);
00158 E void cs_init(void);
00159 E void chanserv(User * u, char *buf);
00160 E void load_cs_dbase(void);
00161 E void save_cs_dbase(void);
00162 E void save_cs_rdb_dbase(void);
00163 E void expire_chans(void);
00164 E void cs_remove_nick(const NickCore * nc);
00165 E void cs_remove_bot(const BotInfo * bi);
00166 
00167 E int is_real_founder(User * user, ChannelInfo * ci);
00168 
00169 E void check_modes(Channel * c);
00170 E int check_valid_admin(User * user, Channel * chan, int servermode);
00171 E int check_valid_op(User * user, Channel * chan, int servermode);
00172 E int check_should_op(User * user, char *chan);
00173 E int check_should_voice(User * user, char *chan);
00174 E int check_should_halfop(User * user, char *chan);
00175 E int check_should_owner(User * user, char *chan);
00176 E int check_should_protect(User * user, char *chan);
00177 E int check_kick(User * user, char *chan, time_t chants);
00178 E void record_topic(const char *chan);
00179 E void restore_topic(char *chan);
00180 E int check_topiclock(Channel * c, time_t topic_time);
00181 
00182 E ChannelInfo *cs_findchan(const char *chan);
00183 E int check_access(User * user, ChannelInfo * ci, int what);
00184 E int is_founder(User * user, ChannelInfo * ci);
00185 E int get_access(User * user, ChannelInfo * ci);
00186 E ChanAccess *get_access_entry(NickCore * nc, ChannelInfo * ci);
00187 E void update_cs_lastseen(User * user, ChannelInfo * ci);
00188 E int get_idealban(ChannelInfo * ci, User * u, char *ret, int retlen);
00189 E AutoKick *is_stuck(ChannelInfo * ci, char *mask);
00190 E void stick_mask(ChannelInfo * ci, AutoKick * akick);
00191 E void stick_all(ChannelInfo * ci);
00192 E char *cs_get_flood(ChannelInfo * ci);
00193 E void cs_set_flood(ChannelInfo * ci, char *value);
00194 E char *cs_get_key(ChannelInfo * ci);
00195 E void cs_set_key(ChannelInfo * ci, char *value);
00196 E char *cs_get_limit(ChannelInfo * ci);
00197 E void cs_set_limit(ChannelInfo * ci, char *value);
00198 E char *cs_get_redirect(ChannelInfo * ci);
00199 E void cs_set_redirect(ChannelInfo * ci, char *value);
00200 
00201 E int levelinfo_maxwidth;
00202 E ChannelInfo *makechan(const char *chan);
00203 E int is_identified(User * user, ChannelInfo * ci);
00204 E char *get_mlock_modes(ChannelInfo * ci, int complete);
00205 
00206 /**** compat.c ****/
00207 
00208 #if !HAVE_SNPRINTF
00209 # if BAD_SNPRINTF
00210 #  define snprintf my_snprintf
00211 # endif
00212 # define vsnprintf my_vsnprintf
00213 E int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
00214 E int snprintf(char *buf, size_t size, const char *fmt, ...);
00215 #endif
00216 #if !HAVE_STRICMP && !HAVE_STRCASECMP
00217 E int stricmp(const char *s1, const char *s2);
00218 E int strnicmp(const char *s1, const char *s2, size_t len);
00219 #endif
00220 #if !HAVE_STRDUP
00221 E char *strdup(const char *s);
00222 #endif
00223 #if !HAVE_STRSPN
00224 E size_t strspn(const char *s, const char *accept);
00225 #endif
00226 #if !HAVE_STRERROR
00227 E char *strerror(int errnum);
00228 #endif
00229 #if !HAVE_STRSIGNAL
00230 char *strsignal(int signum);
00231 #endif
00232 #ifdef _WIN32
00233 char *sockstrerror(int error);
00234 #endif
00235 
00236 /**** config.c ****/
00237 
00238 E char *RemoteServer;
00239 E int   RemotePort;
00240 E char *RemotePassword;
00241 E char *RemoteServer2;
00242 E int   RemotePort2;
00243 E char *RemotePassword2;
00244 E char *RemoteServer3;
00245 E int   RemotePort3;
00246 E char *RemotePassword3;
00247 E char *LocalHost;
00248 E int   LocalPort;
00249 
00250 E char *ServerName;
00251 E char *ServerDesc;
00252 E char *ServiceUser;
00253 E char *ServiceHost;
00254 
00255 E char *HelpChannel;
00256 E char *LogChannel;
00257 E char *NetworkName;
00258 E int   NickLen;
00259 
00260 E char *s_NickServ;
00261 E char *s_ChanServ;
00262 E char *s_MemoServ;
00263 E char *s_BotServ;
00264 E char *s_HelpServ;
00265 E char *s_OperServ;
00266 E char *s_GlobalNoticer;
00267 E char *s_DevNull;
00268 E char *desc_NickServ;
00269 E char *desc_ChanServ;
00270 E char *desc_MemoServ;
00271 E char *desc_BotServ;
00272 E char *desc_HelpServ;
00273 E char *desc_OperServ;
00274 E char *desc_GlobalNoticer;
00275 E char *desc_DevNull;
00276 
00277 E char *HostDBName;
00278 E char *desc_HostServ;
00279 E char *s_HostServ;
00280 E void load_hs_dbase(void);
00281 E void save_hs_dbase(void);
00282 E void save_hs_rdb_dbase(void);
00283 E int do_on_id(User * u);
00284 E void delHostCore(char *nick);
00285 E void hostserv(User * u, char *buf);
00286 
00287 E char *s_NickServAlias;
00288 E char *s_ChanServAlias;
00289 E char *s_MemoServAlias;
00290 E char *s_BotServAlias;
00291 E char *s_HelpServAlias;
00292 E char *s_OperServAlias;
00293 E char *s_GlobalNoticerAlias;
00294 E char *s_DevNullAlias;
00295 E char *s_HostServAlias;
00296 E char *desc_NickServAlias;
00297 E char *desc_ChanServAlias;
00298 E char *desc_MemoServAlias;
00299 E char *desc_BotServAlias;
00300 E char *desc_HelpServAlias;
00301 E char *desc_OperServAlias;
00302 E char *desc_GlobalNoticerAlias;
00303 E char *desc_DevNullAlias;
00304 E char *desc_HostServAlias;
00305 
00306 E char *PIDFilename;
00307 E char *MOTDFilename;
00308 E char *NickDBName;
00309 E char *PreNickDBName;
00310 E char *ChanDBName;
00311 E char *BotDBName;
00312 E char *OperDBName;
00313 E char *AutokillDBName;
00314 E char *NewsDBName;
00315 
00316 E int   NoBackupOkay;
00317 E int   StrictPasswords;
00318 E int   BadPassLimit;
00319 E int   BadPassTimeout;
00320 E int   UpdateTimeout;
00321 E int   ExpireTimeout;
00322 E int   ReadTimeout;
00323 E int   WarningTimeout;
00324 E int   TimeoutCheck;
00325 E int   KeepLogs;
00326 E int   KeepBackups;
00327 E int   ForceForbidReason;
00328 E int   UsePrivmsg;
00329 E int   UseStrictPrivMsg;
00330 E int   DumpCore;
00331 E int   LogUsers;
00332 E int   NickRegDelay;
00333 E int   UseSVSHOLD;
00334 E int   UseSVS2MODE;
00335 E int   RestrictOperNicks;
00336 E int   UseTokens;
00337 E int   NewsCount;
00338 E char *Numeric;
00339 E int   UnRestrictSAdmin;
00340 E int   UseTS6;
00341 
00342 E char **HostSetters;
00343 E int HostNumber;
00344 
00345 E int   UseMail;
00346 E char *SendMailPath;
00347 E char *SendFrom;
00348 E int   RestrictMail;
00349 E int   MailDelay;
00350 E int  DontQuoteAddresses;
00351 
00352 E int   NSDefFlags;
00353 E int   NSDefLanguage;
00354 E int   NSRegDelay;
00355 E int   NSResendDelay;
00356 E int   NSExpire;
00357 E int   NSRExpire;
00358 E int   NSForceEmail;
00359 E int   NSMaxAliases;
00360 E int   NSAccessMax;
00361 E char *NSEnforcerUser;
00362 E char *NSEnforcerHost;
00363 E int   NSReleaseTimeout;
00364 E int   NSAllowKillImmed;
00365 E int   NSNoGroupChange;
00366 E int   NSListOpersOnly;
00367 E int   NSListMax;
00368 E char *NSGuestNickPrefix;
00369 E int   NSSecureAdmins;
00370 E int   NSStrictPrivileges;
00371 E int   NSEmailReg;
00372 E int   NSModeOnID;
00373 E int   NSRestrictGetPass;
00374 E int   NSNickTracking;
00375 E int   NSAddAccessOnReg;
00376 
00377 E int   CSDefFlags;
00378 E int   CSMaxReg;
00379 E int   CSExpire;
00380 E int   CSDefBantype;
00381 E int   CSAccessMax;
00382 E int   CSAutokickMax;
00383 E char *CSAutokickReason;
00384 E int   CSInhabit;
00385 E int   CSListOpersOnly;
00386 E int   CSListMax;
00387 E int   CSRestrictGetPass;
00388 E int   CSOpersOnly;
00389 
00390 E int   MSMaxMemos;
00391 E int   MSSendDelay;
00392 E int   MSNotifyAll;
00393 E int   MSMemoReceipt;
00394 
00395 E int   BSDefFlags;
00396 E int   BSKeepData;
00397 E int   BSMinUsers;
00398 E int   BSBadWordsMax;
00399 E int   BSSmartJoin;
00400 E int   BSGentleBWReason;
00401 E int   BSCaseSensitive;
00402 E char *BSFantasyCharacter;
00403 
00404 E int   HideStatsO;
00405 E int   GlobalOnCycle;
00406 E int   AnonymousGlobal;
00407 E char *GlobalOnCycleMessage;
00408 E char *GlobalOnCycleUP;
00409 E char **ServicesRoots;
00410 E int   RootNumber;
00411 E int   LogMaxUsers;
00412 E int   SuperAdmin;
00413 E int   LogBot;
00414 E int   AutokillExpiry;
00415 E int   ChankillExpiry;
00416 E int   SGLineExpiry;
00417 E int   SQLineExpiry;
00418 E int   SZLineExpiry;
00419 E int   AkillOnAdd;
00420 E int   KillonSGline;
00421 E int   KillonSQline;
00422 E int   DisableRaw;
00423 E int   WallOper;
00424 E int   WallBadOS;
00425 E int   WallOSGlobal;
00426 E int   WallOSMode;
00427 E int   WallOSClearmodes;
00428 E int   WallOSKick;
00429 E int   WallOSAkill;
00430 E int   WallOSSGLine;
00431 E int   WallOSSQLine;
00432 E int   WallOSSZLine;
00433 E int   WallOSNoOp;
00434 E int   WallOSJupe;
00435 E int   WallOSRaw;
00436 E int   WallAkillExpire;
00437 E int   WallSGLineExpire;
00438 E int   WallSQLineExpire;
00439 E int   WallSZLineExpire;
00440 E int   WallExceptionExpire;
00441 E int   WallDrop;
00442 E int   WallForbid;
00443 E int   WallGetpass;
00444 E int   WallSetpass;
00445 E int   AddAkiller;
00446 
00447 E int parse_directive(Directive * d, char *dir, int ac, char *av[MAXPARAMS], int linenum, int reload, char *s);
00448 
00452 E char **ModulesAutoload;
00453 E int ModulesNumber;
00454 E char **ModulesDelayedAutoload;
00455 E int ModulesDelayedNumber;
00456 
00457 E char **HostServCoreModules;
00458 E int HostServCoreNumber;
00459 
00460 E char **HelpServCoreModules;
00461 E int HelpServCoreNumber;
00462 
00463 E char **MemoServCoreModules;
00464 E int MemoServCoreNumber;
00465 
00466 E char **BotServCoreModules;
00467 E int BotServCoreNumber;
00468 
00469 E char **OperServCoreModules;
00470 E int OperServCoreNumber;
00471 
00472 E char **NickServCoreModules;
00473 E int NickServCoreNumber;
00474 
00475 E char **ChanServCoreModules;
00476 E int ChanServCoreNumber;
00477 
00478 E int   LimitSessions;
00479 E int   DefSessionLimit;
00480 E int   ExceptionExpiry;
00481 E int   MaxSessionKill;
00482 E int   MaxSessionLimit;
00483 E int   SessionAutoKillExpiry;
00484 E char *ExceptionDBName;
00485 E char *SessionLimitDetailsLoc;
00486 E char *SessionLimitExceeded;
00487 
00488 E char *UlineServers;
00489 E char **Ulines;
00490 E int NumUlines;
00491 
00492 #ifdef USE_RDB
00493 E int rdb_init();
00494 E int rdb_open();
00495 E int rdb_close();
00496 E char *rdb_quote(char *str);
00497 E int rdb_tag_table(char *table);
00498 E int rdb_tag_table_where(char *table, char *clause);
00499 E int rdb_empty_table(char *table);
00500 E int rdb_clean_table(char *table);
00501 E int rdb_clean_table_where(char *table, char *clause);
00502 E int rdb_scrub_table(char *table, char *clause);
00503 E int rdb_direct_query(char *query);
00504 E int rdb_ns_set_display(char *newnick, char *oldnick);
00505 E int rdb_save_ns_core(NickCore * nc);
00506 E int rdb_save_ns_alias(NickAlias * na);
00507 E int