X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/16739dbe741b18f928453637e73507a16c7c2091..579d4f0101afc16af7872a29dc3a5415b2606bda:/control/control.c diff --git a/control/control.c b/control/control.c index e2e5cbcc..9baa1aa0 100644 --- a/control/control.c +++ b/control/control.c @@ -50,7 +50,8 @@ int controlrehash(void *sender, int cargc, char **cargv); int controlreload(void *sender, int cargc, char **cargv); int controlhelpcmd(void *sender, int cargc, char **cargv); void controlnoticeopers(flag_t permissionlevel, flag_t noticelevel, char *format, ...) __attribute__ ((format (printf, 3, 4))); -void handlerehash(int hooknum, void *arg); +void controlnoticeopers(flag_t permissionlevel, flag_t noticelevel, char *format, ...); +void handlesignal(int hooknum, void *arg); void _init() { controlcmds=newcommandtree(); @@ -70,7 +71,8 @@ void _init() { registercontrolhelpcmd("reload",NO_DEVELOPER,1,&controlreload,"Usage: reload \nReloads specified module."); registercontrolhelpcmd("help",NO_ANYONE,1,&controlhelpcmd,"Usage: help \nShows help for specified command."); - registerhook(HOOK_CORE_REHASH, &handlerehash); + registerhook(HOOK_CORE_REHASH, &handlesignal); + registerhook(HOOK_CORE_SIGINT, &handlesignal); scheduleoneshot(time(NULL)+1,&controlconnect,NULL); } @@ -95,7 +97,8 @@ void _fini() { destroycommandtree(controlcmds); - deregisterhook(HOOK_CORE_REHASH, &handlerehash); + deregisterhook(HOOK_CORE_REHASH, &handlesignal); + deregisterhook(HOOK_CORE_SIGINT, &handlesignal); } void registercontrolhelpcmd(const char *name, int level, int maxparams, CommandHandler handler, char *help) { @@ -483,6 +486,7 @@ void handlemessages(nick *target, int messagetype, void **args) { /* someone killed me? Bastards */ scheduleoneshot(time(NULL)+1,&controlconnect,NULL); mynick=NULL; + triggerhook(HOOK_CONTROL_REGISTERED, NULL); break; default: @@ -628,9 +632,20 @@ void controlnswall(int noticelevel, char *format, ...) { controlwall(NO_OPER, noticelevel, "%s", broadcast); } -void handlerehash(int hooknum, void *arg) { - long hupped = (long)arg; - if(hupped) - controlwall(NO_OPER, NL_OPERATIONS, "SIGHUP received, rehashing..."); -} +void handlesignal(int hooknum, void *arg) { + char *signal, *action; + + if(hooknum == HOOK_CORE_SIGINT) { + signal = "INT"; + action = "terminating"; + } else { + long hupped = (long)arg; + if(!hupped) + return; + signal = "HUP"; + action = "rehashing"; + } + + controlwall(NO_OPER, NL_OPERATIONS, "SIG%s received, %s...", signal, action); +}