]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Add server flag support.
authorChris Porter <redacted>
Mon, 30 Jun 2008 14:56:43 +0000 (15:56 +0100)
committerChris Porter <redacted>
Mon, 30 Jun 2008 14:56:43 +0000 (15:56 +0100)
irc/irc.c
server/server.c
server/server.h
serverlist/serverlist.c

index f4b19735db3b2c1f300985190dc920b52b056e1d..42b9003efda9c3f2f9dcb4978e3e217af4a0ad88 100644 (file)
--- a/irc/irc.c
+++ b/irc/irc.c
@@ -150,6 +150,7 @@ void irc_connect(void *arg) {
   Error("irc",ERR_INFO,"Connecting to %s:%s",conto->content,conport->content);
 
   irc_send("PASS :%s",conpass->content);
+  /* remember when changing modes to change server/server.c too */
   irc_send("SERVER %s 1 %ld %ld J10 %s%s +sh6 :%s",myserver->content,starttime,time(NULL),mynumeric->content,longtonumeric(MAXLOCALUSER,3),mydesc->content);
 
   registerhandler(serverfd, POLLIN|POLLPRI|POLLERR|POLLHUP|POLLNVAL, &handledata);
index 4c0dac748d0c01ef60bcad6fb38add6838613ea3..592122fe62a7ea889b60b38bed75b76f42e3cd37 100644 (file)
@@ -25,6 +25,13 @@ void completelink(int servernum);
 server serverlist[MAXSERVERS];
 long myhub;
 
+const flag smodeflags[] = {
+   { 'h', SMODE_HUB },
+   { '6', SMODE_IPV6 },
+   { 's', SMODE_SERVICE },
+   { 'n', SMODE_OPERNAME },
+   { '\0', 0 } };
+
 void _init() {
   /* Initialise the server tree */
   memset(serverlist,0,MAXSERVERS*sizeof(server));
@@ -36,6 +43,8 @@ void _init() {
   serverlist[numerictolong(mynumeric->content,2)].description=getcopyconfigitem("irc","serverdescription","newserv",100);
   serverlist[numerictolong(mynumeric->content,2)].maxusernum=MAXLOCALUSER;
   serverlist[numerictolong(mynumeric->content,2)].linkstate=LS_LINKED;
+  /* remember to update the mode line in irc/irc.c */
+  serverlist[numerictolong(mynumeric->content,2)].flags=SMODE_SERVICE|SMODE_IPV6|SMODE_HUB;
   
   /* Register the protocol messages we handle */
   registerserverhandler("SERVER",&handleservermsg,8);
@@ -76,7 +85,8 @@ int handleservermsg(void *source, int cargc, char **cargv) {
   serverlist[servernum].name=getsstring(cargv[0],HOSTLEN);
   serverlist[servernum].description=getsstring(cargv[cargc-1],REALLEN);
   serverlist[servernum].maxusernum=numerictolong(cargv[5]+2,3);
-  
+  setflags(&serverlist[servernum].flags,SMODE_ALL,cargv[6],smodeflags,REJECT_NONE);
+
   if (!strncmp((char *)source,"INIT",4)) {
     /* This is the initial server */
     myhub=servernum;
index bfc3ca296c29cd66d09bc384ef9d8d98e77652d5..86fa007577122d5a9fbd5c915405e53ee0f23644 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "../lib/sstring.h"
 #include "../irc/irc_config.h"
+#include "../lib/flags.h"
 
 #define LS_INVALID   0   /* No server here */
 #define LS_LINKED    1   /* Server fully linked */
 #define LS_PLINKING  3   /* Some other server between here and there is bursting */
 #define LS_SQUIT     4   /* This server is being deleted due to a SQUIT */
 
+#define SMODE_HUB       0x0001
+#define SMODE_IPV6      0x0002
+#define SMODE_SERVICE   0x0004
+#define SMODE_OPERNAME  0x0008
+
+#define SMODE_ALL       0x000F
+
+extern const flag smodeflags[];
+
 typedef struct {
   sstring   *name;
   sstring   *description;
   short      parent;
   short      linkstate;
   int        maxusernum;
+  flag_t     flags;
 } server;
 
 extern server serverlist[MAXSERVERS];
index e9caf9f138f4c3a219085af068680ee716a00c6c..9b47ee501e5b287ac6e22c24cc5a155096f9bdc9 100644 (file)
@@ -66,7 +66,7 @@ int cmd_serverlist(void *sender, int cargc, char **cargv) {
   nick *np = (nick*)sender;
   int a, i, ucount, acount, scount;
 
-  controlreply(np, "%-7s %-30s %5s/%5s/%-5s %-15s %-20s", "Numeric", "Hostname", "EClients", "Clients", "MaxCl", "Connected for", "Version");
+  controlreply(np, "%-7s %-30s %5s/%5s/%-5s %-7s %-15s %-20s", "Numeric", "Hostname", "ECl", "Cl", "MaxCl", "Flags", "Connected for", "Version");
 
   scount = acount = 0;
 
@@ -81,8 +81,10 @@ int cmd_serverlist(void *sender, int cargc, char **cargv) {
       acount += ucount;
       scount++;
 
-      controlreply(np, "%-7d %-30s %5d/%5d/%-5d %-15s %-20s - %s", i, serverlist[i].name->content,
-            servercount[i], ucount, serverlist[i].maxusernum, longtoduration(getnettime() - serverinfo[i].ts, 0),
+      controlreply(np, "%-7d %-30s %5d/%5d/%-5d %-7s %-15s %-20s - %s", i, serverlist[i].name->content,
+            servercount[i], ucount, serverlist[i].maxusernum,
+            printflags(serverlist[i].flags, smodeflags),
+            longtoduration(getnettime() - serverinfo[i].ts, 0),
             serverinfo[i].version1 ? serverinfo[i].version1->content : "Unknown",
             serverinfo[i].version2 ? serverinfo[i].version2->content : "Unknown");
     }