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 peer_addr;
|
||||||
struct sockaddr_storage local_addr;
|
struct sockaddr_storage local_addr;
|
||||||
picoquic_cnx_t* cnx;
|
picoquic_cnx_t* cnx;
|
||||||
uint64_t created_time;
|
|
||||||
bool is_poll_packet;
|
bool is_poll_packet;
|
||||||
bool responded;
|
bool responded;
|
||||||
} slot_t;
|
} slot_t;
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,6 @@ typedef struct st_slipstream_client_ctx_t {
|
||||||
picoquic_network_thread_ctx_t* thread_ctx;
|
picoquic_network_thread_ctx_t* thread_ctx;
|
||||||
struct st_address_t* server_addresses;
|
struct st_address_t* server_addresses;
|
||||||
size_t server_address_count;
|
size_t server_address_count;
|
||||||
uint64_t last_request;
|
|
||||||
bool ready;
|
bool ready;
|
||||||
bool closed;
|
bool closed;
|
||||||
int listen_sock;
|
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) {
|
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
|
// optimize path for single segment
|
||||||
if (src_buf_len <= *segment_len) {
|
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;
|
size_t packet_len = MAX_DNS_QUERY_SIZE;
|
||||||
unsigned char* packet = malloc(packet_len);
|
unsigned char* packet = malloc(packet_len);
|
||||||
const ssize_t ret = client_encode_segment((dns_packet_t*) packet, &packet_len, src_buf, src_buf_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;
|
*dest_buf = packet;
|
||||||
*segment_len = packet_len;
|
*segment_len = packet_len;
|
||||||
|
|
||||||
client_ctx->last_request = picoquic_current_time();
|
|
||||||
|
|
||||||
return packet_len;
|
return packet_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef NOENCODE
|
||||||
|
assert(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
size_t num_segments = src_buf_len / *segment_len;
|
size_t num_segments = src_buf_len / *segment_len;
|
||||||
unsigned char* packets = malloc(MAX_DNS_QUERY_SIZE * num_segments);
|
unsigned char* packets = malloc(MAX_DNS_QUERY_SIZE * num_segments);
|
||||||
unsigned char* current_packet = packets;
|
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;
|
*dest_buf = packets;
|
||||||
*segment_len = first_packet_len;
|
*segment_len = first_packet_len;
|
||||||
|
|
||||||
client_ctx->last_request = picoquic_current_time();
|
|
||||||
|
|
||||||
return current_packet - packets;
|
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) {
|
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;
|
*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);
|
size_t bufsize = DNS_DECODEBUF_4K * sizeof(dns_decoded_t);
|
||||||
dns_decoded_t decoded[DNS_DECODEBUF_4K] = {0};
|
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);
|
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.is_client = 1;
|
||||||
param.decode = client_decode;
|
param.decode = client_decode;
|
||||||
param.encode = client_encode;
|
param.encode = client_encode;
|
||||||
param.delay_max = 5000;
|
|
||||||
|
|
||||||
picoquic_network_thread_ctx_t thread_ctx = {0};
|
picoquic_network_thread_ctx_t thread_ctx = {0};
|
||||||
thread_ctx.quic = quic;
|
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);
|
assert(segment_len == NULL || *segment_len == 0 || *segment_len == src_buf_len);
|
||||||
|
|
||||||
slot_t* slot = (slot_t*) slot_p;
|
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_query_t *query = (dns_query_t *) slot->dns_decoded;
|
||||||
dns_txt_t answer_txt; // TODO: fix
|
dns_txt_t answer_txt; // TODO: fix
|
||||||
dns_answer_t edns = {0};
|
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;
|
*dest_buf = NULL;
|
||||||
|
|
||||||
slot_t* slot = slot_p;
|
slot_t* slot = slot_p;
|
||||||
slot->created_time = picoquic_current_time();
|
|
||||||
|
|
||||||
// DNS packets arrive from random source ports, so:
|
// DNS packets arrive from random source ports, so:
|
||||||
// * save the original address in the dns query slot
|
// * 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
|
// Save local address for right response local addr
|
||||||
memcpy(&slot->local_addr, local_addr, sizeof(struct sockaddr_storage));
|
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);
|
size_t packet_len = DNS_DECODEBUF_4K * sizeof(dns_decoded_t);
|
||||||
dns_decoded_t* packet = slot->dns_decoded;
|
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);
|
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