X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommands.cpp;h=2b96b0a8ffb9f3323899fbcd8ed781c7afb85f31;hb=9e81044ffde2b1fc62456aca512d0cd7f1e52ad8;hp=d04a79f4d8ab8ddddbfc1c25af0f16fbd201d4aa;hpb=2cd3b57fe08b6cdae5d99021252898dedd3a0650;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands.cpp b/src/commands.cpp index d04a79f4d..2b96b0a8f 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -14,20 +14,27 @@ * --------------------------------------------------- */ +using namespace std; + #include "inspircd.h" #include "inspircd_io.h" #include "inspircd_util.h" #include "inspircd_config.h" #include -#include #include #include #include + #ifdef USE_KQUEUE #include #include #include #endif + +#ifdef USE_EPOLL +#include +#endif + #include #include #include @@ -39,11 +46,7 @@ #include #include #include -#include #include -#include -#include -#include #include #include #include @@ -64,19 +67,17 @@ #include "xline.h" #include "inspstring.h" #include "dnsqueue.h" - -#ifdef GCC3 -#define nspace __gnu_cxx -#else -#define nspace std -#endif - -using namespace std; +#include "helperfuncs.h" +#include "hashcomp.h" #ifdef USE_KQUEUE extern int kq; #endif +#ifdef USE_EPOLL +int ep; +#endif + extern int MODCOUNT; extern std::vector modules; extern std::vector factory; @@ -133,80 +134,16 @@ const long duration_d = duration_h * 24; const long duration_w = duration_d * 7; const long duration_y = duration_w * 52; -namespace nspace -{ -#ifdef GCC34 - template<> struct hash -#else - template<> struct nspace::hash -#endif - { - size_t operator()(const struct in_addr &a) const - { - size_t q; - memcpy(&q,&a,sizeof(size_t)); - return q; - } - }; -#ifdef GCC34 - template<> struct hash -#else - template<> struct nspace::hash -#endif - { - size_t operator()(const string &s) const - { - char a[MAXBUF]; - static struct hash strhash; - strlcpy(a,s.c_str(),MAXBUF); - strlower(a); - return strhash(a); - } - }; -} - - -struct StrHashComp -{ - - bool operator()(const string& s1, const string& s2) const - { - char a[MAXBUF],b[MAXBUF]; - strlcpy(a,s1.c_str(),MAXBUF); - strlcpy(b,s2.c_str(),MAXBUF); - strlower(a); - strlower(b); - return (strcasecmp(a,b) == 0); - } - -}; - -struct InAddr_HashComp -{ - - bool operator()(const in_addr &s1, const in_addr &s2) const - { - size_t q; - size_t p; - - memcpy(&q,&s1,sizeof(size_t)); - memcpy(&p,&s2,sizeof(size_t)); - - return (q == p); - } - -}; - - -typedef nspace::hash_map, StrHashComp> user_hash; -typedef nspace::hash_map, StrHashComp> chan_hash; -typedef nspace::hash_map, InAddr_HashComp> address_cache; +typedef nspace::hash_map, irc::StrHashComp> user_hash; +typedef nspace::hash_map, irc::StrHashComp> chan_hash; +typedef nspace::hash_map, irc::InAddr_HashComp> address_cache; +typedef nspace::hash_map, irc::StrHashComp> whowas_hash; typedef std::deque command_table; extern user_hash clientlist; extern chan_hash chanlist; -extern user_hash whowas; +extern whowas_hash whowas; extern command_table cmdlist; extern file_cache MOTD; extern file_cache RULES; @@ -250,6 +187,15 @@ void handle_part(char **parameters, int pcnt, userrec *user) } } +void handle_commands(char **parameters, int pcnt, userrec *user) +{ + for (int i = 0; i < command_table.size(); i++) + { + WriteServ(user->fd,"902 %s :%s %s",user->nick,command_table[i].command,command_table[i].source); + } + WriteServ(user->fd,"903 %s :End of COMMANDS list"); +} + void handle_kick(char **parameters, int pcnt, userrec *user) { chanrec* Ptr = FindChan(parameters[0]); @@ -462,59 +408,75 @@ void handle_pass(char **parameters, int pcnt, userrec *user) void handle_invite(char **parameters, int pcnt, userrec *user) { - userrec* u = Find(parameters[0]); - chanrec* c = FindChan(parameters[1]); - - if ((!c) || (!u)) + if (pcnt == 2) { - if (!c) + userrec* u = Find(parameters[0]); + chanrec* c = FindChan(parameters[1]); + + if ((!c) || (!u)) { - WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[1]); + if (!c) + { + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[1]); + } + else + { + if (c->binarymodes & CM_INVITEONLY) + { + WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); + } + } + + return; } - else + + if (c->binarymodes & CM_INVITEONLY) { - if (c->binarymodes & CM_INVITEONLY) + if (cstatus(user,c) < STATUS_HOP) { - WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[0]); + WriteServ(user->fd,"482 %s %s :You must be at least a half-operator to change modes on this channel",user->nick, c->name); + return; } } + if (has_channel(u,c)) + { + WriteServ(user->fd,"443 %s %s %s :Is already on channel %s",user->nick,u->nick,c->name,c->name); + return; + } + if (!has_channel(user,c)) + { + WriteServ(user->fd,"442 %s %s :You're not on that channel!",user->nick, c->name); + return; + } - return; - } + int MOD_RESULT = 0; + FOREACH_RESULT(OnUserPreInvite(user,u,c)); + if (MOD_RESULT == 1) { + return; + } - if (c->binarymodes & CM_INVITEONLY) + u->InviteTo(c->name); + WriteFrom(u->fd,user,"INVITE %s :%s",u->nick,c->name); + WriteServ(user->fd,"341 %s %s %s",user->nick,u->nick,c->name); + + // i token must go to ALL servers!!! + char buffer[MAXBUF]; + snprintf(buffer,MAXBUF,"i %s %s %s",u->nick,user->nick,c->name); + NetSendToAll(buffer); + } + else { - if (cstatus(user,c) < STATUS_HOP) + // pinched from ircu - invite with not enough parameters shows channels + // youve been invited to but haven't joined yet. + InvitedList* il = user->GetInviteList(); + for (InvitedList::iterator i = il->begin(); i != il->end(); i++) { - WriteServ(user->fd,"482 %s %s :You must be at least a half-operator to change modes on this channel",user->nick, c->name); - return; + if (i->channel) { + WriteServ(user->fd,"346 %s :%s",user->nick,i->channel); + } } + WriteServ(user->fd,"347 %s :End of INVITE list",user->nick); } - if (has_channel(u,c)) - { - WriteServ(user->fd,"443 %s %s %s :Is already on channel %s",user->nick,u->nick,c->name,c->name); - return; - } - if (!has_channel(user,c)) - { - WriteServ(user->fd,"442 %s %s :You're not on that channel!",user->nick, c->name); - return; - } - - int MOD_RESULT = 0; - FOREACH_RESULT(OnUserPreInvite(user,u,c)); - if (MOD_RESULT == 1) { - return; - } - - u->InviteTo(c->name); - WriteFrom(u->fd,user,"INVITE %s :%s",u->nick,c->name); - WriteServ(user->fd,"341 %s %s %s",user->nick,u->nick,c->name); - - // i token must go to ALL servers!!! - char buffer[MAXBUF]; - snprintf(buffer,MAXBUF,"i %s %s %s",u->nick,user->nick,c->name); - NetSendToAll(buffer); } void handle_topic(char **parameters, int pcnt, userrec *user) @@ -977,6 +939,16 @@ void handle_quit(char **parameters, int pcnt, userrec *user) { log(DEBUG,"kqueue: Failed to remove user from queue!"); } +#endif +#ifdef USE_EPOLL + struct epoll_event ev; + ev.events = EPOLLIN | EPOLLET; + ev.data.fd = user->fd; + int i = epoll_ctl(ep, EPOLL_CTL_DEL, user->fd, &ev); + if (i < 0) + { + log(DEBUG,"epoll: List deletion failure!"); + } #endif shutdown(user->fd,2); close(user->fd); @@ -1264,7 +1236,7 @@ void handle_away(char **parameters, int pcnt, userrec *user) void handle_whowas(char **parameters, int pcnt, userrec* user) { - user_hash::iterator i = whowas.find(parameters[0]); + whowas_hash::iterator i = whowas.find(parameters[0]); if (i == whowas.end()) { @@ -1917,7 +1889,7 @@ void handle_nick(char **parameters, int pcnt, userrec *user) } -void handle_v(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_v(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* servername = strtok(params," "); char* versionstr = strtok(NULL,"\r\n"); @@ -1941,7 +1913,7 @@ void handle_v(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_V(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_V(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* src = strtok(params," "); char* dest = strtok(NULL," :"); @@ -1985,7 +1957,7 @@ void handle_V(char token,char* params,serverrec* source,serverrec* reply, char* } -void handle_P(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_P(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* src = strtok(params," "); char* dest = strtok(NULL," :"); @@ -2017,7 +1989,7 @@ void handle_P(char token,char* params,serverrec* source,serverrec* reply, char* } -void handle_i(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_i(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* nick = strtok(params," "); char* from = strtok(NULL," "); @@ -2036,7 +2008,7 @@ void handle_i(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_t(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_t(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* setby = strtok(params," "); char* channel = strtok(NULL," :"); @@ -2058,7 +2030,7 @@ void handle_t(char token,char* params,serverrec* source,serverrec* reply, char* } -void handle_T(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_T(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* tm = strtok(params," "); char* setby = strtok(NULL," "); @@ -2083,7 +2055,7 @@ void handle_T(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_M(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_M(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* pars[128]; char original[MAXBUF],target[MAXBUF]; @@ -2118,7 +2090,7 @@ void handle_M(char token,char* params,serverrec* source,serverrec* reply, char* // m is modes set by users only (not servers) valid targets are channels or users. -void handle_m(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_m(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { // m blah #chatspike +b *!test@*4 char* pars[128]; @@ -2161,7 +2133,7 @@ void handle_m(char token,char* params,serverrec* source,serverrec* reply, char* } -void handle_L(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_L(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* nick = NULL; char* channel = NULL; @@ -2199,7 +2171,7 @@ void handle_L(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_K(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_K(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* src = strtok(params," "); char* nick = strtok(NULL," :"); @@ -2221,7 +2193,7 @@ void handle_K(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_Q(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_Q(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* nick = strtok(params," :"); char* reason = strtok(NULL,"\r\n"); @@ -2258,7 +2230,7 @@ void handle_Q(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_n(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_n(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* oldnick = strtok(params," "); char* newnick = strtok(NULL," "); @@ -2290,7 +2262,7 @@ void handle_n(char token,char* params,serverrec* source,serverrec* reply, char* // broadcast this because its a services thingy char buffer[MAXBUF]; snprintf(buffer,MAXBUF,"n %s %s",user->nick,newnick); - NetSendToAllExcept(tcp_host,buffer); + NetSendToAllExcept_WithSum(tcp_host,buffer,tcp_sum); } WriteCommon(user,"NICK %s",newnick); user = ReHashNick(user->nick, newnick); @@ -2302,7 +2274,7 @@ void handle_n(char token,char* params,serverrec* source,serverrec* reply, char* } // k : -void handle_k(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_k(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* src = strtok(params," "); char* dest = strtok(NULL," "); @@ -2330,7 +2302,7 @@ void handle_k(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_AT(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_AT(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* who = strtok(params," :"); char* text = strtok(NULL,"\r\n"); @@ -2346,7 +2318,7 @@ void handle_AT(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_H(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_H(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { log(DEBUG,"Adding ULined server %s to my map",params); ircd_connector s; @@ -2377,7 +2349,7 @@ void handle_H(char token,char* params,serverrec* source,serverrec* reply, char* WriteOpers("Non-Mesh server %s has joined the network",params); } -void handle_N(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_N(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* tm = strtok(params," "); char* nick = strtok(NULL," "); @@ -2440,7 +2412,7 @@ void handle_N(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_F(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_F(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { if (!params) return; @@ -2449,7 +2421,7 @@ void handle_F(char token,char* params,serverrec* source,serverrec* reply, char* WriteOpers("TS split for %s -> %s: %d",source->name,reply->name,tdiff); } -void handle_a(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_a(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* nick = strtok(params," :"); char* gecos = strtok(NULL,"\r\n"); @@ -2463,7 +2435,7 @@ void handle_a(char token,char* params,serverrec* source,serverrec* reply, char* strlcpy(user->fullname,gecos,MAXBUF); } -void handle_b(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_b(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* nick = strtok(params," "); char* host = strtok(NULL," "); @@ -2477,7 +2449,7 @@ void handle_b(char token,char* params,serverrec* source,serverrec* reply, char* strlcpy(user->dhost,host,160); } -void handle_plus(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_plus(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { // %s %s %d %d // + test3.chatspike.net 7010 -2016508415 @@ -2514,7 +2486,7 @@ void handle_plus(char token,char* params,serverrec* source,serverrec* reply, cha me[defaultRoute]->MeshCookie(ipaddr,atoi(ipport),atoi(cookie),servername); } -void handle_R(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_R(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* server = strtok(params," "); char* data = strtok(NULL,"\r\n"); @@ -2529,11 +2501,8 @@ void handle_R(char token,char* params,serverrec* source,serverrec* reply, char* NetSendToOne(server,data); } -void handle_J(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_J(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { - // IMPORTANT NOTE - // The J token currently has no timestamp - this needs looking at - // because it will allow splitriding. char* nick = strtok(params," "); char* channel = strtok(NULL," "); @@ -2586,7 +2555,7 @@ void handle_J(char token,char* params,serverrec* source,serverrec* reply, char* } } -void handle_dollar(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_dollar(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { log(DEBUG,"Storing routing table..."); char* sourceserver = strtok(params," "); @@ -2620,7 +2589,7 @@ void handle_dollar(char token,char* params,serverrec* source,serverrec* reply, c log(DEBUG,"Warning! routing table received from nonexistent server!"); } -void handle_amp(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_amp(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { if (!params) return; @@ -2673,7 +2642,7 @@ void handle_amp(char token,char* params,serverrec* source,serverrec* reply, char unsigned long authcookie; -void handle_hash(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_hash(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { // # : log(DEBUG,"Adding G-line"); @@ -2702,7 +2671,7 @@ void handle_hash(char token,char* params,serverrec* source,serverrec* reply, cha apply_lines(); } -void handle_dot(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_dot(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { log(DEBUG,"Removing G-line"); char* mask = strtok(params," "); @@ -2723,7 +2692,7 @@ void handle_dot(char token,char* params,serverrec* source,serverrec* reply, char } } -void handle_add_sqline(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_add_sqline(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { // { : log(DEBUG,"Adding Q-line"); @@ -2753,7 +2722,7 @@ void handle_add_sqline(char token,char* params,serverrec* source,serverrec* repl apply_lines(); } -void handle_del_sqline(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_del_sqline(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { log(DEBUG,"Removing Q-line"); char* mask = strtok(params," "); @@ -2774,7 +2743,7 @@ void handle_del_sqline(char token,char* params,serverrec* source,serverrec* repl } } -void handle_add_szline(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_add_szline(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { // } : log(DEBUG,"Adding Z-line"); @@ -2804,7 +2773,7 @@ void handle_add_szline(char token,char* params,serverrec* source,serverrec* repl apply_lines(); } -void handle_del_szline(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_del_szline(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { log(DEBUG,"Removing Z-line"); char* mask = strtok(params," "); @@ -2825,7 +2794,7 @@ void handle_del_szline(char token,char* params,serverrec* source,serverrec* repl } } -void handle_pipe(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host) +void handle_pipe(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host, char* tcp_sum) { char* nick = strtok(params," "); char* type = strtok(params," "); @@ -2841,7 +2810,7 @@ void handle_pipe(char token,char* params,serverrec* source,serverrec* reply, cha } -void process_restricted_commands(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host,char* ipaddr,int port) +void process_restricted_commands(char token,char* params,serverrec* source,serverrec* reply, char* tcp_host,char* ipaddr,int port,char* tcp_sum) { char buffer[MAXBUF]; int MOD_RESULT = 0; @@ -2857,7 +2826,7 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve // except the newcomer. They'll all attempt to connect back to it. authcookie = rand()*rand(); snprintf(buffer,MAXBUF,"~ %lu",(unsigned long)authcookie); - NetSendToAll(buffer); + NetSendToAll_WithSum(buffer,tcp_sum); break; // ~ // Store authcookie @@ -2869,22 +2838,22 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve break; // connect back to a server using an authcookie case '+': - handle_plus(token,params,source,reply,tcp_host); + handle_plus(token,params,source,reply,tcp_host,tcp_sum); break; // routing table case '$': - handle_dollar(token,params,source,reply,tcp_host); + handle_dollar(token,params,source,reply,tcp_host,tcp_sum); break; // node unreachable - we cant route to a server, sooooo we slit it off. // servers can generate these for themselves for an squit. case '&': - handle_amp(token,params,source,reply,tcp_host); + handle_amp(token,params,source,reply,tcp_host,tcp_sum); break; // R // redirect token, send all of along to the given // server as this server has been found to still have a route to it case 'R': - handle_R(token,params,source,reply,tcp_host); + handle_R(token,params,source,reply,tcp_host,tcp_sum); break; // ? // ping @@ -2905,144 +2874,144 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve // N : // introduce remote client case 'N': - handle_N(token,params,source,reply,tcp_host); + handle_N(token,params,source,reply,tcp_host,tcp_sum); break; // a : // change GECOS (SETNAME) case 'a': - handle_a(token,params,source,reply,tcp_host); + handle_a(token,params,source,reply,tcp_host,tcp_sum); break; // b : // change displayed host (SETHOST) case 'b': - handle_b(token,params,source,reply,tcp_host); + handle_b(token,params,source,reply,tcp_host,tcp_sum); break; // t : // change a channel topic case 't': - handle_t(token,params,source,reply,tcp_host); + handle_t(token,params,source,reply,tcp_host,tcp_sum); break; // i // invite a user to a channel case 'i': - handle_i(token,params,source,reply,tcp_host); + handle_i(token,params,source,reply,tcp_host,tcp_sum); break; // k : // kick a user from a channel case 'k': - handle_k(token,params,source,reply,tcp_host); + handle_k(token,params,source,reply,tcp_host,tcp_sum); break; // n // change nickname of client -- a server should only be able to // change the nicknames of clients that reside on it unless // they are ulined. case 'n': - handle_n(token,params,source,reply,tcp_host); + handle_n(token,params,source,reply,tcp_host,tcp_sum); break; // J // Join user to channel list, merge channel permissions case 'J': - handle_J(token,params,source,reply,tcp_host); + handle_J(token,params,source,reply,tcp_host,tcp_sum); break; // T : // change channel topic (netburst only) case 'T': - handle_T(token,params,source,reply,tcp_host); + handle_T(token,params,source,reply,tcp_host,tcp_sum); break; // M [MODE-PARAMETERS] // Server setting modes on an object case 'M': - handle_M(token,params,source,reply,tcp_host); + handle_M(token,params,source,reply,tcp_host,tcp_sum); break; // m [MODE-PARAMETERS] // User setting modes on an object case 'm': - handle_m(token,params,source,reply,tcp_host); + handle_m(token,params,source,reply,tcp_host,tcp_sum); break; // P : // Send a private/channel message case 'P': - handle_P(token,params,source,reply,tcp_host); + handle_P(token,params,source,reply,tcp_host,tcp_sum); break; // V : // Send a private/channel notice case 'V': - handle_V(token,params,source,reply,tcp_host); + handle_V(token,params,source,reply,tcp_host,tcp_sum); break; // v case 'v': - handle_v(token,params,source,reply,tcp_host); + handle_v(token,params,source,reply,tcp_host,tcp_sum); break; // L : // User parting a channel case 'L': - handle_L(token,params,source,reply,tcp_host); + handle_L(token,params,source,reply,tcp_host,tcp_sum); break; // Q : // user quitting case 'Q': - handle_Q(token,params,source,reply,tcp_host); + handle_Q(token,params,source,reply,tcp_host,tcp_sum); break; // H // introduce non-meshable server (such as a services server) case 'H': - handle_H(token,params,source,reply,tcp_host); + handle_H(token,params,source,reply,tcp_host,tcp_sum); break; // K : // remote kill case 'K': - handle_K(token,params,source,reply,tcp_host); + handle_K(token,params,source,reply,tcp_host,tcp_sum); break; // @ : // wallops case '@': - handle_AT(token,params,source,reply,tcp_host); + handle_AT(token,params,source,reply,tcp_host,tcp_sum); break; // # : // add gline case '#': - handle_hash(token,params,source,reply,tcp_host); + handle_hash(token,params,source,reply,tcp_host,tcp_sum); break; // . // remove gline case '.': - handle_dot(token,params,source,reply,tcp_host); + handle_dot(token,params,source,reply,tcp_host,tcp_sum); break; // # : // add gline case '{': - handle_add_sqline(token,params,source,reply,tcp_host); + handle_add_sqline(token,params,source,reply,tcp_host,tcp_sum); break; // . // remove gline case '[': - handle_del_sqline(token,params,source,reply,tcp_host); + handle_del_sqline(token,params,source,reply,tcp_host,tcp_sum); break; // # : // add gline case '}': - handle_add_szline(token,params,source,reply,tcp_host); + handle_add_szline(token,params,source,reply,tcp_host,tcp_sum); break; // . // remove gline case ']': - handle_del_szline(token,params,source,reply,tcp_host); + handle_del_szline(token,params,source,reply,tcp_host,tcp_sum); break; // | // set opertype case '|': - handle_pipe(token,params,source,reply,tcp_host); + handle_pipe(token,params,source,reply,tcp_host,tcp_sum); break; // F // end netburst case 'F': WriteOpers("Server %s has completed netburst. (%d secs)",tcp_host,TIME-nb_start); - handle_F(token,params,source,reply,tcp_host); + handle_F(token,params,source,reply,tcp_host,tcp_sum); nb_start = 0; // tell all the other servers to use this authcookie to connect back again // got '+ test3.chatspike.net 7010 -2016508415' from test.chatspike.net snprintf(buffer,MAXBUF,"+ %s %s %d %lu",tcp_host,ipaddr,port,(unsigned long)authcookie); - NetSendToAllExcept(tcp_host,buffer); + NetSendToAllExcept_WithSum(tcp_host,buffer,tcp_sum); break; case '/': WriteOpers("Server %s is IRCServices-based server (assumes-SVSMODE) - Nickname Services: %s",tcp_host,params); @@ -3052,12 +3021,12 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve // end netburst with no mesh creation case 'f': WriteOpers("Server %s has completed netburst. (%d secs)",tcp_host,TIME-nb_start); - handle_F(token,params,source,reply,tcp_host); + handle_F(token,params,source,reply,tcp_host,tcp_sum); nb_start = 0; // tell everyone else about the new server name so they just add it in the disconnected // state snprintf(buffer,MAXBUF,"u %s :%s",tcp_host,GetServerDescription(tcp_host).c_str()); - NetSendToAllExcept(tcp_host,buffer); + NetSendToAllExcept_WithSum(tcp_host,buffer,tcp_sum); break; // X // Send netburst now @@ -3101,7 +3070,7 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve } -void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv) +void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv,char* tcp_sum) { if ((!strncmp(tcp_msg,"USER ",5)) || (!strncmp(tcp_msg,"NICK ",5)) || (!strncmp(tcp_msg,"PASS ",5)) || (!strncmp(tcp_msg,"SERVER ",7))) { @@ -3357,7 +3326,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv) { // we have a matching link line - // send a 'diminutive' server message back... - snprintf(response,10240,"s %s %s :%s",ServerName,Link_SendPass,ServerDesc); + snprintf(response,10240,"%s s %s %s :%s",CreateSum().c_str(),ServerName,Link_SendPass,ServerDesc); serv->SendPacket(response,servername); for (int t = 0; t < serv->connectors.size(); t++) @@ -3430,7 +3399,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv) char buffer[MAXBUF]; me[j]->connectors[k].SetDescription(serverdesc); me[j]->connectors[k].SetState(STATE_CONNECTED); - snprintf(buffer,MAXBUF,"X 0"); + snprintf(buffer,MAXBUF,"%s X 0",CreateSum().c_str()); serv->SendPacket(buffer,tcp_host); DoSync(me[j],tcp_host); NetSendMyRoutingTable(); @@ -3521,9 +3490,9 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv) me[j]->connectors[k].SetDescription(serverdesc); me[j]->connectors[k].SetServerName(servername); me[j]->connectors[k].SetState(STATE_SERVICES); - snprintf(buffer,MAXBUF,"X 0"); + snprintf(buffer,MAXBUF,"%s X 0",CreateSum().c_str()); serv->SendPacket(buffer,servername); - snprintf(buffer,MAXBUF,"s %s %s %lu :%s",ServerName,Link_SendPass,LinkPort,ServerDesc); + snprintf(buffer,MAXBUF,"%s s %s %s %lu :%s",CreateSum().c_str(),ServerName,Link_SendPass,LinkPort,ServerDesc); serv->SendPacket(buffer,servername); DoSync(me[j],servername); snprintf(buffer,MAXBUF,"H %s",servername); @@ -3574,7 +3543,7 @@ void handle_link_packet(char* tcp_msg, char* tcp_host, serverrec *serv) { // found a valid ircd_connector. if ((params) && (*params)) - process_restricted_commands(token,params,me[j],serv,tcp_host,me[j]->connectors[x].GetServerIP(),me[j]->connectors[x].GetServerPort()); + process_restricted_commands(token,params,me[j],serv,tcp_host,me[j]->connectors[x].GetServerIP(),me[j]->connectors[x].GetServerPort(),tcp_sum); return; } }