diff --git a/extern/picoquic b/extern/picoquic index cb05268..e00c93d 160000 --- a/extern/picoquic +++ b/extern/picoquic @@ -1 +1 @@ -Subproject commit cb052686b0c81e2f56edd6966425c2892ce3927d +Subproject commit e00c93d0a6375a41cf25e1ddf24d891632f77cca diff --git a/include/slipstream_slot.h b/include/slipstream_slot.h index c1585d6..6f37ec3 100644 --- a/include/slipstream_slot.h +++ b/include/slipstream_slot.h @@ -10,7 +10,6 @@ typedef struct st_slot_t { struct sockaddr_storage peer_addr; struct sockaddr_storage local_addr; picoquic_cnx_t* cnx; - uint64_t created_time; bool is_poll_packet; bool responded; } slot_t; diff --git a/src/slipstream_client.c b/src/slipstream_client.c index 733b3d3..b1e6aaa 100644 --- a/src/slipstream_client.c +++ b/src/slipstream_client.c @@ -43,7 +43,6 @@ typedef struct st_slipstream_client_ctx_t { picoquic_network_thread_ctx_t* thread_ctx; struct st_address_t* server_addresses; size_t server_address_count; - uint64_t last_request; bool ready; bool closed; int listen_sock; @@ -95,11 +94,14 @@ ssize_t client_encode_segment(dns_packet_t* packet, size_t* packet_len, const un } ssize_t client_encode(void* slot_p, void* callback_ctx, unsigned char** dest_buf, const unsigned char* src_buf, size_t src_buf_len, size_t* segment_len, struct sockaddr_storage* peer_addr, struct sockaddr_storage* local_addr) { - assert(callback_ctx); - slipstream_client_ctx_t* client_ctx = callback_ctx; - // optimize path for single segment if (src_buf_len <= *segment_len) { +#ifdef NOENCODE + *dest_buf = malloc(src_buf_len); + memcpy((void*)*dest_buf, src_buf, src_buf_len); + + return src_buf_len; +#endif size_t packet_len = MAX_DNS_QUERY_SIZE; unsigned char* packet = malloc(packet_len); const ssize_t ret = client_encode_segment((dns_packet_t*) packet, &packet_len, src_buf, src_buf_len); @@ -111,11 +113,13 @@ ssize_t client_encode(void* slot_p, void* callback_ctx, unsigned char** dest_buf *dest_buf = packet; *segment_len = packet_len; - client_ctx->last_request = picoquic_current_time(); - return packet_len; } +#ifdef NOENCODE + assert(false); +#endif + size_t num_segments = src_buf_len / *segment_len; unsigned char* packets = malloc(MAX_DNS_QUERY_SIZE * num_segments); unsigned char* current_packet = packets; @@ -147,14 +151,19 @@ ssize_t client_encode(void* slot_p, void* callback_ctx, unsigned char** dest_buf *dest_buf = packets; *segment_len = first_packet_len; - client_ctx->last_request = picoquic_current_time(); - return current_packet - packets; } ssize_t client_decode(void* slot_p, void* callback_ctx, unsigned char** dest_buf, const unsigned char* src_buf, size_t src_buf_len, struct sockaddr_storage* peer_addr, struct sockaddr_storage* local_addr) { *dest_buf = NULL; +#ifdef NODECODE + *dest_buf = malloc(src_buf_len); + memcpy((void*)*dest_buf, src_buf, src_buf_len); + + return src_buf_len; +#endif + size_t bufsize = DNS_DECODEBUF_4K * sizeof(dns_decoded_t); dns_decoded_t decoded[DNS_DECODEBUF_4K] = {0}; const dns_rcode_t rc = dns_decode(decoded, &bufsize, (const dns_packet_t*) src_buf, src_buf_len); @@ -804,7 +813,6 @@ int picoquic_slipstream_client(int listen_port, char const* resolver_addresses_f param.is_client = 1; param.decode = client_decode; param.encode = client_encode; - param.delay_max = 5000; picoquic_network_thread_ctx_t thread_ctx = {0}; thread_ctx.quic = quic; diff --git a/src/slipstream_server.c b/src/slipstream_server.c index 4d1855f..01cd055 100644 --- a/src/slipstream_server.c +++ b/src/slipstream_server.c @@ -35,6 +35,17 @@ ssize_t server_encode(void* slot_p, void* callback_ctx, unsigned char** dest_buf assert(segment_len == NULL || *segment_len == 0 || *segment_len == src_buf_len); slot_t* slot = (slot_t*) slot_p; + +#ifdef NOENCODE + *dest_buf = malloc(src_buf_len); + memcpy((void*)*dest_buf, src_buf, src_buf_len); + + memcpy(peer_addr, &slot->peer_addr, sizeof(struct sockaddr_storage)); + memcpy(local_addr, &slot->local_addr, sizeof(struct sockaddr_storage)); + + return src_buf_len; +#endif + dns_query_t *query = (dns_query_t *) slot->dns_decoded; dns_txt_t answer_txt; // TODO: fix dns_answer_t edns = {0}; @@ -95,7 +106,6 @@ ssize_t server_decode(void* slot_p, void* callback_ctx, unsigned char** dest_buf *dest_buf = NULL; slot_t* slot = slot_p; - slot->created_time = picoquic_current_time(); // DNS packets arrive from random source ports, so: // * save the original address in the dns query slot @@ -105,6 +115,13 @@ ssize_t server_decode(void* slot_p, void* callback_ctx, unsigned char** dest_buf // Save local address for right response local addr memcpy(&slot->local_addr, local_addr, sizeof(struct sockaddr_storage)); +#ifdef NODECODE + *dest_buf = malloc(src_buf_len); + memcpy((void*)*dest_buf, src_buf, src_buf_len); + + return src_buf_len; +#endif + size_t packet_len = DNS_DECODEBUF_4K * sizeof(dns_decoded_t); dns_decoded_t* packet = slot->dns_decoded; const dns_rcode_t rc = dns_decode(packet, &packet_len, (const dns_packet_t*) src_buf, src_buf_len);