1 #ifndef TCP_REQUEST_H 2 #define TCP_REQUEST_H 3 4 #include "dnscrypt.h" 5 6 #define DNS_MAX_PACKET_SIZE_TCP (65535U + 2U) 7 8 #ifndef TCP_REQUEST_BACKLOG 9 # define TCP_REQUEST_BACKLOG 128 10 #endif 11 12 struct context; 13 struct cert_; 14 15 typedef struct TCPRequestStatus_ { 16 bool has_dns_query_len:1; 17 bool has_dns_reply_len:1; 18 bool is_in_queue:1; 19 bool is_dying:1; 20 } TCPRequestStatus; 21 22 typedef struct TCPRequest_ { 23 TAILQ_ENTRY(TCPRequest_) queue; 24 struct bufferevent *client_proxy_bev; 25 struct bufferevent *proxy_resolver_bev; 26 struct evbuffer *proxy_resolver_query_evbuf; 27 struct context *context; 28 struct event *timeout_timer; 29 uint8_t client_nonce[crypto_box_HALF_NONCEBYTES]; 30 uint8_t nmkey[crypto_box_BEFORENMBYTES]; 31 size_t dns_query_len; 32 size_t dns_reply_len; 33 TCPRequestStatus status; 34 const struct cert_ *cert; 35 bool is_dnscrypted; 36 bool is_blocked; 37 } TCPRequest; 38 39 int tcp_listener_bind(struct context *c); 40 int tcp_listener_start(struct context *c); 41 void tcp_listener_stop(struct context *c); 42 43 #endif 44