get core modules compiling and introduce core side module config loading

This commit is contained in:
Mark 2004-04-14 20:39:36 +00:00
parent 3e94d6c8ca
commit 46c502447c
18 changed files with 358 additions and 579 deletions

View file

@ -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.

View file

@ -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

View file

@ -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);

View file

@ -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

View file

@ -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");

View file

@ -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();

View file

@ -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, ";");

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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);

View file

@ -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);
}
}
}

View file

@ -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);

View file

@ -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[];

View file

@ -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).",

View file

@ -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,

View file

@ -24,6 +24,7 @@
#ifndef _SERVICES_H_
#define _SERVICES_H_
extern ModuleInfo ns_module_info;
extern BotInfo ns_botinfo;
extern Bot* ns_botptr;

View file

@ -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);

View file

@ -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);