Esempio n. 1
0
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;
}
Esempio n. 2
0
bool ping_h(connection_t *c) {
	return send_pong(c);
}
Esempio n. 3
0
bool WebsocketServlet_impl::on_ping(const char *buf, unsigned long long  len)
{
	return send_pong();
}
Esempio n. 4
0
void p2p_ping(BEN * tid, IP * from)
{
	send_pong(from, ben_str_s(tid), ben_str_i(tid));
}