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);
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));
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);
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;
#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];
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;
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");
}