]> jfr.im git - irc/quakenet/newserv.git/blobdiff - control/control.c
merge
[irc/quakenet/newserv.git] / control / control.c
index 76d29460df61a7820e37a725fe76f72c778b87dc..f117483937e19c555c64696ffa1fb9b77a0877c6 100644 (file)
@@ -20,7 +20,6 @@
 #include "../lib/base64.h"
 #include "../core/modules.h"
 #include "../lib/version.h"
-#include "../core/nsmalloc.h"
 #include "control.h"
 
 #include <stdio.h>
@@ -135,7 +134,6 @@ void handlestats(int hooknum, void *arg) {
 
 int controlstatus(void *sender, int cargc, char **cargv) {
   unsigned long level=5;
-  char buf[1024];
   hooknick=(nick *)sender;
   
   if (cargc>0) {
@@ -144,24 +142,6 @@ int controlstatus(void *sender, int cargc, char **cargv) {
 
   registerhook(HOOK_CORE_STATSREPLY,&handlestats);
 
-  if (level >= 50) {
-    int i;
-    unsigned long count;
-    size_t size, realsize;
-    char *poolname;
-
-    for(i=0;;i++) {
-      if(!nspoolstats(i, &size, &count, &poolname, &realsize))
-        break;
-
-      if (count == 0)
-        continue;
-
-      snprintf(buf, sizeof(buf), "NSMalloc: pool %2d (%s): %lu items, %luKb allocated for %luKb space, %luKb (%0.2f%%) overhead", i, poolname?poolname:"??", count, (unsigned long)size / 1024, (unsigned long)realsize / 1024, (unsigned long)(realsize - size) / 1024, (double)(realsize - size) / (double)size * 100);
-      triggerhook(HOOK_CORE_STATSREPLY, buf);
-    }
-  }
-
   triggerhook(HOOK_CORE_STATSREQUEST,(void *)level);
   deregisterhook(HOOK_CORE_STATSREPLY,&handlestats);
   return CMD_OK;
@@ -224,6 +204,8 @@ int controlwhois(void *sender, int cargc, char **cargv) {
       controlreply((nick *)sender,"AccountTS : %ld",target->accountts);
     if (target->auth) 
       controlreply((nick *)sender,"UserID    : %ld",target->auth->userid);
+    if (target->accountflags) 
+      controlreply((nick *)sender,"AccFlags  : %s",printflags(target->accountflags,accountflags));
   }
 
   hooknick=(nick *)sender;
@@ -347,7 +329,7 @@ int die(void *sender, int cargc, char **cargv) {
     return CMD_USAGE;
   }
 
-  controlwall(0,0,"DIE from %s: %s",((nick *)sender)->nick, cargv[0]);
+  controlwall(NO_OPER,NL_OPERATIONS,"DIE from %s: %s",((nick *)sender)->nick, cargv[0]);
   
   newserv_shutdown_pending=1;
   
@@ -360,7 +342,7 @@ int controlchannel(void *sender, int cargc, char **cargv) {
   chanban *cbp;
   char buf[BUFSIZE];
   char buf2[12];
-  int i,j;
+  int i,j, ops=0, voice=0;
   char timebuf[30];
 
   if (cargc<1)
@@ -382,6 +364,8 @@ int controlchannel(void *sender, int cargc, char **cargv) {
     controlreply((nick *)sender,"Topic   : %s",cp->topic->content);
     strftime(timebuf, 30, "%d/%m/%y %H:%M", localtime(&(cp->topictime)));
     controlreply((nick *)sender,"T-time  : %ld [%s]",cp->topictime,timebuf);
+  } else { 
+    controlreply((nick *)sender,"Topic   : (none)");
   }
   controlreply((nick *)sender,"Mode(s) : %s %s%s%s",printflags(cp->flags,cmodeflags),IsLimit(cp)?buf2:"",
     IsLimit(cp)?" ":"",IsKey(cp)?cp->key->content:"");
@@ -402,6 +386,10 @@ int controlchannel(void *sender, int cargc, char **cargv) {
         break;
     }
     if (cp->users->content[j]!=nouser) {      
+      if (cp->users->content[j]&CUMODE_VOICE)
+        voice++;
+      else if (cp->users->content[j]&CUMODE_OP) 
+        ops++;
       np=getnickbynumeric(cp->users->content[j]);
       sprintf(&buf[i*18],"%c%c%-15s ",cp->users->content[j]&CUMODE_VOICE?'+':' ',
         cp->users->content[j]&CUMODE_OP?'@':' ', np?np->nick:"!BUG-NONICK!");
@@ -410,7 +398,7 @@ int controlchannel(void *sender, int cargc, char **cargv) {
         buf[i*18]=' ';
     }
   }
-
+  controlreply((nick *)sender, "Users   : Opped: %d, Voiced: %d", ops,voice);
   for (cbp=cp->bans;cbp;cbp=cbp->next) {
     controlreply((nick *)sender,"Ban     : %s",bantostringdebug(cbp));
   }
@@ -617,3 +605,14 @@ void controlnoticeopers(flag_t permissionlevel, flag_t noticelevel, char *format
         controlnotice(np, "%s", broadcast);
 }
 
+void controlnswall(int noticelevel, char *format, ...) {
+  char broadcast[512];
+  va_list va;
+
+  va_start(va, format);
+  vsnprintf(broadcast, sizeof(broadcast), format, va);
+  va_end(va);
+
+  controlwall(NO_OPER, noticelevel, "%s", broadcast);
+}
+