00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
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;
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
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
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
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
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
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
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