X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/055a469a829dcea470d29fc3ea5cda0c487fb4ea..fc03eb2dd7092582030b2694d69174ce2bfb82dd:/server/server.c diff --git a/server/server.c b/server/server.c index c5fc0d27..9ba31e11 100644 --- a/server/server.c +++ b/server/server.c @@ -11,16 +11,26 @@ #include "../core/error.h" #include "../core/hooks.h" #include "../core/config.h" +#include "../lib/version.h" #include "server.h" #include #include +MODULE_VERSION(""); + int findserver(const char *name); void completelink(int servernum); server serverlist[MAXSERVERS]; -int myhub; +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 */ @@ -32,7 +42,10 @@ void _init() { serverlist[numerictolong(mynumeric->content,2)].name=getsstring(myserver->content,HOSTLEN); serverlist[numerictolong(mynumeric->content,2)].description=getcopyconfigitem("irc","serverdescription","newserv",100); serverlist[numerictolong(mynumeric->content,2)].maxusernum=MAXLOCALUSER; + serverlist[numerictolong(mynumeric->content,2)].ts=getnettime(); 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|SMODE_OPERNAME; /* Register the protocol messages we handle */ registerserverhandler("SERVER",&handleservermsg,8); @@ -55,29 +68,37 @@ void _fini() { deregisterhook(HOOK_IRC_DISCON,&handledisconnect); for (i=0;icontent,2); + triggerhook(HOOK_IRC_SENDBURSTSERVERS,NULL); + triggerhook(HOOK_IRC_SENDBURSTNICKS,NULL); + triggerhook(HOOK_IRC_SENDBURSTBURSTS,NULL); + irc_send("%s EB",mynumeric->content); + triggerhook(HOOK_IRC_CONNECTED,NULL); } else { serverlist[servernum].parent=numerictolong(source,2); } @@ -96,7 +117,7 @@ int handleservermsg(void *source, int cargc, char **cargv) { } int handleeobmsg(void *source, int cargc, char **argv) { - int servernum; + long servernum; servernum=numerictolong(source,2); completelink(servernum); @@ -112,14 +133,14 @@ int handleeobmsg(void *source, int cargc, char **argv) { } int handlesquitmsg(void *source, int cargc, char **cargv) { - int servernum=findserver(cargv[0]); + long servernum=findserver(cargv[0]); if (servernum<0) { Error("server",ERR_WARNING,"Received SQUIT for unknown server %s\n",cargv[0]); return CMD_ERROR; } if (servernum==myhub) { Error("server",ERR_WARNING,"Rejected by our hub: %s",cargv[cargc-1]); - irc_disconnected(); + irc_disconnected(0); return CMD_OK; } deleteserver(servernum); @@ -151,14 +172,15 @@ void completelink(int servernum) { /* This server is now fully linked. */ serverlist[servernum].linkstate=LS_LINKED; + triggerhook(HOOK_SERVER_LINKED, (void *)(long)servernum); Error("server",ERR_DEBUG,"Setting link state on %s to LS_LINKED",serverlist[servernum].name->content); } -void deleteserver(int servernum) { +void deleteserver(long servernum) { int i; if (serverlist[servernum].name==NULL) { - Error("server",ERR_WARNING,"Tried to remove server %d which doesn't exist.",servernum); + Error("server",ERR_WARNING,"Tried to remove server %ld which doesn't exist.",servernum); return; } @@ -193,3 +215,18 @@ int findserver(const char *name) { return -1; } +unsigned int nextservermarker(void) { + int i; + static unsigned int servermarker=0; + + servermarker++; + if (!servermarker) { + /* If we wrapped to zero, zap the marker on all hosts */ + for (i=0;i