X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_rping.c;h=1db4b239174a047c2bd6d70eb4b08eaf4cdf324d;hb=refs%2Fheads%2Fupstream;hp=5cdaae9091a7b50215eeccd0b326fd5aa7c1a8d0;hpb=ae91ef6320f611af74e70a0db2620c338fbaa7d5;p=ircu2.10.12-pk.git diff --git a/ircd/m_rping.c b/ircd/m_rping.c index 5cdaae9..1db4b23 100644 --- a/ircd/m_rping.c +++ b/ircd/m_rping.c @@ -79,17 +79,12 @@ * note: it is guaranteed that parv[0]..parv[parc-1] are all * non-NULL pointers. */ -#if 0 -/* - * No need to include handlers.h here the signatures must match - * and we don't need to force a rebuild of all the handlers everytime - * we add a new one to the list. --Bleep - */ -#include "handlers.h" -#endif /* 0 */ +#include "config.h" + #include "client.h" #include "hash.h" #include "ircd.h" +#include "ircd_log.h" #include "ircd_reply.h" #include "ircd_string.h" #include "msg.h" @@ -99,7 +94,16 @@ #include "s_user.h" #include "send.h" -#include +/* #include -- Now using assert in ircd_log.h */ + + +/* + * Old P10: + * Sending [:defiant.atomicrevs.net RPING Z Gte- 953863987 524184 :] to + * alphatest.atomicrevs.net + * Full P10: + * Parsing: j RI Z jAA 953865133 0 : + */ /* * ms_rping - server message handler @@ -119,52 +123,57 @@ */ int ms_rping(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { - struct Client *acptr; + struct Client* destination = 0; + assert(0 != cptr); + assert(0 != sptr); + assert(IsServer(cptr)); + /* + * shouldn't happen + */ if (!IsPrivileged(sptr)) return 0; - if (parc < (IsAnOper(sptr) ? (MyConnect(sptr) ? 2 : 3) : 6)) - { - return need_more_params(sptr, "RPING"); - return 0; - } - if (MyUser(sptr)) - { - if (parc == 2) - parv[parc++] = me.name; - else if (!(acptr = find_match_server(parv[2]))) - { - parv[3] = parv[2]; - parv[2] = me.name; - parc++; + if (IsServer(sptr)) { + if (parc < 6) { + /* + * PROTOCOL ERROR + */ + return need_more_params(sptr, "RPING"); } - else - parv[2] = acptr->name; - if (parc == 3) - parv[parc++] = ""; - } - - if (IsAnOper(sptr)) - { - if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s :%s", 2, parc, parv) != - HUNTED_ISME) - return 0; - if (!(acptr = find_match_server(parv[1])) || !IsServer(acptr)) - { - sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); - return 0; + if ((destination = FindNServer(parv[1]))) { + /* + * if it's not for me, pass it on + */ + if (IsMe(destination)) + sendcmdto_one(&me, CMD_RPONG, sptr, "%s %s %s %s :%s", cli_name(sptr), + parv[2], parv[3], parv[4], parv[5]); + else + sendcmdto_one(sptr, CMD_RPING, destination, "%C %s %s %s :%s", + destination, parv[2], parv[3], parv[4], parv[5]); } - sendto_one(acptr, ":%s RPING %s %s %s :%s", - me.name, NumServ(acptr), sptr->name, militime(0, 0), parv[3]); } - else - { - if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s %s %s :%s", 1, parc, parv) - != HUNTED_ISME) + else { + if (parc < 3) { + return need_more_params(sptr, "RPING"); + } + /* + * Haven't made it to the start server yet, if I'm not the start server + * pass it on. + */ + if (hunt_server_cmd(sptr, CMD_RPING, cptr, 1, "%s %C :%s", 2, parc, parv) + != HUNTED_ISME) return 0; - sendto_one(cptr, ":%s RPONG %s %s %s %s :%s", me.name, parv[0], - parv[2], parv[3], parv[4], parv[5]); + /* + * otherwise ping the destination from here + */ + if ((destination = find_match_server(parv[1]))) { + assert(IsServer(destination) || IsMe(destination)); + sendcmdto_one(&me, CMD_RPING, destination, "%C %C %s :%s", destination, + sptr, militime(0, 0), parv[3]); + } + else + send_reply(sptr, ERR_NOSUCHSERVER, parv[1]); } return 0; } @@ -173,136 +182,56 @@ int ms_rping(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) * mo_rping - oper message handler * -- by Run * + * + * Receive: + * RPING blah.* + * RPING blah.* : + * RPING blah.* server.* : + * * parv[0] = sender (sptr->name thus) - * if sender is a person: (traveling towards start server) - * parv[1] = pinged server[mask] - * parv[2] = start server (current target) - * parv[3] = optional remark - * if sender is a server: (traveling towards pinged server) - * parv[1] = pinged server (current target) - * parv[2] = original sender (person) - * parv[3] = start time in s - * parv[4] = start time in us - * parv[5] = the optional remark + * parv[1] = pinged server name or mask (required) + * parv[2] = start server name or mask (optional, defaults to me) + * parv[3] = client start time (optional) + * + * Send: NumNick(sptr) RPING blah.* server.net : (hunt_server) + * NumServ(&me) RPING NumServ(blah.bar.net) NumNick(sptr) : (here) */ int mo_rping(struct Client* cptr, struct Client* sptr, int parc, char* parv[]) { - struct Client *acptr; + struct Client* acptr = 0; + const char* start_time = ""; - if (!IsPrivileged(sptr)) - return 0; + assert(0 != cptr); + assert(0 != sptr); + assert(cptr == sptr); + assert(IsAnOper(sptr)); - if (parc < (IsAnOper(sptr) ? (MyConnect(sptr) ? 2 : 3) : 6)) - { + if (parc < 2) return need_more_params(sptr, "RPING"); - return 0; - } - if (MyUser(sptr)) - { - if (parc == 2) - parv[parc++] = me.name; - else if (!(acptr = find_match_server(parv[2]))) - { - parv[3] = parv[2]; - parv[2] = me.name; - parc++; - } - else - parv[2] = acptr->name; - if (parc == 3) - parv[parc++] = ""; - } - if (IsAnOper(sptr)) - { - if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s :%s", 2, parc, parv) != - HUNTED_ISME) + if (parc > 2) { + if ((acptr = find_match_server(parv[2])) && !IsMe(acptr)) { + parv[2] = cli_name(acptr); + if (3 == parc) { + /* + * const_cast(start_time); + */ + parv[parc++] = (char*) start_time; + } + hunt_server_cmd(sptr, CMD_RPING, cptr, 1, "%s %C :%s", 2, parc, parv); return 0; - if (!(acptr = find_match_server(parv[1])) || !IsServer(acptr)) - { - sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); - return 0; - } - sendto_one(acptr, ":%s RPING %s %s %s :%s", - me.name, NumServ(acptr), sptr->name, militime(0, 0), parv[3]); - } - else - { - if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s %s %s :%s", 1, parc, parv) - != HUNTED_ISME) - return 0; - sendto_one(cptr, ":%s RPONG %s %s %s %s :%s", me.name, parv[0], - parv[2], parv[3], parv[4], parv[5]); - } - return 0; -} - -#if 0 -/* - * m_rping -- by Run - * - * parv[0] = sender (sptr->name thus) - * if sender is a person: (traveling towards start server) - * parv[1] = pinged server[mask] - * parv[2] = start server (current target) - * parv[3] = optional remark - * if sender is a server: (traveling towards pinged server) - * parv[1] = pinged server (current target) - * parv[2] = original sender (person) - * parv[3] = start time in s - * parv[4] = start time in us - * parv[5] = the optional remark - */ -int m_rping(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) -{ - struct Client *acptr; - - if (!IsPrivileged(sptr)) - return 0; - - if (parc < (IsAnOper(sptr) ? (MyConnect(sptr) ? 2 : 3) : 6)) - { - return need_more_params(sptr, "RPING"); - return 0; - } - if (MyUser(sptr)) - { - if (parc == 2) - parv[parc++] = me.name; - else if (!(acptr = find_match_server(parv[2]))) - { - parv[3] = parv[2]; - parv[2] = me.name; - parc++; } else - parv[2] = acptr->name; - if (parc == 3) - parv[parc++] = ""; + start_time = parv[2]; } - if (IsAnOper(sptr)) - { - if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s :%s", 2, parc, parv) != - HUNTED_ISME) - return 0; - if (!(acptr = find_match_server(parv[1])) || !IsServer(acptr)) - { - sendto_one(sptr, err_str(ERR_NOSUCHSERVER), me.name, parv[0], parv[1]); - return 0; - } - sendto_one(acptr, ":%s RPING %s %s %s :%s", - me.name, NumServ(acptr), sptr->name, militime(0, 0), parv[3]); + if ((acptr = find_match_server(parv[1]))) { + assert(IsServer(acptr) || IsMe(acptr)); + sendcmdto_one(&me, CMD_RPING, acptr, "%C %C %s :%s", acptr, sptr, + militime(0, 0), start_time); } else - { - if (hunt_server(1, cptr, sptr, "%s%s " TOK_RPING " %s %s %s %s :%s", 1, parc, parv) - != HUNTED_ISME) - return 0; - sendto_one(cptr, ":%s RPONG %s %s %s %s :%s", me.name, parv[0], - parv[2], parv[3], parv[4], parv[5]); - } + send_reply(sptr, ERR_NOSUCHSERVER, parv[1]); + return 0; } -#endif /* 0 */ -