From 15f715a2ce9aaa5cfc72d065e0b83edafa4df5a8 Mon Sep 17 00:00:00 2001 From: huitema <huitema@huitema.net> Date: Tue, 27 Nov 2018 17:31:07 -0800 Subject: [PATCH] Fix logging of retry packets and client side bug --- picoquic/logger.c | 13 +++++++++---- picoquic/packet.c | 14 +++++++------- picoquic/sender.c | 5 +++-- picoquicfirst/test_log.txt | 0 4 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 picoquicfirst/test_log.txt diff --git a/picoquic/logger.c b/picoquic/logger.c index 9acf421c..40332f01 100644 --- a/picoquic/logger.c +++ b/picoquic/logger.c @@ -368,8 +368,10 @@ void picoquic_log_packet_header(FILE* F, uint64_t log_cnxid64, picoquic_packet_h default: /* Long packets. Log Vnum, both CID, Seq num, Payload length */ fprintf(F, " Version %x,", ph->vn); - picoquic_log_prefix_initial_cid64(F, log_cnxid64); + fprintf(F, "\n"); + picoquic_log_prefix_initial_cid64(F, log_cnxid64); + fprintf(F, " "); picoquic_log_connection_id(F, &ph->dest_cnx_id); fprintf(F, ", "); picoquic_log_connection_id(F, &ph->srce_cnx_id); @@ -440,6 +442,7 @@ void picoquic_log_retry_packet(FILE* F, uint64_t log_cnxid64, if (token_length > 0) { int printed_length = (token_length > 16) ? 16 : token_length; picoquic_log_prefix_initial_cid64(F, log_cnxid64); + fprintf(F, " Token: "); for (uint8_t i = 0; i < printed_length; i++) { fprintf(F, "%02x", bytes[byte_index++]); } @@ -1208,9 +1211,11 @@ void picoquic_log_outgoing_segment(void* F_log, int log_cnxid, picoquic_cnx_t* c ph.pn64 = sequence_number; ph.pn = (uint32_t)ph.pn64; - if (ph.pn_offset != 0) { - ph.offset = ph.pn_offset + 4; /* todo: should provide the actual length */ - ph.payload_length -= 4; + if (ph.ptype != picoquic_packet_retry) { + if (ph.pn_offset != 0) { + ph.offset = ph.pn_offset + 4; /* todo: should provide the actual length */ + ph.payload_length -= 4; + } } if (ph.ptype != picoquic_packet_version_negotiation) { if (ph.payload_length > checksum_length) { diff --git a/picoquic/packet.c b/picoquic/packet.c index 98c5b215..de57c904 100644 --- a/picoquic/packet.c +++ b/picoquic/packet.c @@ -1105,13 +1105,13 @@ int picoquic_incoming_client_handshake( { int ret = 0; -if (cnx->cnx_state == picoquic_state_server_init - || cnx->cnx_state == picoquic_state_server_handshake - || cnx->cnx_state == picoquic_state_server_almost_ready - || cnx->cnx_state == picoquic_state_server_false_start - || cnx->cnx_state == picoquic_state_ready) { - if (picoquic_compare_connection_id(&ph->srce_cnx_id, &cnx->path[0]->remote_cnxid) != 0) { - ret = PICOQUIC_ERROR_CNXID_CHECK; + if (cnx->cnx_state == picoquic_state_server_init + || cnx->cnx_state == picoquic_state_server_handshake + || cnx->cnx_state == picoquic_state_server_almost_ready + || cnx->cnx_state == picoquic_state_server_false_start + || cnx->cnx_state == picoquic_state_ready) { + if (picoquic_compare_connection_id(&ph->srce_cnx_id, &cnx->path[0]->remote_cnxid) != 0) { + ret = PICOQUIC_ERROR_CNXID_CHECK; } else { /* Accept the incoming frames */ diff --git a/picoquic/sender.c b/picoquic/sender.c index a126bbb3..065bbf54 100644 --- a/picoquic/sender.c +++ b/picoquic/sender.c @@ -1473,13 +1473,14 @@ int picoquic_prepare_packet_client_init(picoquic_cnx_t* cnx, picoquic_path_t * p if (packet_type == picoquic_packet_initial && (cnx->crypto_context[1].aead_encrypt == NULL || - cnx->cnx_state == picoquic_state_client_renegotiate)) { + cnx->cnx_state == picoquic_state_client_renegotiate || + cnx->original_cnxid.id_len != 0)) { /* Pad to minimum packet length. But don't do that if the * initial packet will be coalesced with 0-RTT packet */ while (length < send_buffer_max - checksum_overhead) { bytes[length++] = 0; } - } + } if (packet_type == picoquic_packet_0rtt_protected) { cnx->nb_zero_rtt_sent++; diff --git a/picoquicfirst/test_log.txt b/picoquicfirst/test_log.txt new file mode 100644 index 00000000..e69de29b -- GitLab