int process_ping(Header *header, ChordPacketArgs *args, Ping *msg, Node *from) { ChordServer *srv = args->srv; int fnew; Finger *pred; if (IN6_IS_ADDR_UNSPECIFIED(&srv->node.addr)) return CHORD_ADDR_UNDISCOVERED; LOG_PROCESS(&from->id, &from->addr, from->port); insert_finger(srv, &from->id, &from->addr, from->port, &fnew); if (fnew) Debug("Inserted a new possible finger"); pred = pred_finger(srv); if (fnew && (pred == NULL || (pred != NULL && id_is_between(&from->id, &pred->node.id, &srv->node.id)))) { if (pred == NULL) Debug("We have no predecessor, and this is a possible new finger, so we ping it"); else Debug("This possible new finger falls between our current predecessor and ourselves, so we ping it"); send_ping(srv, &from->addr, from->port, get_current_time()); } Debug("Replying to the ping with a pong"); send_pong(srv, msg->ticket.data, msg->ticket.len, &from->addr, from->port, msg->time); return CHORD_NO_ERROR; }
bool ping_h(connection_t *c) { return send_pong(c); }
bool WebsocketServlet_impl::on_ping(const char *buf, unsigned long long len) { return send_pong(); }
void p2p_ping(BEN * tid, IP * from) { send_pong(from, ben_str_s(tid), ben_str_i(tid)); }