mirror of
https://github.com/darkk/redsocks.git
synced 2025-08-25 19:25:30 +00:00
* TPROXY requires Linux 2.6.29+ (see man 7 ip[1]). * all redsocks code is running as root to bind to arbitrary port. * Non-Linux and old-Linux builds are broken at the moment. [1] http://www.kernel.org/doc/man-pages/online/pages/man7/ip.7.html
50 lines
1.3 KiB
C
50 lines
1.3 KiB
C
#ifndef REDUDP_H
|
|
#define REDUDP_H
|
|
|
|
typedef struct redudp_config_t {
|
|
struct sockaddr_in bindaddr;
|
|
struct sockaddr_in relayaddr;
|
|
// TODO: outgoingaddr;
|
|
struct sockaddr_in destaddr;
|
|
char *login;
|
|
char *password;
|
|
uint16_t max_pktqueue;
|
|
uint16_t udp_timeout;
|
|
uint16_t udp_timeout_stream;
|
|
} redudp_config;
|
|
|
|
typedef struct redudp_instance_t {
|
|
list_head list;
|
|
redudp_config config;
|
|
struct event listener;
|
|
list_head clients;
|
|
} redudp_instance;
|
|
|
|
typedef struct redudp_client_t {
|
|
list_head list;
|
|
redudp_instance *instance;
|
|
struct sockaddr_in clientaddr;
|
|
struct sockaddr_in destaddr;
|
|
int sender_fd; // shared between several clients socket (bound to `destaddr`)
|
|
struct event timeout;
|
|
struct bufferevent *relay;
|
|
struct event udprelay;
|
|
struct sockaddr_in udprelayaddr;
|
|
int state; // it's used by bottom layer
|
|
time_t first_event;
|
|
time_t last_client_event;
|
|
time_t last_relay_event;
|
|
unsigned int queue_len;
|
|
list_head queue;
|
|
} redudp_client;
|
|
|
|
typedef struct enqueued_packet_t {
|
|
list_head list;
|
|
size_t len;
|
|
char data[1];
|
|
} enqueued_packet;
|
|
|
|
/* vim:set tabstop=4 softtabstop=4 shiftwidth=4: */
|
|
/* vim:set foldmethod=marker foldlevel=32 foldmarker={,}: */
|
|
#endif /* REDUDP_H */
|