Files
utun2/src/routing_layer/route_ping.h
T

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