//send a ping request //Ping request only works if none has been sent to that ip/port in the last 5 seconds. int pingreq(IP_Port ip_port) { if(is_pinging(ip_port, 0)) { return 1; } int ping_id = add_pinging(ip_port); if(ping_id == 0) { return 1; } char data[5 + CLIENT_ID_SIZE]; data[0] = 0; memcpy(data + 1, &ping_id, 4); memcpy(data + 5, self_client_id, CLIENT_ID_SIZE); return sendpacket(ip_port, data, sizeof(data)); }
//send a ping request //Ping request only works if none has been sent to that ip/port in the last 5 seconds. static int pingreq(IP_Port ip_port, uint8_t * public_key) { if(memcmp(public_key, self_public_key, CLIENT_ID_SIZE) == 0)//check if packet is gonna be sent to ourself { return 1; } if(is_pinging(ip_port, 0)) { return 1; } uint64_t ping_id = add_pinging(ip_port); if(ping_id == 0) { return 1; } uint8_t data[1 + CLIENT_ID_SIZE + crypto_box_NONCEBYTES + sizeof(ping_id) + ENCRYPTION_PADDING]; uint8_t encrypt[sizeof(ping_id) + ENCRYPTION_PADDING]; uint8_t nonce[crypto_box_NONCEBYTES]; random_nonce(nonce); int len = encrypt_data(public_key, self_secret_key, nonce, (uint8_t *)&ping_id, sizeof(ping_id), encrypt); if(len != sizeof(ping_id) + ENCRYPTION_PADDING) { return -1; } data[0] = 0; memcpy(data + 1, self_public_key, CLIENT_ID_SIZE); memcpy(data + 1 + CLIENT_ID_SIZE, nonce, crypto_box_NONCEBYTES); memcpy(data + 1 + CLIENT_ID_SIZE + crypto_box_NONCEBYTES, encrypt, len); return sendpacket(ip_port, data, sizeof(data)); }