]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Some more refactoring in newsearch.
authorChris Porter <redacted>
Sun, 23 Mar 2008 05:51:28 +0000 (05:51 +0000)
committerChris Porter <redacted>
Sun, 23 Mar 2008 05:51:28 +0000 (05:51 +0000)
chanprofile/chanprofile.c
newsearch/newsearch.c
newsearch/newsearch.h
newsearch/ns-gline.c
newsearch/ns-kill.c
newsearch/ns-notice.c

index e371a200c98d5e90192eb95dfa293a0aac4f02cb..b7316a22f463bb597e3492463f234b0242815273 100644 (file)
@@ -109,7 +109,8 @@ void reportprofile(nick *sender, struct chanprofile *cpp) {
   char buf[1024];
   unsigned int repwidth=80;
   unsigned int bufpos;
-  
+  searchCtx ctx;
+
   controlreply(sender,"============================================================");
 
   if (cpp->ccount==0) {
@@ -136,9 +137,10 @@ void reportprofile(nick *sender, struct chanprofile *cpp) {
     controlreply(sender," %s",buf);
     
   controlreply(sender,"Users (%u):",cpp->clones);
-  
+
+  ctx.reply = controlreply;
   for (i=0;i<cpp->clones;i++) {
-    printnick(sender,cpp->nicks[i]);
+    printnick(&ctx, sender,cpp->nicks[i]);
   }
 }
 
index 4a5b52f170fe092caa065c6074cfc5756a718ad2..f5bb203a7f409e2b34c958e0c8a77d773473dbc6 100644 (file)
@@ -1,5 +1,5 @@
-
 #include <stdio.h>
+#include <stdarg.h>
 #include "newsearch.h"
 
 #include "../irc/irc_config.h"
@@ -133,7 +133,17 @@ void deregistersearchterm(char *term, parseFunc parsefunc) {
   deletecommandfromtree(searchTree, term, (CommandHandler) parsefunc);
 }
 
-int do_nicksearch(void *source, int cargc, char **cargv) {
+static void controlwallwrapper(int level, char *format, ...) {
+  char buf[1024];
+  va_list ap;
+
+  va_start(ap, format);
+  vsnprintf(buf, sizeof(buf), format, ap);
+  controlwall(NO_OPER, level, "%s", buf);
+  va_end(ap);
+}
+
+int do_nicksearch_real(replyFunc reply, wallFunc wall, void *source, int cargc, char **cargv) {
   nick *sender = senderNSExtern = source;
   struct searchNode *search;
   int limit=500;
@@ -154,7 +164,7 @@ int do_nicksearch(void *source, int cargc, char **cargv) {
       switch(*ch) {
       case 'l':
        if (cargc<arg) {
-         controlreply(sender,"Error: -l switch requires an argument");
+         reply(sender,"Error: -l switch requires an argument");
          return CMD_USAGE;
        }
        limit=strtoul(cargv[arg++],NULL,10);
@@ -162,12 +172,12 @@ int do_nicksearch(void *source, int cargc, char **cargv) {
        
       case 'd':
         if (cargc<arg) {
-          controlreply(sender,"Error: -d switch requires an argument");
+          reply(sender,"Error: -d switch requires an argument");
           return CMD_USAGE;
         }
         cmd=findcommandintree(nickOutputTree, cargv[arg], 1);
         if (!cmd) {
-          controlreply(sender,"Error: unknown output format %s",cargv[arg]);
+          reply(sender,"Error: unknown output format %s",cargv[arg]);
           return CMD_USAGE;
         }
         display=(NickDisplayFunc)cmd->handler;
@@ -175,13 +185,13 @@ int do_nicksearch(void *source, int cargc, char **cargv) {
         break;
         
       default:
-       controlreply(sender,"Unrecognised flag -%c.",*ch);
+       reply(sender,"Unrecognised flag -%c.",*ch);
       }
     }
   }
 
   if (arg>=cargc) {
-    controlreply(sender,"No search terms - aborting.");
+    reply(sender,"No search terms - aborting.");
     return CMD_ERROR;
   }
 
@@ -190,10 +200,11 @@ int do_nicksearch(void *source, int cargc, char **cargv) {
   }
 
   ctx.parser = search_parse;
-  ctx.reply = controlreply;
+  ctx.reply = reply;
+  ctx.wall = wall;
 
   if (!(search = ctx.parser(&ctx, SEARCHTYPE_NICK, cargv[arg]))) {
-    controlreply(sender,"Parse error: %s",parseError);
+    reply(sender,"Parse error: %s",parseError);
     return CMD_ERROR;
   }
 
@@ -204,6 +215,10 @@ int do_nicksearch(void *source, int cargc, char **cargv) {
   return CMD_OK;
 }
 
+int do_nicksearch(void *source, int cargc, char **cargv) {
+  return do_nicksearch_real(controlreply, controlwallwrapper, source, cargc, cargv);
+}
+
 void nicksearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, NickDisplayFunc display, int limit) {
   int i, j;
   int matches = 0;
@@ -247,7 +262,7 @@ void nicksearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, Nic
                 matches, tchans, uchans, (float)tchans/uchans);
 }  
 
-int do_chansearch(void *source, int cargc, char **cargv) {
+int do_chansearch_real(replyFunc reply, wallFunc wall, void *source, int cargc, char **cargv) {
   nick *sender = senderNSExtern = source;
   struct searchNode *search;
   int limit=500;
@@ -268,7 +283,7 @@ int do_chansearch(void *source, int cargc, char **cargv) {
       switch(*ch) {
       case 'l':
        if (cargc<arg) {
-         controlreply(sender,"Error: -l switch requires an argument");
+         reply(sender,"Error: -l switch requires an argument");
          return CMD_USAGE;
        }
        limit=strtoul(cargv[arg++],NULL,10);
@@ -276,12 +291,12 @@ int do_chansearch(void *source, int cargc, char **cargv) {
 
       case 'd':
         if (cargc<arg) {
-          controlreply(sender,"Error: -d switch requires an argument");
+          reply(sender,"Error: -d switch requires an argument");
           return CMD_USAGE;
         }
         cmd=findcommandintree(chanOutputTree, cargv[arg], 1);
         if (!cmd) {
-          controlreply(sender,"Error: unknown output format %s",cargv[arg]);
+          reply(sender,"Error: unknown output format %s",cargv[arg]);
           return CMD_USAGE;
         }
         display=(ChanDisplayFunc)cmd->handler;
@@ -289,13 +304,13 @@ int do_chansearch(void *source, int cargc, char **cargv) {
         break;
        
       default:
-       controlreply(sender,"Unrecognised flag -%c.",*ch);
+       reply(sender,"Unrecognised flag -%c.",*ch);
       }
     }
   }
 
   if (arg>=cargc) {
-    controlreply(sender,"No search terms - aborting.");
+    reply(sender,"No search terms - aborting.");
     return CMD_ERROR;
   }
 
@@ -304,10 +319,11 @@ int do_chansearch(void *source, int cargc, char **cargv) {
   }
 
   ctx.parser = search_parse;
-  ctx.reply = controlreply;
+  ctx.reply = reply;
+  ctx.wall = wall;
 
   if (!(search = ctx.parser(&ctx, SEARCHTYPE_CHANNEL, cargv[arg]))) {
-    controlreply(sender,"Parse error: %s",parseError);
+    reply(sender,"Parse error: %s",parseError);
     return CMD_ERROR;
   }
 
@@ -318,6 +334,10 @@ int do_chansearch(void *source, int cargc, char **cargv) {
   return CMD_OK;
 }
 
+int do_chansearch(void *source, int cargc, char **cargv) {
+  return do_chansearch_real(controlreply, controlwallwrapper, source, cargc, cargv);
+}
+
 void chansearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, ChanDisplayFunc display, int limit) {  
   int i;
   chanindex *cip;
index 4c3e7378b80ae6b37f16eb8b38b9d3b5e52f3f48..e10d8bb49a5241d744aa64048a4432aad7b6ef6f 100644 (file)
@@ -32,10 +32,12 @@ struct searchCtx;
 
 typedef struct searchNode *(*searchParseFunc)(struct searchCtx *ctx, int type, char *input);
 typedef void (*replyFunc)(nick *np, char *format, ...);
+typedef void (*wallFunc)(int level, char *format, ...);
 
 typedef struct searchCtx {
   searchParseFunc parser;
   replyFunc reply;
+  wallFunc wall;
 } searchCtx;
 
 typedef struct searchNode *(*parseFunc)(searchCtx *, int, int, char **);
index d4d4ae92d69e95fa4b24a88fad748417cf2cd474..8bc393560225e8627b2ffd032ce6f54171ab5351 100644 (file)
@@ -8,7 +8,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "../control/control.h" /* controlreply() */
+#include "../control/control.h"
 #include "../irc/irc.h" /* irc_send() */
 #include "../lib/irc_string.h" /* IPtostr(), longtoduration(), durationtolong() */
 #include "../lib/strlfunc.h"
@@ -145,7 +145,7 @@ void gline_free(searchCtx *ctx, struct searchNode *thenode) {
 
   if (localdata->count > NSMAX_GLINE_LIMIT) {
     /* need to warn the user that they have just tried to twat half the network ... */
-    controlreply(senderNSExtern, "Warning: your pattern matches too many users (%d) - nothing done.", localdata->count);
+    ctx->reply(senderNSExtern, "Warning: your pattern matches too many users (%d) - nothing done.", localdata->count);
     free(localdata);
     free(thenode);
     return;
@@ -195,9 +195,9 @@ void gline_free(searchCtx *ctx, struct searchNode *thenode) {
     }
   }
   if (safe)
-    controlreply(senderNSExtern, "Warning: your pattern matched privileged users (%d in total) - these have not been touched.", safe);
+    ctx->reply(senderNSExtern, "Warning: your pattern matched privileged users (%d in total) - these have not been touched.", safe);
   /* notify opers of the action */
-  controlwall(NO_OPER, NL_GLINES, "%s/%s glined %d %s via %s for %s [%d untouched].", senderNSExtern->nick, senderNSExtern->authname, (localdata->count - safe), 
+  ctx->wall(NL_GLINES, "%s/%s glined %d %s via %s for %s [%d untouched].", senderNSExtern->nick, senderNSExtern->authname, (localdata->count - safe), 
     (localdata->count - safe) != 1 ? "users" : "user", (localdata->type == SEARCHTYPE_CHANNEL) ? "chansearch" : "nicksearch", longtoduration(localdata->duration, 1), safe);
   free(localdata);
   free(thenode);
index 453521567a475fe2cc6f462aec96f39b9795fe5d..2c8a059ec1b1cb1c968dfef381b0697f1b6de846 100644 (file)
@@ -7,7 +7,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "../control/control.h" /* controlreply() */
+#include "../control/control.h"
 #include "../localuser/localuser.h" /* killuser() */
 #include "../lib/irc_string.h" /* IPtostr() */
 #include "../lib/strlfunc.h"
@@ -105,7 +105,7 @@ void kill_free(searchCtx *ctx, struct searchNode *thenode) {
 
   if (localdata->count > NSMAX_KILL_LIMIT) {
     /* need to warn the user that they have just tried to twat half the network ... */
-    controlreply(senderNSExtern, "Warning: your pattern matches too many users (%d) - nothing done.", localdata->count);
+    ctx->reply(senderNSExtern, "Warning: your pattern matches too many users (%d) - nothing done.", localdata->count);
     free(localdata);
     free(thenode);
     return;
@@ -153,9 +153,9 @@ void kill_free(searchCtx *ctx, struct searchNode *thenode) {
   }
 
   if (safe)
-    controlreply(senderNSExtern, "Warning: your pattern matched privileged users (%d in total) - these have not been touched.", safe);
+    ctx->reply(senderNSExtern, "Warning: your pattern matched privileged users (%d in total) - these have not been touched.", safe);
   /* notify opers of the action */
-  controlwall(NO_OPER, NL_KICKKILLS, "%s/%s killed %d %s via %s [%d untouched].", senderNSExtern->nick, senderNSExtern->authname, (localdata->count - safe), 
+  ctx->wall(NL_KICKKILLS, "%s/%s killed %d %s via %s [%d untouched].", senderNSExtern->nick, senderNSExtern->authname, (localdata->count - safe), 
     (localdata->count - safe) != 1 ? "users" : "user", (localdata->type == SEARCHTYPE_CHANNEL) ? "chansearch" : "nicksearch", safe);
   free(localdata);
   free(thenode);
index 856a625218ed6d2656d4df34a990e1afc943d3be..3c0861f819974b312c50e9acb5e3c11e172d443b 100644 (file)
@@ -139,7 +139,7 @@ void notice_free(searchCtx *ctx, struct searchNode *thenode) {
     }
   }
   /* notify opers of the action */
-  controlwall(NO_OPER, NL_BROADCASTS, "%s/%s sent the following message to %d %s: %s", senderNSExtern->nick, senderNSExtern->authname, localdata->count, localdata->count != 1 ? "users" : "user", localdata->message);
+  ctx->wall(NL_BROADCASTS, "%s/%s sent the following message to %d %s: %s", senderNSExtern->nick, senderNSExtern->authname, localdata->count, localdata->count != 1 ? "users" : "user", localdata->message);
   free(localdata);
   free(thenode);
 }