From: Chris Porter Date: Mon, 30 Jun 2008 14:56:43 +0000 (+0100) Subject: Add server flag support. X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/commitdiff_plain/4f2ceb49b631e3a812d803b004a62b3d7b7880df?ds=sidebyside Add server flag support. --- diff --git a/irc/irc.c b/irc/irc.c index f4b19735..42b9003e 100644 --- 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); diff --git a/server/server.c b/server/server.c index 4c0dac74..592122fe 100644 --- a/server/server.c +++ b/server/server.c @@ -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; diff --git a/server/server.h b/server/server.h index bfc3ca29..86fa0075 100644 --- a/server/server.h +++ b/server/server.h @@ -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 */ @@ -12,12 +13,22 @@ #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]; diff --git a/serverlist/serverlist.c b/serverlist/serverlist.c index e9caf9f1..9b47ee50 100644 --- a/serverlist/serverlist.c +++ b/serverlist/serverlist.c @@ -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"); }