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.
58 lines
1.8 KiB
58 lines
1.8 KiB
// remote_proxy.h — Удаленный TCP прокси (exit node) |
|
// Создаёт OS сокеты к адресатам по запросам от других нод через etcp_router |
|
#ifndef REMOTE_PROXY_H |
|
#define REMOTE_PROXY_H |
|
|
|
#include <stdint.h> |
|
#include "../lib/socket_compat.h" |
|
|
|
struct UTUN_INSTANCE; |
|
struct UASYNC; |
|
struct ll_entry; |
|
struct ETCP_CONN; |
|
struct remote_proxy_ctx; |
|
|
|
// Sub-commands for ETCP_ID_TCP_PROXY protocol |
|
#define TCP_PROXY_SUBCMD_CONNECT 0x01 |
|
#define TCP_PROXY_SUBCMD_CONNECTED 0x02 |
|
#define TCP_PROXY_SUBCMD_DATA 0x03 |
|
#define TCP_PROXY_SUBCMD_CLOSE 0x04 |
|
|
|
#define TCP_PROXY_CONNECTED_OK 0 |
|
#define TCP_PROXY_CONNECTED_REFUSED 1 |
|
|
|
#define TCP_PROXY_HDR_SIZE 10 |
|
#define TCP_PROXY_CONNECT_HDR_SIZE 16 |
|
#define TCP_PROXY_CONNECTED_HDR_SIZE 13 |
|
|
|
struct remote_proxy_conn { |
|
struct remote_proxy_conn* next; |
|
struct remote_proxy_ctx* ctx; |
|
uint64_t stream_id; |
|
uint64_t peer_node_id; |
|
socket_t sock; |
|
void* read_id; |
|
struct UASYNC* ua; |
|
int connected; |
|
int connect_called; |
|
uint8_t dest_ip[4]; |
|
uint16_t dest_port; |
|
}; |
|
|
|
struct remote_proxy_ctx { |
|
int enabled; |
|
struct remote_proxy_conn* conns; |
|
struct UTUN_INSTANCE* inst; |
|
}; |
|
|
|
int remote_proxy_init(struct UTUN_INSTANCE* inst); |
|
void remote_proxy_destroy(struct UTUN_INSTANCE* inst); |
|
|
|
struct remote_proxy_conn* remote_proxy_find_conn(struct remote_proxy_ctx* ctx, uint64_t stream_id); |
|
|
|
int remote_proxy_handle_connect(struct UTUN_INSTANCE* inst, struct ll_entry* entry, |
|
uint64_t stream_id, uint64_t src_node_id); |
|
int remote_proxy_handle_data(struct UTUN_INSTANCE* inst, struct ll_entry* entry, uint64_t stream_id); |
|
void remote_proxy_handle_close(struct UTUN_INSTANCE* inst, uint64_t stream_id); |
|
|
|
#endif
|
|
|