Improve DNS handling for compatibility with actual resolvers

- included unbound config
This commit is contained in:
Jop Zitman 2024-12-19 19:18:18 +08:00
parent eb6c7b538f
commit 16c45883b8
7 changed files with 213 additions and 89 deletions

View file

@ -2,21 +2,24 @@
#define SLIPSTREAM_DNS_REQUEST_BUFFER
#include <stdbool.h>
#include <picohash.h>
#include "SPCDNS/src/dns.h"
#define GLOBAL_BUFFER_SIZE 4096
#define GLOBAL_BUFFER_SIZE 32
typedef struct st_slipstream_cnxid_dns_request_buffer_t slipstream_cnxid_dns_request_buffer_t;
typedef struct st_element_t {
dns_decoded_t dns_decoded[DNS_DECODEBUF_4K];
struct sockaddr_storage peer_addr;
struct sockaddr_storage local_addr;
struct st_element_t* buffer_prev;
struct st_element_t* buffer_next;
struct st_element_t* cnxid_buffer_prev;
struct st_element_t* cnxid_buffer_next;
slipstream_cnxid_dns_request_buffer_t* cnxid_buffer;
uint64_t created_time;
int query_id;
} slot_t;
typedef struct st_slipstream_cnxid_dns_request_buffer_t {
@ -25,11 +28,13 @@ typedef struct st_slipstream_cnxid_dns_request_buffer_t {
} slipstream_cnxid_dns_request_buffer_t;
typedef struct {
slot_t elements[GLOBAL_BUFFER_SIZE];
slot_t slots[GLOBAL_BUFFER_SIZE];
slot_t* head;
slot_t* tail;
slot_t* free;
picohash_table* cnxid_to_cnxid_buffer;
slipstream_cnxid_dns_request_buffer_t** cnxid_buffers;
size_t cnxid_buffers_len;
} slipstream_dns_request_buffer_t;
typedef struct st_cnxid_to_cnxid_buffer_t {
@ -43,6 +48,8 @@ void slipstream_dns_request_buffer_init(slipstream_dns_request_buffer_t* buffer)
slipstream_cnxid_dns_request_buffer_t* slipstream_dns_request_buffer_get_cnxid_buffer(
slipstream_dns_request_buffer_t* buffer, picoquic_connection_id_t* initial_cnxid, bool create);
void slipstream_dns_request_buffer_free_slot(slipstream_dns_request_buffer_t* buffer, slot_t* slot);
slot_t* slipstream_dns_request_buffer_get_write_slot(slipstream_dns_request_buffer_t* buffer);
void slipstream_dns_request_buffer_commit_slot_to_cnxid_buffer(slipstream_dns_request_buffer_t* buffer,