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