/* ** ms_eob ** parv[0] = sender prefix ** parv[1] = opt. comma separated list of SIDs for which this EOB is ** also valid */ static int ms_eob(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { char *copy, *state, *id; struct Client *target_p; int act = 0; if(!HasSentEob(source_p)) { if(MyConnect(source_p)) { sendto_realops_flags(UMODE_ALL, L_ALL, "End of burst from %s (%d seconds)", source_p->name, (signed int)(rb_current_time() - source_p->localClient->firsttime)); sendto_one(source_p, ":%s EOBACK", me.id); } act = 1; SetEob(source_p); eob_count++; } if(parc > 1 && *parv[1] != '\0') { copy = LOCAL_COPY(parv[1]); for(id = rb_strtok_r(copy, ",", &state); id != NULL; id = rb_strtok_r(NULL, ",", &state)) { target_p = find_id(id); if(target_p != NULL && IsServer(target_p) && target_p->from == client_p && !HasSentEob(target_p)) { SetEob(target_p); eob_count++; act = 1; } } } if(!act) return 0; sendto_server(client_p, NULL, CAP_IRCNET, NOCAPS, ":%s EOB%s%s", source_p->id, parc > 1 ? " :" : "", parc > 1 ? parv[1] : ""); return 0; }
/* * ms_eob - EOB command handler * parv[0] = sender prefix * parv[1] = servername */ static void ms_eob(struct Client *client_p, struct Client *source_p, int parc, char *parv[]) { sendto_realops_flags(UMODE_ALL, L_ALL, "End of burst from %s (%d seconds)", source_p->name, (signed int) (CurrentTime - source_p->firsttime)); SetEob(client_p); }
static int ms_pong(struct Client *client_p, struct Client *source_p, int parc, const char *parv[]) { struct Client *target_p; const char *destination; destination = parv[2]; source_p->flags &= ~FLAGS_PINGSENT; /* Now attempt to route the PONG, comstud pointed out routable PING * is used for SPING. routable PING should also probably be left in * -Dianora * That being the case, we will route, but only for registered clients (a * case can be made to allow them only from servers). -Shadowfax */ if(!EmptyString(destination) && !match(destination, me.name) && irccmp(destination, me.id)) { if((target_p = find_client(destination)) || (target_p = find_server(NULL, destination))) sendto_one(target_p, ":%s PONG %s %s", get_id(source_p, target_p), parv[1], get_id(target_p, target_p)); else { if(!IsDigit(*destination)) sendto_one_numeric(source_p, ERR_NOSUCHSERVER, form_str(ERR_NOSUCHSERVER), destination); return 0; } } /* destination is us, emulate EOB */ if(IsServer(source_p) && !HasSentEob(source_p)) { if(MyConnect(source_p)) sendto_realops_snomask(SNO_GENERAL, L_ALL, "End of burst (emulated) from %s (%d seconds)", source_p->name, (signed int) (CurrentTime - source_p->localClient->firsttime)); SetEob(source_p); eob_count++; call_hook(h_server_eob, source_p); } return 0; }