1 #ifndef UDP_REQUEST_H 2 #define UDP_REQUEST_H 3 4 #include "dnscrypt.h" 5 6 struct context; 7 struct cert_; 8 9 typedef struct UDPRequestStatus_ { 10 bool is_dying:1; 11 bool is_in_queue:1; 12 } UDPRequestStatus; 13 14 typedef struct UDPRequest_ { 15 RB_ENTRY(UDPRequest_) queue; 16 struct context *context; 17 struct event *sendto_retry_timer; 18 struct event *timeout_timer; 19 uint64_t hash; 20 uint16_t id; 21 uint16_t gen; 22 uint16_t len; 23 uint8_t client_nonce[crypto_box_HALF_NONCEBYTES]; 24 uint8_t nmkey[crypto_box_BEFORENMBYTES]; 25 struct sockaddr_storage client_sockaddr; 26 evutil_socket_t client_proxy_handle; 27 ev_socklen_t client_sockaddr_len; 28 UDPRequestStatus status; 29 unsigned char retries; 30 const struct cert_ *cert; 31 bool is_dnscrypted; 32 bool is_blocked; 33 } UDPRequest; 34 35 typedef TAILQ_HEAD(TCPRequestQueue_, TCPRequest_) TCPRequestQueue; 36 typedef RB_HEAD(UDPRequestQueue_, UDPRequest_) UDPRequestQueue; 37 38 int udp_listener_bind(struct context *c); 39 int udp_listener_start(struct context *c); 40 void udp_listener_stop(struct context *c); 41 int udp_listener_kill_oldest_request(struct context *c); 42 43 #endif 44