34 lines
1.5 KiB
C
34 lines
1.5 KiB
C
/* Прямые UDP-наблюдения с указанного рабочего сокета. Управление помощниками —
|
|
* nat_detection; этот модуль не вычисляет NAT-тип и не выбирает чужой сокет. */
|
|
#ifndef ROUTE_PING_H
|
|
#define ROUTE_PING_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include "etcp_connections.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define ROUTE_ADDR_WIRE_SIZE 19
|
|
#define ROUTE_OBSERVE_TAG_SIZE 33
|
|
|
|
int route_ping_addr_encode(uint8_t out[ROUTE_ADDR_WIRE_SIZE], const struct sockaddr_storage *address);
|
|
int route_ping_addr_decode(const uint8_t in[ROUTE_ADDR_WIRE_SIZE], struct sockaddr_storage *address);
|
|
int route_ping_addr_equal(const struct sockaddr_storage *a, const struct sockaddr_storage *b, int include_port);
|
|
|
|
/* Ответ: address(19) || tag(33); tag связывает socket/generation/round/group. Числа BE, IP — сетевые байты. */
|
|
int route_ping_observe(struct ETCP_SOCKET *socket, const uint8_t peer_key[SC_PUBKEY_SIZE],
|
|
const struct sockaddr_storage *peer_address, uint64_t group, uint64_t round, int timeout_ms,
|
|
etcp_ping_callback_t callback, void *arg);
|
|
int route_ping_observation(const uint8_t *data, size_t length, const struct ETCP_SOCKET *socket,
|
|
uint64_t group, uint64_t round, struct sockaddr_storage *observed);
|
|
void route_ping_make_tag(uint8_t out[ROUTE_OBSERVE_TAG_SIZE], const struct ETCP_SOCKET *socket, uint64_t group, uint64_t round);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|