mirror of
https://github.com/EndPositive/slipstream.git
synced 2025-10-08 12:25:04 +00:00
Fixup dcubic
This commit is contained in:
parent
161f3a6fd3
commit
479f6b3924
4 changed files with 36 additions and 12 deletions
2
extern/picoquic
vendored
2
extern/picoquic
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit cb052686b0c81e2f56edd6966425c2892ce3927d
|
||||
Subproject commit e00c93d0a6375a41cf25e1ddf24d891632f77cca
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue