get core modules compiling and introduce core side module config loading
This commit is contained in:
parent
3e94d6c8ca
commit
46c502447c
18 changed files with 358 additions and 579 deletions
|
@ -4,6 +4,8 @@ Anything we add/remove/fix/change is in here (even our rants)
|
|||
Fish (F), Mark (M)
|
||||
===============================================================================
|
||||
* NeoStats * Version 3.0.genesis
|
||||
- ConnectServ: reverse colour define so default is disabled. (M)
|
||||
- Core modules now use core config loading system (M)
|
||||
- All socket code now in socks.c for easier upgrade (M)
|
||||
- Early support for module semi auto config designed to perform loading of
|
||||
module config settings or set defaults without the module having to code it.
|
||||
|
|
37
src/bots.c
37
src/bots.c
|
@ -427,31 +427,36 @@ int
|
|||
bot_nick_change (char *oldnick, char *newnick)
|
||||
{
|
||||
User *u;
|
||||
Bot *botptr_new, *botptr;
|
||||
Bot *botptr;
|
||||
hnode_t *bn;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
/* First, try to find out if the newnick is unique! */
|
||||
u = finduser (oldnick);
|
||||
if (!u) {
|
||||
nlog (LOG_WARNING, "A non-registered bot(%s) attempted to change its nick to %s", oldnick, newnick);
|
||||
nlog (LOG_WARNING, "Unknown bot %s tried to change nick to %s", oldnick, newnick);
|
||||
return NS_FAILURE;
|
||||
}
|
||||
u = finduser (newnick);
|
||||
if (!u) {
|
||||
if ((botptr = findbot (oldnick)) != NULL) {
|
||||
nlog (LOG_DEBUG3, "Bot %s Changed its nick to %s", oldnick, newnick);
|
||||
botptr_new = new_bot (newnick);
|
||||
/* add a brand new user */
|
||||
strlcpy (botptr_new->nick, newnick, MAXNICK);
|
||||
botptr_new->moduleptr->info = botptr->moduleptr->info;
|
||||
/* Now Delete the Old bot nick */
|
||||
del_ns_bot (oldnick);
|
||||
snick_cmd (oldnick, newnick);
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
if (u) {
|
||||
nlog (LOG_WARNING, "Bot %s tried to change nick to one that already exists %s", oldnick, newnick);
|
||||
return NS_FAILURE;
|
||||
}
|
||||
nlog (LOG_NOTICE, "Couldn't find Bot Nick %s in Bot list", oldnick);
|
||||
return NS_FAILURE;
|
||||
bn = hash_lookup (bh, oldnick);
|
||||
if (!bn) {
|
||||
nlog (LOG_NOTICE, "Couldn't find bot %s in bot list", oldnick);
|
||||
return NS_FAILURE;
|
||||
}
|
||||
botptr = hnode_get (bn);
|
||||
/* remove old hash entry */
|
||||
hash_delete (bh, bn);
|
||||
nlog (LOG_DEBUG3, "Bot %s changed nick to %s", oldnick, newnick);
|
||||
strlcpy (botptr->nick, newnick, MAXNICK);
|
||||
/* insert new hash entry */
|
||||
hash_insert (bh, bn, botptr->nick);
|
||||
/* send bot nick change */
|
||||
snick_cmd (oldnick, newnick);
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
|
||||
/** @brief
|
||||
|
|
|
@ -46,6 +46,18 @@ typedef struct Chanmem {
|
|||
|
||||
hash_t *ch;
|
||||
|
||||
extern char quitreason[BUFSIZE];
|
||||
|
||||
static void
|
||||
ChanPartHandler (list_t * list, lnode_t * node, void *v)
|
||||
{
|
||||
part_chan ((User *)v, lnode_get (node), quitreason[0] != 0 ? quitreason : NULL);
|
||||
}
|
||||
|
||||
void PartAllChannels (User* u)
|
||||
{
|
||||
list_process (u->chans, u, ChanPartHandler);
|
||||
}
|
||||
|
||||
/** @brief Process the Channel TS Time
|
||||
*
|
||||
|
@ -663,7 +675,7 @@ join_chan (const char* nick, const char *chan)
|
|||
if (!ircstrcasecmp ("0", chan)) {
|
||||
/* join 0 is actually part all chans */
|
||||
nlog (LOG_DEBUG2, "join_chan: parting %s from all channels", u->nick);
|
||||
list_process (u->chans, u, UserPart);
|
||||
PartAllChannels (u);
|
||||
return;
|
||||
}
|
||||
c = findchan (chan);
|
||||
|
|
14
src/ircd.c
14
src/ircd.c
|
@ -627,7 +627,7 @@ void
|
|||
do_version (const char* nick, const char *remoteserver)
|
||||
{
|
||||
SET_SEGV_LOCATION();
|
||||
numeric (RPL_VERSION, nick, "%s :%s -> %s %s", me.versionfull, me.name, version_date, version_time);
|
||||
numeric (RPL_VERSION, nick, "%s :%s -> %s %s", me.versionfull, me.name, ns_module_info.build_date, ns_module_info.build_time);
|
||||
ModulesVersion (nick, remoteserver);
|
||||
}
|
||||
|
||||
|
@ -1060,19 +1060,19 @@ ssvsmode_cmd (const char *target, const char *modes)
|
|||
}
|
||||
|
||||
int
|
||||
ssvshost_cmd (const char *who, const char *vhost)
|
||||
ssvshost_cmd (const char *target, const char *vhost)
|
||||
{
|
||||
#ifdef GOTSVSHOST
|
||||
User *u;
|
||||
|
||||
u = finduser (who);
|
||||
u = finduser (target);
|
||||
if (!u) {
|
||||
nlog (LOG_WARNING, "ssvshost_cmd: can't find user %s", who);
|
||||
nlog (LOG_WARNING, "ssvshost_cmd: can't find user %s", target);
|
||||
return 0;
|
||||
}
|
||||
|
||||
strlcpy (u->vhost, vhost, MAXHOST);
|
||||
send_svshost(me.name, who, vhost);
|
||||
send_svshost(me.name, target, vhost);
|
||||
#else
|
||||
unsupported_cmd("SVSHOST");
|
||||
#endif
|
||||
|
@ -1507,13 +1507,13 @@ do_client (const char *nick, const char *arg1, const char *TS,
|
|||
void
|
||||
do_kill (const char *nick, const char *reason)
|
||||
{
|
||||
DelUser (nick, 1, reason);
|
||||
KillUser (nick, reason);
|
||||
}
|
||||
|
||||
void
|
||||
do_quit (const char *nick, const char *quitmsg)
|
||||
{
|
||||
DelUser (nick, 0, quitmsg);
|
||||
QuitUser (nick, quitmsg);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -263,7 +263,7 @@ get_options (int argc, char **argv)
|
|||
return NS_FAILURE;
|
||||
case 'v':
|
||||
printf ("NeoStats Version %s\n", me.versionfull);
|
||||
printf ("Compiled: %s at %s\n", version_date, version_time);
|
||||
printf ("Compiled: %s at %s\n", ns_module_info.build_date, ns_module_info.build_time);
|
||||
printf ("Flag after version number indicates what IRCd NeoStats is compiled for:\n");
|
||||
printf ("(U31)- Unreal 3.1.x IRCd\n");
|
||||
printf ("(U32)- Unreal 3.2.x IRCd\n");
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* NeoStats - IRC Statistical Services
|
||||
** Copyright (c) 1999-2004 Adam Rutter, Justin Hammond
|
||||
** Copyright (c) 1999-2004 Adam Rutter, Justin Hammond, Mark Hetherington
|
||||
** http://www.neostats.net/
|
||||
**
|
||||
** Portions Copyright (c) 2000-2001 ^Enigma^
|
||||
|
@ -26,10 +26,10 @@
|
|||
#include "neostats.h"
|
||||
#include "cs.h"
|
||||
|
||||
/* Uncomment this line to disable colours in ConnectServ
|
||||
/* Uncomment this line to enable colours in ConnectServ
|
||||
channel messages
|
||||
*/
|
||||
/* #define DISABLE_COLOUR_SUPPORT */
|
||||
/* #define ENABLE_COLOUR_SUPPORT */
|
||||
|
||||
static const char mode_netadmin[]="network administrator";
|
||||
static const char mode_conetadmin[]="co network administrator";
|
||||
|
@ -44,7 +44,7 @@ static const char mode_locop[]="local operator";
|
|||
static const char mode_netservice[]="network service";
|
||||
static const char mode_bot[]="bot";
|
||||
|
||||
#ifdef DISABLE_COLOUR_SUPPORT
|
||||
#ifndef ENABLE_COLOUR_SUPPORT
|
||||
static char msg_nickchange[]="\2NICK\2 %s (%s@%s) changed their nick to %s";
|
||||
static char msg_signon[]="\2SIGNON\2 %s (%s@%s - %s) has signed on at %s";
|
||||
static char msg_signoff[]="\2SIGNOFF\2 %s (%s@%s - %s) has signed off at %s - %s";
|
||||
|
@ -82,8 +82,6 @@ static int cs_event_nick(CmdParams* cmdparams);
|
|||
static int cs_event_server(CmdParams* cmdparams);
|
||||
static int cs_event_squit(CmdParams* cmdparams);
|
||||
|
||||
static void LoadConfig(void);
|
||||
|
||||
struct cs_cfg {
|
||||
int sign_watch;
|
||||
int kill_watch;
|
||||
|
@ -131,6 +129,7 @@ static bot_cmd cs_commands[]=
|
|||
static bot_setting cs_settings[]=
|
||||
{
|
||||
{"NICK", &cs_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"ConnectServ" },
|
||||
{"ALTNICK", &cs_botinfo.altnick,SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"ConnectServ" },
|
||||
{"USER", &cs_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"CS" },
|
||||
{"HOST", &cs_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" },
|
||||
{"REALNAME", &cs_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"" },
|
||||
|
@ -161,7 +160,7 @@ ModuleEvent module_events[] = {
|
|||
int ModInit(Module* mod_ptr)
|
||||
{
|
||||
cs_module = mod_ptr;
|
||||
LoadConfig();
|
||||
ModuleConfig(cs_module, cs_settings);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -245,7 +244,6 @@ static int cs_event_quit(CmdParams* cmdparams)
|
|||
free(cmd);
|
||||
free(lcl);
|
||||
return 1;
|
||||
|
||||
}
|
||||
}
|
||||
/* Print Disconnection Notice */
|
||||
|
@ -508,37 +506,6 @@ static int cs_event_nick(CmdParams* cmdparams)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Load ConnectServ Configuration file and set defaults if does not exist
|
||||
*/
|
||||
static void LoadConfig(void)
|
||||
{
|
||||
char *temp = NULL;
|
||||
|
||||
GetConf((void *) &cs_cfg.sign_watch, CFGBOOL, "SignWatch");
|
||||
GetConf((void *) &cs_cfg.kill_watch, CFGBOOL, "KillWatch");
|
||||
GetConf((void *) &cs_cfg.mode_watch, CFGBOOL, "ModeWatch");
|
||||
GetConf((void *) &cs_cfg.nick_watch, CFGBOOL, "NickWatch");
|
||||
GetConf((void *) &cs_cfg.serv_watch, CFGBOOL, "ServWatch");
|
||||
GetConf((void *) &cs_cfg.use_exc, CFGBOOL, "Exclusions";
|
||||
if(GetConf((void *) &temp, CFGSTR, "Nick") > 0) {
|
||||
strlcpy(cs_botinfo.nick, temp, MAXNICK);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "User") > 0) {
|
||||
strlcpy(cs_botinfo.user, temp, MAXUSER);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "Host") > 0) {
|
||||
strlcpy(cs_botinfo.host, temp, MAXHOST);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "RealName") > 0) {
|
||||
strlcpy(cs_botinfo.realname, temp, MAXREALNAME);
|
||||
free(temp);
|
||||
}
|
||||
}
|
||||
|
||||
static int cs_event_server(CmdParams* cmdparams)
|
||||
{
|
||||
SET_SEGV_LOCATION();
|
||||
|
|
|
@ -72,10 +72,9 @@ typedef struct hs_user {
|
|||
#endif
|
||||
|
||||
static int hs_event_signon(CmdParams* cmdparams);
|
||||
#if UMODE_REGNICK
|
||||
#ifdef UMODE_REGNICK
|
||||
static int hs_event_mode(CmdParams* cmdparams);
|
||||
#endif
|
||||
static int hs_about(CmdParams* cmdparams);
|
||||
static int hs_levels(CmdParams* cmdparams);
|
||||
static int hs_bans(CmdParams* cmdparams);
|
||||
static int hs_login(CmdParams* cmdparams);
|
||||
|
@ -85,9 +84,9 @@ static int hs_list(CmdParams* cmdparams);
|
|||
static int hs_view(CmdParams* cmdparams);
|
||||
static int hs_del(CmdParams* cmdparams);
|
||||
|
||||
static void hs_listban(User * cmdparams->source.user);
|
||||
static void hs_addban(User * cmdparams->source.user, char *ban);
|
||||
static void hs_delban(User * cmdparams->source.user, char *ban);
|
||||
static void hs_listban(User* u);
|
||||
static void hs_addban(User* u, char *ban);
|
||||
static void hs_delban(User* u, char *ban);
|
||||
|
||||
static void SaveBans(void);
|
||||
static void hsdat(char *nick, char *host, char *vhost, char *pass, char *who);
|
||||
|
@ -107,11 +106,11 @@ int ListArryCount = 0;
|
|||
Bot *hs_bot;
|
||||
static BotInfo hs_botinfo =
|
||||
{
|
||||
"HostServ",
|
||||
"HostServ",
|
||||
"HS",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"Network virtual host service",
|
||||
};
|
||||
static Module* hs_module;
|
||||
|
||||
|
@ -130,7 +129,6 @@ ModuleInfo module_info = {
|
|||
|
||||
static bot_cmd hs_commands[]=
|
||||
{
|
||||
{"ABOUT", hs_about, 0, 0, hs_help_about, hs_help_about_oneline },
|
||||
{"ADD", hs_add, 4, (int)&hs_cfg.add, hs_help_add, hs_help_add_oneline },
|
||||
{"DEL", hs_del, 1, (int)&hs_cfg.del, hs_help_del, hs_help_del_oneline },
|
||||
{"LIST", hs_list, 0, (int)&hs_cfg.list, hs_help_list, hs_help_list_oneline },
|
||||
|
@ -144,13 +142,14 @@ static bot_cmd hs_commands[]=
|
|||
|
||||
static bot_setting hs_settings[]=
|
||||
{
|
||||
{"NICK", &hs_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick },
|
||||
{"USER", &hs_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user },
|
||||
{"HOST", &hs_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host },
|
||||
{"REALNAME", &hs_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname },
|
||||
{"EXPIRE", &hs_cfg.old, SET_TYPE_INT, 0, 99, NS_ULEVEL_ADMIN, "ExpireDays","days",hs_help_set_expire },
|
||||
{"HIDDENHOST", &hs_cfg.regnick, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "UnetVhosts",NULL, hs_help_set_hiddenhost },
|
||||
{"HOSTNAME", &hs_cfg.vhostdom, SET_TYPE_STRING, 0, MAXHOST, NS_ULEVEL_ADMIN, "UnetDomain",NULL, hs_help_set_hostname },
|
||||
{"NICK", &hs_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"HostServ" },
|
||||
{"ALTNICK", &hs_botinfo.altnick,SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"HostServ" },
|
||||
{"USER", &hs_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"HS" },
|
||||
{"HOST", &hs_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" },
|
||||
{"REALNAME", &hs_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"Network virtual host service" },
|
||||
{"EXPIRE", &hs_cfg.old, SET_TYPE_INT, 0, 99, NS_ULEVEL_ADMIN, "ExpireDays","days",hs_help_set_expire, NULL, (void*)60 },
|
||||
{"HIDDENHOST", &hs_cfg.regnick, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "UnetVhosts",NULL, hs_help_set_hiddenhost, NULL, (void*)0 },
|
||||
{"HOSTNAME", &hs_cfg.vhostdom, SET_TYPE_STRING, 0, MAXHOST, NS_ULEVEL_ADMIN, "UnetDomain",NULL, hs_help_set_hostname, NULL, (void*)"" },
|
||||
{NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
|
@ -177,24 +176,19 @@ void del_vhost(hs_map *vhost)
|
|||
/* no need to list sort here, because its already sorted */
|
||||
}
|
||||
|
||||
void set_moddata(User *cmdparams->source.user)
|
||||
void set_moddata(User* u)
|
||||
{
|
||||
hs_user *hs;
|
||||
|
||||
if (!cmdparams->source.user->moddata[hs_module->modnum]) {
|
||||
if (!u->moddata[hs_module->modnum]) {
|
||||
hs = malloc(sizeof(hs_user));
|
||||
hs->vhostset = 1;
|
||||
cmdparams->source.user->moddata[hs_module->modnum] = hs;
|
||||
u->moddata[hs_module->modnum] = hs;
|
||||
}
|
||||
}
|
||||
|
||||
static int hs_event_quit(CmdParams* cmdparams)
|
||||
{
|
||||
User *cmdparams->source.user;
|
||||
|
||||
cmdparams->source.user = finduser(cmdparams->av[0]);
|
||||
if (!cmdparams->source.user) /* User not found */
|
||||
return 1;
|
||||
if (cmdparams->source.user->moddata[hs_module->modnum]) {
|
||||
nlog(LOG_DEBUG2, "hs_event_quit: free module data");
|
||||
free(cmdparams->source.user->moddata[hs_module->modnum]);
|
||||
|
@ -208,15 +202,11 @@ static int hs_event_signon(CmdParams* cmdparams)
|
|||
{
|
||||
lnode_t *hn;
|
||||
hs_map *map;
|
||||
User *cmdparams->source.user;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
|
||||
if (!is_synced)
|
||||
return 0;
|
||||
cmdparams->source.user = finduser(cmdparams->av[0]);
|
||||
if (!cmdparams->source.user)
|
||||
return 1;
|
||||
|
||||
if (IsMe(cmdparams->source.user))
|
||||
return 1;
|
||||
|
@ -275,9 +265,10 @@ int ModInit(Module* mod_ptr)
|
|||
vhosts = list_create(-1);
|
||||
bannedvhosts = hash_create(-1, 0, 0);
|
||||
if (!vhosts) {
|
||||
nlog(LOG_CRITICAL, "Error, Can't create vhosts hash");
|
||||
nlog(LOG_CRITICAL, "Error, can't create vhosts hash");
|
||||
return -1;
|
||||
}
|
||||
ModuleConfig(hs_module, hs_settings);
|
||||
LoadConfig();
|
||||
return 1;
|
||||
}
|
||||
|
@ -294,12 +285,11 @@ void ModFini()
|
|||
list_destroy_nodes(vhosts);
|
||||
}
|
||||
|
||||
#if UMODE_REGNICK
|
||||
#ifdef UMODE_REGNICK
|
||||
int hs_event_mode(CmdParams* cmdparams)
|
||||
{
|
||||
int add = 0;
|
||||
char *modes;
|
||||
User *cmdparams->source.user;
|
||||
char vhost[MAXHOST];
|
||||
|
||||
/* bail out if its not enabled */
|
||||
|
@ -310,9 +300,6 @@ int hs_event_mode(CmdParams* cmdparams)
|
|||
if (!is_synced || !load_synch)
|
||||
return 0;
|
||||
|
||||
cmdparams->source.user = finduser(cmdparams->av[0]);
|
||||
if (!cmdparams->source.user) /* User not found */
|
||||
return 1;
|
||||
if (is_oper(cmdparams->source.user))
|
||||
/* don't set a opers vhost. Most likely already done */
|
||||
return 1;
|
||||
|
@ -371,12 +358,6 @@ static void hsdat(char *nick, char *host, char *vhost, char *pass, char *who)
|
|||
save_vhost(map);
|
||||
}
|
||||
|
||||
static int hs_about(CmdParams* cmdparams)
|
||||
{
|
||||
privmsg_list(cmdparams->source.user->nick, hs_bot->nick, hs_help_about);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int hs_levels(CmdParams* cmdparams)
|
||||
{
|
||||
int t;
|
||||
|
@ -460,27 +441,28 @@ static int hs_bans(CmdParams* cmdparams)
|
|||
return NS_ERR_SYNTAX_ERROR;
|
||||
}
|
||||
|
||||
static void hs_listban(User * cmdparams->source.user)
|
||||
static void hs_listban(User* u)
|
||||
{
|
||||
hnode_t *hn;
|
||||
hscan_t hs;
|
||||
int i = 0;
|
||||
int i = 1;
|
||||
|
||||
hash_scan_begin(&hs, bannedvhosts);
|
||||
prefmsg(cmdparams->source.user->nick, hs_bot->nick, "Banned vhosts");
|
||||
prefmsg(u->nick, hs_bot->nick, "Banned vhosts");
|
||||
while ((hn = hash_scan_next(&hs)) != NULL) {
|
||||
prefmsg(cmdparams->source.user->nick, hs_bot->nick, "%d - %s", ++i,
|
||||
(char *) hnode_get(hn));
|
||||
prefmsg(u->nick, hs_bot->nick, "%d - %s", i, (char *)hnode_get(hn));
|
||||
i++;
|
||||
}
|
||||
prefmsg(cmdparams->source.user->nick, hs_bot->nick, "End of List.");
|
||||
prefmsg(u->nick, hs_bot->nick, "End of List.");
|
||||
|
||||
}
|
||||
static void hs_addban(User * cmdparams->source.user, char *ban)
|
||||
static void hs_addban(User* u, char *ban)
|
||||
{
|
||||
hnode_t *hn;
|
||||
char *host;
|
||||
|
||||
if (hash_lookup(bannedvhosts, ban) != NULL) {
|
||||
prefmsg(cmdparams->source.user->nick, hs_bot->nick,
|
||||
prefmsg(u->nick, hs_bot->nick,
|
||||
"%s already exists in the banned vhost list", ban);
|
||||
return;
|
||||
}
|
||||
|
@ -488,14 +470,14 @@ static void hs_addban(User * cmdparams->source.user, char *ban)
|
|||
strlcpy(host, ban, MAXHOST);
|
||||
hn = hnode_create(host);
|
||||
hash_insert(bannedvhosts, hn, host);
|
||||
prefmsg(cmdparams->source.user->nick, hs_bot->nick,
|
||||
prefmsg(u->nick, hs_bot->nick,
|
||||
"%s added to the banned vhosts list", ban);
|
||||
chanalert(hs_bot->nick, "%s added %s to the banned vhosts list",
|
||||
cmdparams->source.user->nick, ban);
|
||||
u->nick, ban);
|
||||
SaveBans();
|
||||
}
|
||||
|
||||
static void hs_delban(User * cmdparams->source.user, char *ban)
|
||||
static void hs_delban(User* u, char *ban)
|
||||
{
|
||||
hnode_t *hn;
|
||||
hscan_t hs;
|
||||
|
@ -504,7 +486,7 @@ static void hs_delban(User * cmdparams->source.user, char *ban)
|
|||
|
||||
i = atoi(ban);
|
||||
if ((i < 1) || (i > hash_count(bannedvhosts))) {
|
||||
prefmsg(cmdparams->source.user->nick, hs_bot->nick,
|
||||
prefmsg(u->nick, hs_bot->nick,
|
||||
"Invalid Entry. /msg %s bans for the list",
|
||||
hs_bot->nick);
|
||||
return;
|
||||
|
@ -515,22 +497,22 @@ static void hs_delban(User * cmdparams->source.user, char *ban)
|
|||
++j;
|
||||
if (i == j) {
|
||||
hash_scan_delete(bannedvhosts, hn);
|
||||
prefmsg(cmdparams->source.user->nick, hs_bot->nick,
|
||||
prefmsg(u->nick, hs_bot->nick,
|
||||
"Deleted %s from the banned vhost list",
|
||||
(char *) hnode_get(hn));
|
||||
chanalert(hs_bot->nick,
|
||||
"%s deleted %s from the banned vhost list",
|
||||
cmdparams->source.user->nick, (char *) hnode_get(hn));
|
||||
u->nick, (char *) hnode_get(hn));
|
||||
nlog(LOG_NOTICE,
|
||||
"%s deleted %s from the banned vhost list",
|
||||
cmdparams->source.user->nick, (char *) hnode_get(hn));
|
||||
u->nick, (char *) hnode_get(hn));
|
||||
free(hnode_get(hn));
|
||||
hnode_destroy(hn);
|
||||
SaveBans();
|
||||
return;
|
||||
}
|
||||
}
|
||||
prefmsg(cmdparams->source.user->nick, hs_bot->nick, "Entry %d was not found (Weird?!?)", i);
|
||||
prefmsg(u->nick, hs_bot->nick, "Entry %d was not found (Weird?!?)", i);
|
||||
}
|
||||
|
||||
static void SaveBans()
|
||||
|
@ -772,7 +754,6 @@ static void LoadHosts()
|
|||
{
|
||||
hs_map *map;
|
||||
lnode_t *hn;
|
||||
char buf[BUFSIZE];
|
||||
char *tmp;
|
||||
int count;
|
||||
char **LoadArry;
|
||||
|
@ -922,35 +903,6 @@ static void LoadConfig(void)
|
|||
|
||||
SET_SEGV_LOCATION();
|
||||
|
||||
if (GetConf((void *) &temp, CFGSTR, "Nick") < 0) {
|
||||
strlcpy(hs_bot->nick, "HostServ", MAXNICK);
|
||||
}
|
||||
else {
|
||||
strlcpy(hs_bot->nick, temp, MAXNICK);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "User") < 0) {
|
||||
strlcpy(hs_botinfo.user, "HS", MAXUSER);
|
||||
}
|
||||
else {
|
||||
strlcpy(hs_botinfo.user, temp, MAXUSER);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "Host") < 0) {
|
||||
strlcpy(hs_botinfo.host, me.name, MAXHOST);
|
||||
}
|
||||
else {
|
||||
strlcpy(hs_botinfo.host, temp, MAXHOST);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "RealName") < 0) {
|
||||
strlcpy(hs_botinfo.realname, "Network Virtual Host Service", MAXREALNAME);
|
||||
}
|
||||
else {
|
||||
strlcpy(hs_botinfo.realname, temp, MAXREALNAME);
|
||||
free(temp);
|
||||
}
|
||||
|
||||
GetConf((void *) &hs_cfg.view, CFGINT, "ViewLevel");
|
||||
if ((hs_cfg.view > NS_ULEVEL_ROOT) || (hs_cfg.list <= 0))
|
||||
hs_cfg.view = 100;
|
||||
|
@ -963,20 +915,6 @@ static void LoadConfig(void)
|
|||
GetConf((void *) &hs_cfg.list, CFGINT, "ListLevel");
|
||||
if ((hs_cfg.list > NS_ULEVEL_ROOT) || (hs_cfg.list <= 0))
|
||||
hs_cfg.list = 40;
|
||||
if(GetConf((void *) &hs_cfg.old, CFGINT, "ExpireDays") < 0) {
|
||||
hs_cfg.old = 60;
|
||||
}
|
||||
GetConf((void *) &hs_cfg.regnick, CFGBOOL, "UnetVhosts");
|
||||
if (hs_cfg.regnick < 0) {
|
||||
hs_cfg.regnick = 0;
|
||||
}
|
||||
if (GetConf((void *) &temp, CFGSTR, "UnetDomain") > 0) {
|
||||
strlcpy(hs_cfg.vhostdom, temp, MAXHOST);
|
||||
free(temp);
|
||||
} else {
|
||||
hs_cfg.vhostdom[0] = '\0';
|
||||
}
|
||||
|
||||
/* banned vhosts */
|
||||
if (GetConf((void *) &temp, CFGSTR, "BannedVhosts") >= 0) {
|
||||
host = strtok(temp, ";");
|
||||
|
|
|
@ -26,17 +26,6 @@
|
|||
#include "neostats.h"
|
||||
#include "loveserv.h"
|
||||
|
||||
static Bot *ls_bot;
|
||||
static BotInfo ls_botinfo =
|
||||
{
|
||||
"LoveServ",
|
||||
"LoveServ",
|
||||
"LS",
|
||||
"",
|
||||
"Network love service",
|
||||
};
|
||||
static Module* ls_module;
|
||||
|
||||
static int ls_rose(CmdParams* cmdparams);
|
||||
static int ls_kiss(CmdParams* cmdparams);
|
||||
static int ls_tonsil(CmdParams* cmdparams);
|
||||
|
@ -48,6 +37,9 @@ static int ls_lovenote(CmdParams* cmdparams);
|
|||
static int ls_apology(CmdParams* cmdparams);
|
||||
static int ls_thankyou(CmdParams* cmdparams);
|
||||
|
||||
static Bot *ls_bot;
|
||||
static Module* ls_module;
|
||||
|
||||
ModuleInfo module_info = {
|
||||
"LoveServ",
|
||||
"Network love service",
|
||||
|
@ -61,6 +53,15 @@ ModuleInfo module_info = {
|
|||
0,
|
||||
};
|
||||
|
||||
static BotInfo ls_botinfo =
|
||||
{
|
||||
"LoveServ",
|
||||
"LoveServ",
|
||||
"LS",
|
||||
"",
|
||||
"Network love service",
|
||||
};
|
||||
|
||||
static bot_cmd ls_commands[]=
|
||||
{
|
||||
{"ROSE", ls_rose, 1, 0, ls_help_rose, ls_help_rose_oneline },
|
||||
|
@ -78,13 +79,14 @@ static bot_cmd ls_commands[]=
|
|||
|
||||
static bot_setting ls_settings[]=
|
||||
{
|
||||
{"NICK", &ls_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"" },
|
||||
{"USER", &ls_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"" },
|
||||
{"NICK", &ls_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"LoveServ" },
|
||||
{"ALTNICK", &ls_botinfo.altnick,SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"LoveServ" },
|
||||
{"USER", &ls_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"LS" },
|
||||
{"HOST", &ls_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" },
|
||||
{"REALNAME",&ls_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"" },
|
||||
{"REALNAME",&ls_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"Network love service" },
|
||||
};
|
||||
|
||||
static int ls_event_online(char **av, int ac)
|
||||
static int ls_event_online(CmdParams* cmdparams)
|
||||
{
|
||||
ls_bot = init_bot(ls_module, &ls_botinfo, services_bot_modes, BOT_FLAG_DEAF, ls_commands, ls_settings);
|
||||
return 1;
|
||||
|
@ -97,24 +99,7 @@ ModuleEvent module_events[] = {
|
|||
|
||||
int ModInit(Module* mod_ptr)
|
||||
{
|
||||
char *temp = NULL;
|
||||
|
||||
if(GetConf((void *) &temp, CFGSTR, "Nick") > 0) {
|
||||
strlcpy(ls_botinfo.nick , temp, MAXNICK);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "User") > 0) {
|
||||
strlcpy(ls_botinfo.user, temp, MAXUSER);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "Host") > 0) {
|
||||
strlcpy(ls_botinfo.host, temp, MAXHOST);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "RealName") > 0) {
|
||||
strlcpy(ls_botinfo.realname, temp, MAXREALNAME);
|
||||
free(temp);
|
||||
}
|
||||
ModuleConfig(ls_module, ls_settings);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -75,6 +75,7 @@ static bot_cmd ms_commands[]=
|
|||
static bot_setting ms_settings[]=
|
||||
{
|
||||
{"NICK", &ms_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"MoraleServ" },
|
||||
{"ALTNICK", &ms_botinfo.altnick,SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"MoraleServ" },
|
||||
{"USER", &ms_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"MS" },
|
||||
{"HOST", &ms_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" },
|
||||
{"REALNAME",&ms_botinfo.realname,SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName",NULL, ns_help_set_realname, NULL, (void*)"Network morale service" },
|
||||
|
@ -93,24 +94,7 @@ ModuleEvent module_events[] = {
|
|||
|
||||
int ModInit(Module* mod_ptr)
|
||||
{
|
||||
char *temp = NULL;
|
||||
|
||||
if(GetConf((void *) &temp, CFGSTR, "Nick") > 0) {
|
||||
strlcpy(ms_botinfo.nick , temp, MAXNICK);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "User") > 0) {
|
||||
strlcpy(ms_botinfo.user, temp, MAXUSER);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "Host") > 0) {
|
||||
strlcpy(ms_botinfo.host, temp, MAXHOST);
|
||||
free(temp);
|
||||
}
|
||||
if(GetConf((void *) &temp, CFGSTR, "RealName") > 0) {
|
||||
strlcpy(ms_botinfo.realname, temp, MAXREALNAME);
|
||||
free(temp);
|
||||
}
|
||||
ModuleConfig(ms_module, ms_settings);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,9 +27,8 @@
|
|||
|
||||
static char announce_buf[BUFSIZE];
|
||||
|
||||
static int StatsMidnight(void);
|
||||
static int ss_event_ctcpversion(CmdParams* cmdparams);
|
||||
static int ss_event_online(CmdParams* cmdparams);
|
||||
int ss_event_online(CmdParams* cmdparams);
|
||||
static int ss_event_pong(CmdParams* cmdparams);
|
||||
static int ss_event_away(CmdParams* cmdparams);
|
||||
static int ss_event_server(CmdParams* cmdparams);
|
||||
|
@ -85,61 +84,49 @@ static int check_interval()
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
static void
|
||||
announce(int announcetype, const char *msg)
|
||||
{
|
||||
switch(announcetype) {
|
||||
case 3:
|
||||
wallops (ss_bot->nick, "%s", msg);
|
||||
break;
|
||||
case 2:
|
||||
globops (ss_bot->nick, "%s", msg);
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
chanalert (ss_bot->nick, "%s", msg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
announce_record(const char *msg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if(StatServ.recordalert < 0) {
|
||||
return 1;
|
||||
if(StatServ.recordalert < 0 || check_interval() < 0) {
|
||||
return;
|
||||
}
|
||||
if (check_interval() > 0) {
|
||||
va_start (ap, msg);
|
||||
ircvsnprintf (announce_buf, BUFSIZE, msg, ap);
|
||||
va_end (ap);
|
||||
switch(StatServ.recordalert) {
|
||||
case 3:
|
||||
wallops (ss_bot->nick, "%s", announce_buf);
|
||||
break;
|
||||
case 2:
|
||||
globops (ss_bot->nick, "%s", announce_buf);
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
chanalert (ss_bot->nick, "%s", announce_buf);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
va_start (ap, msg);
|
||||
ircvsnprintf (announce_buf, BUFSIZE, msg, ap);
|
||||
va_end (ap);
|
||||
announce(StatServ.recordalert, announce_buf);
|
||||
}
|
||||
|
||||
static int
|
||||
static void
|
||||
announce_lag(const char *msg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if(StatServ.lagalert < 0) {
|
||||
return 1;
|
||||
if(StatServ.lagalert < 0 || check_interval() < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (check_interval() > 0) {
|
||||
va_start (ap, msg);
|
||||
ircvsnprintf (announce_buf, BUFSIZE, msg, ap);
|
||||
va_end (ap);
|
||||
switch(StatServ.lagalert) {
|
||||
case 3:
|
||||
wallops (ss_bot->nick, "%s", announce_buf);
|
||||
break;
|
||||
case 2:
|
||||
globops (ss_bot->nick, "%s", announce_buf);
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
chanalert (ss_bot->nick, "%s", announce_buf);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
va_start (ap, msg);
|
||||
ircvsnprintf (announce_buf, BUFSIZE, msg, ap);
|
||||
va_end (ap);
|
||||
announce(StatServ.lagalert, announce_buf);
|
||||
}
|
||||
|
||||
static CVersions *findversions(char *name)
|
||||
|
@ -200,13 +187,13 @@ int ss_event_ctcpversion(CmdParams* cmdparams)
|
|||
{
|
||||
lnode_t *node;
|
||||
CVersions *clientv;
|
||||
char *nocols = cmdparams->cmdparams->av[1];
|
||||
char *nocols = cmdparams->av[1];
|
||||
|
||||
strip_mirc_codes(nocols);
|
||||
|
||||
clientv = findversions(nocols);
|
||||
if (clientv) {
|
||||
nlog(LOG_DEBUG2, "Found Client Version Node %s", nocols);
|
||||
nlog(LOG_DEBUG2, "Found version: %s", nocols);
|
||||
clientv->count++;
|
||||
return 1;
|
||||
}
|
||||
|
@ -215,8 +202,7 @@ int ss_event_ctcpversion(CmdParams* cmdparams)
|
|||
clientv->count = 1;
|
||||
node = lnode_create(clientv);
|
||||
list_append(Vhead, node);
|
||||
nlog(LOG_DEBUG2, "Added Version to List %s",
|
||||
clientv->name);
|
||||
nlog(LOG_DEBUG2, "Added version: %s", clientv->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -261,7 +247,7 @@ int ss_event_delchan(CmdParams* cmdparams)
|
|||
lnode_destroy(ln);
|
||||
free(cs);
|
||||
} else {
|
||||
nlog(LOG_WARNING, "Ehhh, Couldn't find channel %s when deleting out of stats", cmdparams->av[0]);
|
||||
nlog(LOG_WARNING, "Couldn't find channel %s when deleting from stats", cmdparams->av[0]);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -305,7 +291,7 @@ int ss_event_part(CmdParams* cmdparams)
|
|||
{
|
||||
CStats *cs;
|
||||
/* only check exclusions after increasing channel count */
|
||||
if (StatServ.exclusions && (IsExcluded(cmdparams->channel)|| IsExcluded(cmdparams->source.user)))) {
|
||||
if (StatServ.exclusions && (IsExcluded(cmdparams->channel) || IsExcluded(cmdparams->source.user))) {
|
||||
return 1;
|
||||
}
|
||||
cs = findchanstats(cmdparams->channel->name);
|
||||
|
@ -329,6 +315,7 @@ int ss_event_topic(CmdParams* cmdparams)
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ss_event_kick(CmdParams* cmdparams)
|
||||
{
|
||||
CStats *cs;
|
||||
|
@ -337,7 +324,6 @@ int ss_event_kick(CmdParams* cmdparams)
|
|||
if (StatServ.exclusions && IsExcluded(cmdparams->channel)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
cs = findchanstats(cmdparams->channel->name);
|
||||
if (cs) {
|
||||
IncreaseKicks(cs);
|
||||
|
@ -347,13 +333,13 @@ int ss_event_kick(CmdParams* cmdparams)
|
|||
}
|
||||
}
|
||||
return 1;
|
||||
|
||||
}
|
||||
|
||||
CStats *findchanstats(char *name)
|
||||
{
|
||||
CStats *cs;
|
||||
lnode_t *cn;
|
||||
|
||||
cn = list_find(Chead, name, comparef);
|
||||
if (cn) {
|
||||
cs = lnode_get(cn);
|
||||
|
@ -388,6 +374,7 @@ int ss_event_server(CmdParams* cmdparams)
|
|||
int ss_event_squit(CmdParams* cmdparams)
|
||||
{
|
||||
SStats *ss;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
DecreaseServers();
|
||||
ss = findstats(cmdparams->source.server->name);
|
||||
|
@ -452,7 +439,6 @@ int ss_event_mode(CmdParams* cmdparams)
|
|||
"Unable to find stats for %s", cmdparams->source.user->server->name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
modes = cmdparams->av[1];
|
||||
while (*modes) {
|
||||
switch (*modes) {
|
||||
|
@ -567,13 +553,10 @@ int ss_event_signon(CmdParams* cmdparams)
|
|||
announce_record("\2NEW NETWORK RECORD!\2 Wow, a New Global User record has been reached with %ld users!",
|
||||
stats_network.users);
|
||||
}
|
||||
|
||||
if (stats_network.users > daily.users) {
|
||||
daily.users = stats_network.users;
|
||||
daily.t_users = me.now;
|
||||
}
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -585,12 +568,9 @@ int ss_event_pong(CmdParams* cmdparams)
|
|||
/* we don't want negative pings! */
|
||||
if (cmdparams->source.server->ping < 0)
|
||||
return -1;
|
||||
|
||||
|
||||
ss = findstats(cmdparams->source.server->name);
|
||||
if (!ss)
|
||||
return -1;
|
||||
|
||||
/* this is a tidy up from old versions of StatServ that used to have negative pings! */
|
||||
if (ss->lowest_ping < 0) {
|
||||
ss->lowest_ping = 0;
|
||||
|
@ -598,7 +578,6 @@ int ss_event_pong(CmdParams* cmdparams)
|
|||
if (ss->highest_ping < 0) {
|
||||
ss->highest_ping = 0;
|
||||
}
|
||||
|
||||
if (cmdparams->source.server->ping > ss->highest_ping) {
|
||||
ss->highest_ping = cmdparams->source.server->ping;
|
||||
ss->t_highest_ping = me.now;
|
||||
|
@ -607,40 +586,11 @@ int ss_event_pong(CmdParams* cmdparams)
|
|||
ss->lowest_ping = cmdparams->source.server->ping;
|
||||
ss->t_lowest_ping = me.now;
|
||||
}
|
||||
|
||||
/* ok, updated the statistics, now lets see if this server is "lagged out" */
|
||||
if (cmdparams->source.server->ping > StatServ.lagtime) {
|
||||
announce_lag("\2%s\2 is lagged out with a ping of %d",
|
||||
cmdparams->source.server->name, cmdparams->source.server->ping);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern bot_cmd ss_commands[];
|
||||
extern bot_setting ss_settings[];
|
||||
Bot *ss_bot;
|
||||
BotInfo ss_botinfo =
|
||||
{
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
};
|
||||
Module* ss_module;
|
||||
|
||||
int ss_event_online(CmdParams* cmdparams)
|
||||
{
|
||||
SET_SEGV_LOCATION();
|
||||
ss_bot = init_bot (ss_module, &ss_botinfo, services_bot_modes, BOT_FLAG_RESTRICT_OPERS|BOT_FLAG_DEAF, ss_commands, ss_settings);
|
||||
StatServ.onchan = 1;
|
||||
/* now that we are online, setup the timer to save the Stats database every so often */
|
||||
add_timer (ss_module, SaveStats, "SaveStats", DBSAVETIME);
|
||||
add_timer (ss_module, ss_html, "ss_html", 3600);
|
||||
/* also add a timer to check if its midnight (to reset the daily stats */
|
||||
add_timer (ss_module, StatsMidnight, "StatsMidnight", 60);
|
||||
add_timer (ss_module, DelOldChan, "DelOldChan", 3600);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -651,7 +601,7 @@ SStats *new_stats(const char *name)
|
|||
|
||||
SET_SEGV_LOCATION();
|
||||
nlog(LOG_DEBUG2, "new_stats(%s)", name);
|
||||
s = scalloc(sizeof(SStats), 1);
|
||||
s = scalloc(sizeof(SStats));
|
||||
if (!s) {
|
||||
FATAL_ERROR("Out of memory.")
|
||||
}
|
||||
|
@ -665,7 +615,7 @@ SStats *new_stats(const char *name)
|
|||
sn = hnode_create(s);
|
||||
if (hash_isfull(Shead)) {
|
||||
nlog(LOG_CRITICAL, "StatServ Server hash is full!");
|
||||
free s;
|
||||
free(s);
|
||||
return NULL;
|
||||
}
|
||||
hash_insert(Shead, sn, s->name);
|
||||
|
|
|
@ -38,14 +38,14 @@ static int ss_operlist(CmdParams* cmdparams);
|
|||
#ifdef GOTBOTMODE
|
||||
static int ss_botlist(CmdParams* cmdparams);
|
||||
#endif
|
||||
static int ss_version(CmdParams* cmdparams);
|
||||
static int ss_about(CmdParams* cmdparams);
|
||||
static int ss_server(CmdParams* cmdparams);
|
||||
static int ss_map(CmdParams* cmdparams);
|
||||
static int ss_netstats(CmdParams* cmdparams);
|
||||
static int ss_clientversions(CmdParams* cmdparams);
|
||||
static int ss_forcehtml(CmdParams* cmdparams);
|
||||
static void ss_Config(void);
|
||||
|
||||
Bot *ss_bot;
|
||||
static Module* ss_module;
|
||||
|
||||
ModuleInfo module_info = {
|
||||
"statserv",
|
||||
|
@ -60,72 +60,69 @@ ModuleInfo module_info = {
|
|||
0,
|
||||
};
|
||||
|
||||
static void ss_Config(void)
|
||||
static BotInfo ss_botinfo =
|
||||
{
|
||||
char *tmp;
|
||||
"StatServ",
|
||||
"StatServ",
|
||||
"SS",
|
||||
"",
|
||||
"Statistics service",
|
||||
};
|
||||
|
||||
static bot_cmd ss_commands[]=
|
||||
{
|
||||
{"SERVER", ss_server, 0, 0, ss_help_server, ss_help_server_oneline},
|
||||
{"MAP", ss_map, 0, 0, ss_help_map, ss_help_map_oneline},
|
||||
{"CHAN", ss_chans, 0, 0, ss_help_chan, ss_help_chan_oneline},
|
||||
{"NETSTATS", ss_netstats, 0, 0, ss_help_netstats, ss_help_netstats_oneline},
|
||||
{"DAILY", ss_daily, 0, 0, ss_help_daily, ss_help_daily_oneline},
|
||||
{"TLDMAP", ss_tld_map, 0, 0, ss_help_tldmap, ss_help_tldmap_oneline},
|
||||
{"OPERLIST", ss_operlist, 0, 0, ss_help_operlist, ss_help_operlist_oneline},
|
||||
#ifdef GOTBOTMODE
|
||||
{"BOTLIST", ss_botlist, 0, 0, ss_help_botlist, ss_help_botlist_oneline},
|
||||
#endif
|
||||
{"CLIENTVERSIONS", ss_clientversions, 0, 0, ss_help_clientversions, ss_help_clientversions_oneline},
|
||||
{"FORCEHTML", ss_forcehtml, 0, NS_ULEVEL_ADMIN, ss_help_forcehtml, ss_help_forcehtml_oneline},
|
||||
{"STATS", ss_stats, 1, NS_ULEVEL_ADMIN, ss_help_stats, ss_help_stats_oneline},
|
||||
{NULL, NULL, 0, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
static bot_setting ss_settings[]=
|
||||
{
|
||||
{"NICK", &ss_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick, NULL, (void*)"StatServ" },
|
||||
{"ALTNICK", &ss_botinfo.altnick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "AltNick", NULL, ns_help_set_altnick, NULL, (void*)"StatServ" },
|
||||
{"USER", &ss_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user, NULL, (void*)"SS" },
|
||||
{"HOST", &ss_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host, NULL, (void*)"" },
|
||||
{"REALNAME", &ss_botinfo.realname, SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName", NULL, ns_help_set_realname, NULL, (void*)"Statistics service" },
|
||||
{"HTML", &StatServ.html, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "HTML_Enabled",NULL, ss_help_set_html},
|
||||
{"HTMLPATH", &StatServ.htmlpath, SET_TYPE_STRING, 0, MAXPATH, NS_ULEVEL_ADMIN, "HTML_Path", NULL, ss_help_set_htmlpath },
|
||||
{"MSGINTERVAL", &StatServ.msginterval, SET_TYPE_INT, 1, 99, NS_ULEVEL_ADMIN, "MsgInterval", "seconds", ss_help_set_msginterval },
|
||||
{"MSGLIMIT", &StatServ.msglimit, SET_TYPE_INT, 1, 99, NS_ULEVEL_ADMIN, "MsgLimit", NULL, ss_help_set_msglimit },
|
||||
{"LAGTIME", &StatServ.lagtime, SET_TYPE_INT, 1, 256, NS_ULEVEL_ADMIN, "LagTime", "seconds", ss_help_set_lagtime },
|
||||
{"LAGALERT", &StatServ.lagalert, SET_TYPE_INT, 0, 3, NS_ULEVEL_ADMIN, "LagAlert", NULL, ss_help_set_lagalert },
|
||||
{"RECORDALERT", &StatServ.recordalert, SET_TYPE_INT, 0, 3, NS_ULEVEL_ADMIN, "RecordAlert", NULL, ss_help_set_recordalert },
|
||||
{"USEEXCLUSIONS",&StatServ.exclusions, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "Exclusions", NULL, ss_help_set_exclusions },
|
||||
{NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
int ss_event_online(CmdParams* cmdparams)
|
||||
{
|
||||
SET_SEGV_LOCATION();
|
||||
|
||||
if (GetConf((void *) &tmp, CFGSTR, "Nick") < 0) {
|
||||
strlcpy(ss_botinfo.nick, "StatServ", MAXNICK);
|
||||
} else {
|
||||
strlcpy(ss_botinfo.nick, tmp, MAXNICK);
|
||||
free(tmp);
|
||||
}
|
||||
if (GetConf((void *) &tmp, CFGSTR, "User") < 0) {
|
||||
strlcpy(ss_botinfo.user, "SS", MAXUSER);
|
||||
} else {
|
||||
strlcpy(ss_botinfo.user, tmp, MAXUSER);
|
||||
free(tmp);
|
||||
}
|
||||
if (GetConf((void *) &tmp, CFGSTR, "Host") < 0) {
|
||||
strlcpy(ss_botinfo.host, me.name, MAXHOST);
|
||||
} else {
|
||||
strlcpy(ss_botinfo.host, tmp, MAXHOST);
|
||||
free(tmp);
|
||||
}
|
||||
if (GetConf((void *) &tmp, CFGSTR, "RealName") < 0) {
|
||||
ircsnprintf(ss_botinfo.realname, MAXREALNAME, "/msg %s help",
|
||||
ss_botinfo.nick);
|
||||
} else {
|
||||
strlcpy(ss_botinfo.realname, tmp, MAXREALNAME);
|
||||
free(tmp);
|
||||
}
|
||||
if (GetConf((void *) &StatServ.lagtime, CFGINT, "LagTime") < 0) {
|
||||
StatServ.lagtime = 30;
|
||||
}
|
||||
if (GetConf((void *) &StatServ.exclusions, CFGBOOL, "Exclusions") < 0) {
|
||||
StatServ.exclusions = 0;
|
||||
}
|
||||
if (GetConf((void *) &StatServ.lagalert, CFGINT, "LagAlert") < 0) {
|
||||
StatServ.lagalert = 1;
|
||||
}
|
||||
if (GetConf((void *) &StatServ.recordalert, CFGINT, "RecordAlert") < 0) {
|
||||
StatServ.recordalert = 1;
|
||||
}
|
||||
if (GetConf((void *) &StatServ.msginterval , CFGINT, "MsgInterval") < 0) {
|
||||
StatServ.msginterval = 60;
|
||||
}
|
||||
if (GetConf((void *) &StatServ.msglimit , CFGINT, "MsgLimit") < 0) {
|
||||
StatServ.msglimit = 5;
|
||||
}
|
||||
if (GetConf((void *) &tmp, CFGSTR, "HTML_Path") < 0) {
|
||||
StatServ.html = 0;
|
||||
StatServ.htmlpath[0] = 0;
|
||||
} else {
|
||||
/* assume that html is enabled if we don't have a setting for it */
|
||||
if (GetConf((void *) &StatServ.html, CFGINT, "HTML_Enabled") < 0) {
|
||||
StatServ.html = 1;
|
||||
}
|
||||
strlcpy(StatServ.htmlpath, tmp, MAXPATH);
|
||||
free(tmp);
|
||||
}
|
||||
ss_bot = init_bot (ss_module, &ss_botinfo, services_bot_modes, BOT_FLAG_RESTRICT_OPERS|BOT_FLAG_DEAF, ss_commands, ss_settings);
|
||||
StatServ.onchan = 1;
|
||||
/* now that we are online, setup the timer to save the Stats database every so often */
|
||||
add_timer (ss_module, SaveStats, "SaveStats", DBSAVETIME);
|
||||
add_timer (ss_module, ss_html, "ss_html", 3600);
|
||||
/* also add a timer to check if its midnight (to reset the daily stats */
|
||||
add_timer (ss_module, StatsMidnight, "StatsMidnight", 60);
|
||||
add_timer (ss_module, DelOldChan, "DelOldChan", 3600);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ModInit(Module* mod_ptr)
|
||||
{
|
||||
Server *ss;
|
||||
User *cmdparams->source.user;
|
||||
User *u;
|
||||
hnode_t *node;
|
||||
hscan_t scan;
|
||||
#ifdef SQLSRV
|
||||
|
@ -133,8 +130,8 @@ int ModInit(Module* mod_ptr)
|
|||
#endif
|
||||
int count, i;
|
||||
Channel *c;
|
||||
char **cmdparams->av;
|
||||
int cmdparams->ac = 0;
|
||||
char **av;
|
||||
int ac = 0;
|
||||
char *chan;
|
||||
lnode_t *chanmem;
|
||||
|
||||
|
@ -146,7 +143,7 @@ int ModInit(Module* mod_ptr)
|
|||
/* we want nickip messages */
|
||||
me.want_nickip = 1;
|
||||
|
||||
ss_Config();
|
||||
ModuleConfig(ss_module, ss_settings);
|
||||
if (StatServ.html && StatServ.htmlpath[0] == 0) {
|
||||
nlog(LOG_NOTICE,
|
||||
"StatServ HTML stats disabled as HTML_PATH is not set");
|
||||
|
@ -158,24 +155,24 @@ int ModInit(Module* mod_ptr)
|
|||
hash_scan_begin(&scan, sh);
|
||||
while ((node = hash_scan_next(&scan)) != NULL) {
|
||||
ss = hnode_get(node);
|
||||
cmdparams->ac = 0;
|
||||
AddStringToList(&cmdparams->av, ss->name, &cmdparams->ac);
|
||||
ss_event_server(cmdparams->av, cmdparams->ac);
|
||||
free(cmdparams->av);
|
||||
cmdparams->ac = 0;
|
||||
ac = 0;
|
||||
AddStringToList(&av, ss->name, &ac);
|
||||
ss_event_server(av, ac);
|
||||
free(av);
|
||||
ac = 0;
|
||||
nlog(LOG_DEBUG2, "Added Server %s to StatServ List", ss->name);
|
||||
}
|
||||
hash_scan_begin(&scan, uh);
|
||||
while ((node = hash_scan_next(&scan)) != NULL) {
|
||||
cmdparams->source.user = hnode_get(node);
|
||||
cmdparams->ac = 0;
|
||||
AddStringToList(&cmdparams->av, cmdparams->source.user->nick, &cmdparams->ac);
|
||||
ss_event_signon(cmdparams->av, cmdparams->ac);
|
||||
AddStringToList(&cmdparams->av, cmdparams->source.user->modes, &cmdparams->ac);
|
||||
ss_event_mode(cmdparams->av, cmdparams->ac);
|
||||
free(cmdparams->av);
|
||||
cmdparams->ac = 0;
|
||||
nlog(LOG_DEBUG2, "Add user %s to StatServ List", cmdparams->source.user->nick);
|
||||
u = hnode_get(node);
|
||||
ac = 0;
|
||||
AddStringToList(&av, u->nick, &ac);
|
||||
ss_event_signon(av, ac);
|
||||
AddStringToList(&av, u->modes, &ac);
|
||||
ss_event_mode(av, ac);
|
||||
free(av);
|
||||
ac = 0;
|
||||
nlog(LOG_DEBUG2, "Add user %s to StatServ List", u->nick);
|
||||
}
|
||||
hash_scan_begin(&scan, ch);
|
||||
while ((node = hash_scan_next(&scan)) != NULL) {
|
||||
|
@ -183,22 +180,21 @@ int ModInit(Module* mod_ptr)
|
|||
count = list_count(c->chanmembers);
|
||||
chanmem = list_first(c->chanmembers);
|
||||
chan = lnode_get(chanmem);
|
||||
cmdparams->ac = 0;
|
||||
AddStringToList(&cmdparams->av, c->name, &cmdparams->ac);
|
||||
ss_event_newchan(cmdparams->av, cmdparams->ac);
|
||||
free(cmdparams->av);
|
||||
cmdparams->ac = 0;
|
||||
ac = 0;
|
||||
AddStringToList(&av, c->name, &ac);
|
||||
ss_event_newchan(av, ac);
|
||||
free(av);
|
||||
ac = 0;
|
||||
for (i = 1; i <= count; i++) {
|
||||
nlog(LOG_DEBUG2, "Chanjoin %s", c->name);
|
||||
cmdparams->ac = 0;
|
||||
AddStringToList(&cmdparams->av, c->name, &cmdparams->ac);
|
||||
AddStringToList(&cmdparams->av, chan, &cmdparams->ac);
|
||||
ss_event_join(cmdparams->av, cmdparams->ac);
|
||||
free(cmdparams->av);
|
||||
cmdparams->ac = 0;
|
||||
ac = 0;
|
||||
AddStringToList(&av, c->name, &ac);
|
||||
AddStringToList(&av, chan, &ac);
|
||||
ss_event_join(av, ac);
|
||||
free(av);
|
||||
ac = 0;
|
||||
if (i < count) {
|
||||
chanmem =
|
||||
list_next(c->chanmembers, chanmem);
|
||||
chanmem = list_next(c->chanmembers, chanmem);
|
||||
chan = lnode_get(chanmem);
|
||||
}
|
||||
}
|
||||
|
@ -254,43 +250,6 @@ void ModFini()
|
|||
#endif
|
||||
}
|
||||
|
||||
bot_cmd ss_commands[]=
|
||||
{
|
||||
{"ABOUT", ss_about, 0, 0, ss_help_about, ss_help_about_oneline},
|
||||
{"VERSION", ss_version, 0, 0, ss_help_version, ss_help_version_oneline},
|
||||
{"SERVER", ss_server, 0, 0, ss_help_server, ss_help_server_oneline},
|
||||
{"MAP", ss_map, 0, 0, ss_help_map, ss_help_map_oneline},
|
||||
{"CHAN", ss_chans, 0, 0, ss_help_chan, ss_help_chan_oneline},
|
||||
{"NETSTATS", ss_netstats, 0, 0, ss_help_netstats, ss_help_netstats_oneline},
|
||||
{"DAILY", ss_daily, 0, 0, ss_help_daily, ss_help_daily_oneline},
|
||||
{"TLDMAP", ss_tld_map, 0, 0, ss_help_tldmap, ss_help_tldmap_oneline},
|
||||
{"OPERLIST", ss_operlist, 0, 0, ss_help_operlist, ss_help_operlist_oneline},
|
||||
#ifdef GOTBOTMODE
|
||||
{"BOTLIST", ss_botlist, 0, 0, ss_help_botlist, ss_help_botlist_oneline},
|
||||
#endif
|
||||
{"CLIENTVERSIONS", ss_clientversions, 0, 0, ss_help_clientversions, ss_help_clientversions_oneline},
|
||||
{"FORCEHTML", ss_forcehtml, 0, NS_ULEVEL_ADMIN, ss_help_forcehtml, ss_help_forcehtml_oneline},
|
||||
{"STATS", ss_stats, 1, NS_ULEVEL_ADMIN, ss_help_stats, ss_help_stats_oneline},
|
||||
{NULL, NULL, 0, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
bot_setting ss_settings[]=
|
||||
{
|
||||
{"NICK", &ss_botinfo.nick, SET_TYPE_NICK, 0, MAXNICK, NS_ULEVEL_ADMIN, "Nick", NULL, ns_help_set_nick },
|
||||
{"USER", &ss_botinfo.user, SET_TYPE_USER, 0, MAXUSER, NS_ULEVEL_ADMIN, "User", NULL, ns_help_set_user },
|
||||
{"HOST", &ss_botinfo.host, SET_TYPE_HOST, 0, MAXHOST, NS_ULEVEL_ADMIN, "Host", NULL, ns_help_set_host },
|
||||
{"REALNAME", &ss_botinfo.realname, SET_TYPE_REALNAME, 0, MAXREALNAME, NS_ULEVEL_ADMIN, "RealName", NULL, ns_help_set_realname },
|
||||
{"HTML", &StatServ.html, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "HTML_Enabled",NULL, ss_help_set_html},
|
||||
{"HTMLPATH", &StatServ.htmlpath, SET_TYPE_STRING, 0, MAXPATH, NS_ULEVEL_ADMIN, "HTML_Path", NULL, ss_help_set_htmlpath },
|
||||
{"MSGINTERVAL", &StatServ.msginterval, SET_TYPE_INT, 1, 99, NS_ULEVEL_ADMIN, "MsgInterval", "seconds", ss_help_set_msginterval },
|
||||
{"MSGLIMIT", &StatServ.msglimit, SET_TYPE_INT, 1, 99, NS_ULEVEL_ADMIN, "MsgLimit", NULL, ss_help_set_msglimit },
|
||||
{"LAGTIME", &StatServ.lagtime, SET_TYPE_INT, 1, 256, NS_ULEVEL_ADMIN, "LagTime", "seconds", ss_help_set_lagtime },
|
||||
{"LAGALERT", &StatServ.lagalert, SET_TYPE_INT, 0, 3, NS_ULEVEL_ADMIN, "LagAlert", NULL, ss_help_set_lagalert },
|
||||
{"RECORDALERT", &StatServ.recordalert, SET_TYPE_INT, 0, 3, NS_ULEVEL_ADMIN, "RecordAlert", NULL, ss_help_set_recordalert },
|
||||
{"USEEXCLUSIONS",&StatServ.exclusions, SET_TYPE_BOOLEAN, 0, 0, NS_ULEVEL_ADMIN, "Exclusions", NULL, ss_help_set_exclusions },
|
||||
{NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
int topchan(const void *key1, const void *key2)
|
||||
{
|
||||
const CStats *chan1 = key1;
|
||||
|
@ -541,22 +500,6 @@ static int ss_tld_map(CmdParams* cmdparams)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int ss_version(CmdParams* cmdparams)
|
||||
{
|
||||
SET_SEGV_LOCATION();
|
||||
prefmsg(cmdparams->source.user->nick, ss_bot->nick, "\2%s Version Information\2", ss_bot->nick);
|
||||
prefmsg(cmdparams->source.user->nick, ss_bot->nick, "%s Version: %s Compiled %s at %s", ss_bot->nick,
|
||||
module_info.version, module_info.build_date, module_info.build_time);
|
||||
prefmsg(cmdparams->source.user->nick, ss_bot->nick, "http://www.neostats.net");
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ss_about(CmdParams* cmdparams)
|
||||
{
|
||||
privmsg_list(cmdparams->source.user->nick, ss_bot->nick, ss_help_about);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int ss_netstats(CmdParams* cmdparams)
|
||||
{
|
||||
SET_SEGV_LOCATION();
|
||||
|
@ -601,7 +544,7 @@ static int ss_daily(CmdParams* cmdparams)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void makemap(char *uplink, User * cmdparams->source.user, int level)
|
||||
static void makemap(char *uplink, User * u, int level)
|
||||
{
|
||||
hscan_t hs;
|
||||
hnode_t *sn;
|
||||
|
@ -617,27 +560,27 @@ static void makemap(char *uplink, User * cmdparams->source.user, int level)
|
|||
if ((level == 0) && (s->uplink[0] == 0)) {
|
||||
/* its the root server */
|
||||
if (StatServ.exclusions && IsExcluded(s)) {
|
||||
makemap(s->name, cmdparams->source.user, level);
|
||||
makemap(s->name, u, level);
|
||||
}
|
||||
prefmsg(cmdparams->source.user->nick, ss_bot->nick,
|
||||
prefmsg(u->nick, ss_bot->nick,
|
||||
"\2%-45s [ %d/%d ] [ %d/%d ] [ %ld/%ld ]",
|
||||
ss->name, ss->users, (int)ss->maxusers,
|
||||
ss->opers, ss->maxopers, (long)s->ping, ss->highest_ping);
|
||||
makemap(s->name, cmdparams->source.user, level + 1);
|
||||
makemap(s->name, u, level + 1);
|
||||
} else if ((level > 0) && !ircstrcasecmp(uplink, s->uplink)) {
|
||||
if (StatServ.exclusions && IsExcluded(s)) {
|
||||
makemap(s->name, cmdparams->source.user, level);
|
||||
makemap(s->name, u, level);
|
||||
}
|
||||
/* its not the root server */
|
||||
buf[0]='\0';
|
||||
for (i = 1; i < level; i++) {
|
||||
strlcat (buf, " |", 256);
|
||||
}
|
||||
prefmsg(cmdparams->source.user->nick, ss_bot->nick,
|
||||
prefmsg(u->nick, ss_bot->nick,
|
||||
"%s \\_\2%-40s [ %d/%d ] [ %d/%d ] [ %ld/%ld ]",
|
||||
buf, ss->name, ss->users, (int)ss->maxusers,
|
||||
ss->opers, ss->maxopers, (long)s->ping, ss->highest_ping);
|
||||
makemap(s->name, cmdparams->source.user, level + 1);
|
||||
makemap(s->name, u, level + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,10 +40,8 @@
|
|||
/* but only save data older than 1 hour! */
|
||||
#define PROGCHANTIME 3600
|
||||
|
||||
extern BotInfo ss_botinfo;
|
||||
extern Bot *ss_bot;
|
||||
extern ModuleInfo module_info;
|
||||
extern Module* ss_module;
|
||||
|
||||
typedef struct tld_ TLD;
|
||||
typedef struct region_ Region;
|
||||
|
@ -166,6 +164,7 @@ struct region_ {
|
|||
int daily_users;
|
||||
};
|
||||
|
||||
int StatsMidnight(void);
|
||||
/* statserv.c */
|
||||
void statserv(char *);
|
||||
int topchan(const void *key1, const void *key2);
|
||||
|
|
|
@ -322,7 +322,6 @@ extern hash_t *ch;
|
|||
/* this is the dns structure */
|
||||
extern adns_state ads;
|
||||
|
||||
|
||||
/* version info */
|
||||
extern const char version_date[], version_time[];
|
||||
|
||||
|
@ -861,7 +860,7 @@ int sswhois_cmd (const char *target, const char *swhois);
|
|||
int ssvsnick_cmd (const char *target, const char *newnick);
|
||||
int ssvsjoin_cmd (const char *target, const char *chan);
|
||||
int ssvspart_cmd (const char *target, const char *chan);
|
||||
int ssvshost_cmd (const char *who, const char *vhost);
|
||||
int ssvshost_cmd (const char *target, const char *vhost);
|
||||
int ssvsmode_cmd (const char *target, const char *modes);
|
||||
int ssvskill_cmd (const char *target, const char *reason, ...) __attribute__((format(printf,2,3))); /* 2=format 3=params */
|
||||
int sakill_cmd (const char *host, const char *ident, const char *setby, const int length, const char *reason, ...);
|
||||
|
@ -927,6 +926,7 @@ int new_transfer(char *url, char *params, NS_TRANSFER savetofileormemory, char *
|
|||
|
||||
/* Some standard text help messages */
|
||||
extern const char *ns_help_set_nick[];
|
||||
extern const char *ns_help_set_altnick[];
|
||||
extern const char *ns_help_set_user[];
|
||||
extern const char *ns_help_set_host[];
|
||||
extern const char *ns_help_set_realname[];
|
||||
|
|
|
@ -241,6 +241,11 @@ const char *ns_help_set_nick[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *ns_help_set_altnick[] = {
|
||||
"\2ALTNICK <newnick>\2 Change bot alternate nickname",
|
||||
NULL
|
||||
};
|
||||
|
||||
const char *ns_help_set_user[] = {
|
||||
"\2USER <username>\2 Change bot username",
|
||||
"(requires restart to take effect).",
|
||||
|
|
|
@ -62,7 +62,7 @@ static const char *ns_about[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static ModuleInfo ns_module_info = {
|
||||
ModuleInfo ns_module_info = {
|
||||
"NeoStats",
|
||||
"NeoStats Statistical services",
|
||||
ns_copyright,
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#ifndef _SERVICES_H_
|
||||
#define _SERVICES_H_
|
||||
|
||||
extern ModuleInfo ns_module_info;
|
||||
extern BotInfo ns_botinfo;
|
||||
extern Bot* ns_botptr;
|
||||
|
||||
|
|
214
src/users.c
214
src/users.c
|
@ -43,7 +43,7 @@
|
|||
|
||||
hash_t *uh;
|
||||
|
||||
static char quitreason[BUFSIZE];
|
||||
char quitreason[BUFSIZE];
|
||||
|
||||
static User *
|
||||
new_user (const char *nick)
|
||||
|
@ -92,7 +92,6 @@ AddUser (const char *nick, const char *user, const char *host, const char *realn
|
|||
unsigned long ipaddress = 0;
|
||||
unsigned long time;
|
||||
User *u;
|
||||
int i;
|
||||
#ifndef GOTNICKIP
|
||||
struct in_addr *ipad;
|
||||
int res;
|
||||
|
@ -107,24 +106,20 @@ AddUser (const char *nick, const char *user, const char *host, const char *realn
|
|||
|
||||
if(ip) {
|
||||
ipaddress = strtoul (ip, NULL, 10);
|
||||
} else {
|
||||
#ifndef GOTNICKIP
|
||||
if (me.want_nickip == 1) {
|
||||
/* first, if the u->host is a ip address, just convert it */
|
||||
ipad = malloc(sizeof(struct in_addr));
|
||||
res = inet_aton(host, ipad);
|
||||
if (res > 0) {
|
||||
/* its valid */
|
||||
ipaddress = htonl(ipad->s_addr);
|
||||
free(ipad);
|
||||
} else {
|
||||
/* kick of a dns reverse lookup for this host */
|
||||
dns_lookup((char *)host, adns_r_addr, lookupnickip, (void *)nick);
|
||||
ipaddress = 0;
|
||||
}
|
||||
} else {
|
||||
} else if (me.want_nickip == 1) {
|
||||
/* first, if the u->host is a ip address, just convert it */
|
||||
ipad = malloc(sizeof(struct in_addr));
|
||||
res = inet_aton(host, ipad);
|
||||
if (res > 0) {
|
||||
/* its valid */
|
||||
ipaddress = htonl(ipad->s_addr);
|
||||
free(ipad);
|
||||
} else {
|
||||
/* kick of a dns reverse lookup for this host */
|
||||
dns_lookup((char *)host, adns_r_addr, lookupnickip, (void *)nick);
|
||||
ipaddress = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if(TS) {
|
||||
|
@ -144,36 +139,19 @@ AddUser (const char *nick, const char *user, const char *host, const char *realn
|
|||
strlcpy (u->realname, realname, MAXREALNAME);
|
||||
u->server = findserver (server);
|
||||
u->tslastmsg = me.now;
|
||||
u->flood = 0;
|
||||
u->is_away = 0;
|
||||
u->Umode = 0;
|
||||
u->flags = 0;
|
||||
#ifdef GOTUSERSMODES
|
||||
u->Smode = 0;
|
||||
#endif
|
||||
u->chans = list_create (MAXJOINCHANS);
|
||||
u->modes[0]= '\0';
|
||||
u->ipaddr.s_addr = htonl (ipaddress);
|
||||
u->TS = time;
|
||||
|
||||
/* make sure the module pointers are all null */
|
||||
for (i = 0; i < NUM_MODULES; i++) {
|
||||
u->moddata[i] = NULL;
|
||||
}
|
||||
|
||||
if (!ircstrcasecmp(server, me.name)) {
|
||||
u->flags |= NS_FLAGS_ME;
|
||||
}
|
||||
|
||||
/* check if the user is excluded */
|
||||
ns_do_exclude_user(u);
|
||||
|
||||
#ifdef BASE64NICKNAME
|
||||
if(numeric) {
|
||||
setnickbase64 (u->nick, numeric);
|
||||
}
|
||||
#endif
|
||||
|
||||
cmdparams = (CmdParams*) scalloc (sizeof(CmdParams));
|
||||
cmdparams->source.user = u;
|
||||
SendAllModuleEvent (EVENT_SIGNON, cmdparams);
|
||||
|
@ -184,67 +162,87 @@ AddUser (const char *nick, const char *user, const char *host, const char *realn
|
|||
free (cmdparams);
|
||||
}
|
||||
|
||||
void
|
||||
UserPart (list_t * list, lnode_t * node, void *v)
|
||||
static void deluser(User* u)
|
||||
{
|
||||
part_chan ((User *)v, lnode_get (node), quitreason[0] != 0 ? quitreason : NULL);
|
||||
}
|
||||
|
||||
void
|
||||
DelUser (const char *nick, int killflag, const char *reason)
|
||||
{
|
||||
CmdParams * cmdparams;
|
||||
char killnick[MAXNICK];
|
||||
int botflag = 0;
|
||||
User *u;
|
||||
hnode_t *un;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
nlog (LOG_DEBUG2, "doDelUser: %s", nick);
|
||||
u = finduser(nick);
|
||||
if(!u) {
|
||||
nlog (LOG_WARNING, "doDelUser: %s failed!", nick);
|
||||
return;
|
||||
}
|
||||
un = hash_lookup (uh, u->nick);
|
||||
if (!un) {
|
||||
nlog (LOG_WARNING, "doDelUser: %s failed!", nick);
|
||||
nlog (LOG_WARNING, "deluser: %s failed!", u->nick);
|
||||
return;
|
||||
}
|
||||
u = hnode_get (un);
|
||||
bzero(quitreason, BUFSIZE);
|
||||
if(reason) {
|
||||
strlcpy(quitreason, reason, BUFSIZE);
|
||||
strip_mirc_codes(quitreason);
|
||||
}
|
||||
list_process (u->chans, u, UserPart);
|
||||
/* run the event to delete a user */
|
||||
cmdparams = (CmdParams*) scalloc (sizeof(CmdParams));
|
||||
cmdparams->source.user = u;
|
||||
if(reason) {
|
||||
cmdparams->param = (char*)quitreason;
|
||||
}
|
||||
if (killflag == 0) {
|
||||
SendAllModuleEvent (EVENT_QUIT, cmdparams);
|
||||
} else if (killflag == 1) {
|
||||
SendAllModuleEvent (EVENT_KILL, cmdparams);
|
||||
}
|
||||
/* if its one of our bots, remove it from the modlist */
|
||||
if ( IsMe(u) ) {
|
||||
if (killflag == 1) {
|
||||
nlog (LOG_NOTICE, "doDelUser: deleting bot %s as it was killed", u->nick);
|
||||
strlcpy(killnick,u->nick,MAXNICK);
|
||||
botflag = 1;
|
||||
}
|
||||
del_ns_bot (u->nick);
|
||||
}
|
||||
hash_delete (uh, un);
|
||||
hnode_destroy (un);
|
||||
list_destroy (u->chans);
|
||||
free (u);
|
||||
if(botflag) {
|
||||
}
|
||||
|
||||
void
|
||||
KillUser (const char *nick, const char *reason)
|
||||
{
|
||||
CmdParams * cmdparams;
|
||||
User *u;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
nlog (LOG_DEBUG2, "KillUser: %s", nick);
|
||||
u = finduser(nick);
|
||||
if(!u) {
|
||||
nlog (LOG_WARNING, "KillUser: %s failed!", nick);
|
||||
return;
|
||||
}
|
||||
bzero(quitreason, BUFSIZE);
|
||||
if(reason) {
|
||||
strlcpy(quitreason, reason, BUFSIZE);
|
||||
strip_mirc_codes(quitreason);
|
||||
}
|
||||
PartAllChannels (u);
|
||||
/* run the event to delete a user */
|
||||
cmdparams = (CmdParams*) scalloc (sizeof(CmdParams));
|
||||
cmdparams->source.user = u;
|
||||
if(reason) {
|
||||
cmdparams->param = (char*)quitreason;
|
||||
}
|
||||
SendAllModuleEvent (EVENT_KILL, cmdparams);
|
||||
/* if its one of our bots inform the module */
|
||||
if ( IsMe(u) ) {
|
||||
nlog (LOG_NOTICE, "KillUser: deleting bot %s as it was killed", u->nick);
|
||||
SendModuleEvent (EVENT_BOTKILL, cmdparams, findbot(u->nick));
|
||||
}
|
||||
deluser(u);
|
||||
free (cmdparams);
|
||||
}
|
||||
|
||||
void
|
||||
QuitUser (const char *nick, const char *reason)
|
||||
{
|
||||
CmdParams * cmdparams;
|
||||
User *u;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
nlog (LOG_DEBUG2, "QuitUser: %s", nick);
|
||||
u = finduser(nick);
|
||||
if(!u) {
|
||||
nlog (LOG_WARNING, "QuitUser: %s failed!", nick);
|
||||
return;
|
||||
}
|
||||
bzero(quitreason, BUFSIZE);
|
||||
if(reason) {
|
||||
strlcpy(quitreason, reason, BUFSIZE);
|
||||
strip_mirc_codes(quitreason);
|
||||
}
|
||||
PartAllChannels (u);
|
||||
/* run the event to delete a user */
|
||||
cmdparams = (CmdParams*) scalloc (sizeof(CmdParams));
|
||||
cmdparams->source.user = u;
|
||||
if(reason) {
|
||||
cmdparams->param = (char*)quitreason;
|
||||
}
|
||||
SendAllModuleEvent (EVENT_QUIT, cmdparams);
|
||||
deluser(u);
|
||||
free (cmdparams);
|
||||
}
|
||||
|
||||
|
@ -255,35 +253,33 @@ UserAway (const char *nick, const char *awaymsg)
|
|||
User *u;
|
||||
|
||||
u = finduser (nick);
|
||||
if (u) {
|
||||
if (awaymsg) {
|
||||
strlcpy(u->awaymsg, awaymsg, MAXHOST);
|
||||
} else {
|
||||
u->awaymsg[0] = 0;
|
||||
}
|
||||
cmdparams = (CmdParams*) scalloc (sizeof(CmdParams));
|
||||
cmdparams->source.user = u;
|
||||
if ((u->is_away == 1) && (!awaymsg)) {
|
||||
u->is_away = 0;
|
||||
} else if ((u->is_away == 0) && (awaymsg)) {
|
||||
u->is_away = 1;
|
||||
}
|
||||
SendAllModuleEvent (EVENT_AWAY, cmdparams);
|
||||
free (cmdparams);
|
||||
} else {
|
||||
if (!u) {
|
||||
nlog (LOG_WARNING, "UserAway: unable to find user %s for away", nick);
|
||||
return;
|
||||
}
|
||||
if (awaymsg) {
|
||||
strlcpy(u->awaymsg, awaymsg, MAXHOST);
|
||||
} else {
|
||||
u->awaymsg[0] = 0;
|
||||
}
|
||||
cmdparams = (CmdParams*) scalloc (sizeof(CmdParams));
|
||||
cmdparams->source.user = u;
|
||||
if ((u->is_away == 1) && (!awaymsg)) {
|
||||
u->is_away = 0;
|
||||
} else if ((u->is_away == 0) && (awaymsg)) {
|
||||
u->is_away = 1;
|
||||
}
|
||||
SendAllModuleEvent (EVENT_AWAY, cmdparams);
|
||||
free (cmdparams);
|
||||
}
|
||||
|
||||
int
|
||||
UserNick (const char * oldnick, const char *newnick, const char * ts)
|
||||
{
|
||||
CmdParams * cmdparams;
|
||||
char uoldnick[MAXNICK];
|
||||
hnode_t *un;
|
||||
lnode_t *cm;
|
||||
User * u;
|
||||
time_t time;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
u = finduser (oldnick);
|
||||
|
@ -291,14 +287,6 @@ UserNick (const char * oldnick, const char *newnick, const char * ts)
|
|||
nlog (LOG_WARNING, "UserNick: can't find user %s", oldnick);
|
||||
return NS_FAILURE;
|
||||
}
|
||||
strlcpy(uoldnick, u->nick, MAXNICK);
|
||||
|
||||
if(ts) {
|
||||
time = atoi (ts);
|
||||
} else {
|
||||
time = me.now;
|
||||
}
|
||||
|
||||
nlog (LOG_DEBUG2, "UserNick: %s -> %s", u->nick, newnick);
|
||||
un = hash_lookup (uh, u->nick);
|
||||
if (!un) {
|
||||
|
@ -314,12 +302,14 @@ UserNick (const char * oldnick, const char *newnick, const char * ts)
|
|||
hash_delete (uh, un);
|
||||
strlcpy (u->nick, newnick, MAXNICK);
|
||||
if(ts) {
|
||||
u->TS = time;
|
||||
u->TS = atoi (ts);
|
||||
} else {
|
||||
u->TS = me.now;
|
||||
}
|
||||
hash_insert (uh, un, u->nick);
|
||||
cmdparams = (CmdParams*) scalloc (sizeof(CmdParams));
|
||||
cmdparams->source.user = u;
|
||||
cmdparams->param = uoldnick;
|
||||
cmdparams->param = (char *)oldnick;
|
||||
SendAllModuleEvent (EVENT_NICK, cmdparams);
|
||||
free (cmdparams);
|
||||
return NS_SUCCESS;
|
||||
|
@ -381,7 +371,7 @@ void *display_vhost(void *tbl, char *col, char *sql, void *row) {
|
|||
#ifdef UMODE_HIDE
|
||||
/* Do we have a hidden host? */
|
||||
if(u->Umode & UMODE_HIDE) {
|
||||
return u->vhost;
|
||||
return u->vhost;
|
||||
}
|
||||
return "*";
|
||||
#else
|
||||
|
@ -584,8 +574,6 @@ TBLDEF neo_users = {
|
|||
};
|
||||
#endif /* SQLSRV */
|
||||
|
||||
|
||||
|
||||
int
|
||||
InitUsers ()
|
||||
{
|
||||
|
@ -598,8 +586,6 @@ InitUsers ()
|
|||
neo_users.address = uh;
|
||||
rta_add_table(&neo_users);
|
||||
#endif
|
||||
|
||||
|
||||
return NS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -644,6 +630,7 @@ UserDump (const char *nick)
|
|||
User *u;
|
||||
hnode_t *un;
|
||||
hscan_t us;
|
||||
|
||||
SET_SEGV_LOCATION();
|
||||
debugtochannel("================USERDUMP================");
|
||||
if (!nick) {
|
||||
|
@ -667,6 +654,7 @@ int
|
|||
UserLevel (User * u)
|
||||
{
|
||||
int ulevel = 0;
|
||||
|
||||
ulevel = UserAuth(u);
|
||||
#ifdef DEBUG
|
||||
#ifdef CODERHACK
|
||||
|
@ -780,7 +768,7 @@ void FiniUsers (void)
|
|||
hash_scan_begin(&hs, uh);
|
||||
while ((un = hash_scan_next(&hs)) != NULL) {
|
||||
u = hnode_get (un);
|
||||
list_process (u->chans, u, UserPart);
|
||||
PartAllChannels (u);
|
||||
/* something is wrong if its our bots */
|
||||
if ( IsMe(u) ) {
|
||||
nlog (LOG_NOTICE, "FiniUsers called with a neostats bot online: %s", u->nick);
|
||||
|
|
|
@ -27,11 +27,11 @@
|
|||
int InitUsers (void);
|
||||
void FiniUsers (void);
|
||||
void AddUser (const char *nick, const char *user, const char *host, const char *realname, const char *server, const char*ip, const char* TS, const char* numeric);
|
||||
void DelUser (const char *nick, int killflag, const char *reason);
|
||||
void KillUser (const char *nick, const char *reason);
|
||||
void QuitUser (const char *nick, const char *reason);
|
||||
void SetUserVhost (const char* nick, const char* vhost);
|
||||
void SetUserServicesTS (const char* nick, const char* ts);
|
||||
int UserNick (const char * oldnick, const char * newnick, const char * ts);
|
||||
void UserPart (list_t *list, lnode_t *node, void *v);
|
||||
void UserMode (const char *nick, const char *modes);
|
||||
#ifdef GOTUSERSMODES
|
||||
void UserSMode (const char *nick, const char *modes);
|
||||
|
|
Reference in a new issue