You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.8 KiB
63 lines
2.8 KiB
#ifndef ROUTE_PING_H |
|
#define ROUTE_PING_H |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
|
|
#include <stdint.h> |
|
#include <stddef.h> |
|
#include "nat_detection.h" |
|
#include "secure_channel.h" |
|
|
|
struct TOPO_PING_REQ { |
|
uint8_t cmd; // ETCP_ID_TOPO_ENTRY |
|
uint8_t subcmd; // TOPO_SUBCMD_PING_REQ |
|
uint16_t reserved; // padding для выравнивания request_id |
|
uint32_t request_id; // для корреляции |
|
uint8_t count; // число пингов |
|
uint8_t socket_id; // id сокета пингуемого узла |
|
uint16_t interval_ms; // интервал между пингами |
|
uint16_t timeout_ms; // таймаут одного пинга |
|
uint8_t target_ipv4[4]; // custom target IP (0 = use nodeinfo sockets) |
|
uint16_t target_port; // custom target port |
|
uint8_t pubkey[SC_PUBKEY_SIZE]; // pubkey for encryption if target not in nodes |
|
} __attribute__((packed)); |
|
|
|
struct TOPO_PING_RESP { |
|
uint8_t cmd; |
|
uint8_t subcmd; // TOPO_SUBCMD_PING_RESP |
|
uint16_t reserved; // padding для выравнивания |
|
uint32_t request_id; |
|
uint8_t count_sent; |
|
uint8_t count_ok; |
|
uint16_t avg_rtt; // средний RTT в 0.1ms |
|
} __attribute__((packed)); |
|
|
|
// Отправить запрос пинга по произвольному IP:port (используется для NAT-детекции) |
|
// Если pubkey != NULL, он передается в пакете (для пинга без локального nodeinfo) |
|
int route_ping_send_req_addr(struct NAT_DETECTION* nd, struct TOPO_GROUP* group, |
|
struct ETCP_CONN* to_conn, |
|
uint32_t target_ip, uint16_t target_port, |
|
uint8_t count, uint16_t interval_ms, uint16_t timeout_ms, |
|
uint16_t wait_timeout_ms, route_ping_callback_t cb, void* arg, |
|
const uint8_t* pubkey); |
|
|
|
// Очистить список ожидающих запросов |
|
void route_ping_destroy_pending(struct NAT_DETECTION* nd); |
|
|
|
// Отменить pending запросы для указанного соединения (при удалении conn) |
|
void route_ping_cancel_for_conn(struct NAT_DETECTION* nd, struct ETCP_CONN* conn); |
|
|
|
// Обработчики, вызываемые из topo_group_receive_cbk (через nat_detection) |
|
void route_ping_handle_req(struct NAT_DETECTION* nd, struct TOPO_GROUP* group, |
|
struct ETCP_CONN* from_conn, const uint8_t* data, size_t len); |
|
void route_ping_handle_resp(struct NAT_DETECTION* nd, |
|
struct ETCP_CONN* from_conn, const uint8_t* data, size_t len); |
|
|
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
#endif // ROUTE_PING_H
|
|
|