From 7fce829d51af7b7eca24471cb711f82a4d06e9f3 Mon Sep 17 00:00:00 2001 From: huitema <huitema@huitema.net> Date: Fri, 23 Nov 2018 17:11:19 -0800 Subject: [PATCH] Log leading zeros in Initial CID --- picoquic/logger.c | 126 +++++++++++++++++------------------ picoquic/packet.c | 4 +- picoquic/picoquic_internal.h | 2 +- 3 files changed, 65 insertions(+), 67 deletions(-) diff --git a/picoquic/logger.c b/picoquic/logger.c index f9f28dd3..9acf421c 100644 --- a/picoquic/logger.c +++ b/picoquic/logger.c @@ -95,6 +95,13 @@ const char * picoquic_log_fin_or_event_name(picoquic_call_back_event_t ev) return text; } +void picoquic_log_prefix_initial_cid64(FILE* F, uint64_t log_cnxid64) +{ + if (log_cnxid64 != 0) { + fprintf(F, "%016llx: ", (unsigned long long)log_cnxid64); + } +} + void picoquic_log_packet_address(FILE* F, uint64_t log_cnxid64, picoquic_cnx_t* cnx, struct sockaddr* addr_peer, int receiving, size_t length, uint64_t current_time) { @@ -102,9 +109,7 @@ void picoquic_log_packet_address(FILE* F, uint64_t log_cnxid64, picoquic_cnx_t* uint64_t time_sec = 0; uint32_t time_usec = 0; - if (log_cnxid64 != 0) { - fprintf(F, "%" PRIx64 ": ", log_cnxid64); - } + picoquic_log_prefix_initial_cid64(F, log_cnxid64); fprintf(F, (receiving) ? "Receiving %d bytes from " : "Sending %d bytes to ", (int)length); @@ -334,9 +339,7 @@ void picoquic_log_connection_id(FILE* F, picoquic_connection_id_t * cid) void picoquic_log_packet_header(FILE* F, uint64_t log_cnxid64, picoquic_packet_header* ph, int receiving) { - if (log_cnxid64 != 0) { - fprintf(F, "%" PRIx64 ": ", log_cnxid64); - } + picoquic_log_prefix_initial_cid64(F, log_cnxid64); fprintf(F, "%s packet type: %d (%s), ", (receiving != 0)?"Receiving":"Sending", ph->ptype, picoquic_log_ptype_name(ph->ptype)); @@ -346,17 +349,17 @@ void picoquic_log_packet_header(FILE* F, uint64_t log_cnxid64, picoquic_packet_h switch (ph->ptype) { case picoquic_packet_1rtt_protected: /* Short packets. Log dest CID and Seq number. */ - if (log_cnxid64 != 0) { - fprintf(F, "\n%" PRIx64 ": ", 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, ", Seq: %x (%llx), Phi: %d,\n", ph->pn, (unsigned long long)ph->pn64, ph->key_phase); + fprintf(F, ", Seq: %d (%llu), Phi: %d,\n", ph->pn, (unsigned long long)ph->pn64, ph->key_phase); break; case picoquic_packet_version_negotiation: /* V nego. log both CID */ - if (log_cnxid64 != 0) { - fprintf(F, "\n%" PRIx64 ": ", 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); @@ -365,15 +368,15 @@ 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); - if (log_cnxid64 != 0) { - fprintf(F, "\n%" PRIx64 ": ", log_cnxid64); - } + picoquic_log_prefix_initial_cid64(F, log_cnxid64); + picoquic_log_connection_id(F, &ph->dest_cnx_id); fprintf(F, ", "); picoquic_log_connection_id(F, &ph->srce_cnx_id); fprintf(F, ", Seq: %x, pl: %d\n", ph->pn, ph->pl_val); if (ph->ptype == picoquic_packet_initial) { - fprintf(F, "%" PRIx64 ": Token length: %d", log_cnxid64, ph->token_length); + picoquic_log_prefix_initial_cid64(F, log_cnxid64); + fprintf(F, " Token length: %d", ph->token_length); if (ph->token_length > 0) { uint32_t printed_length = (ph->token_length > 16) ? 16 : ph->token_length; fprintf(F, ", Token: "); @@ -396,9 +399,7 @@ void picoquic_log_negotiation_packet(FILE* F, uint64_t log_cnxid64, size_t byte_index = ph->offset; uint32_t vn = 0; - if (log_cnxid64 != 0) { - fprintf(F, "%" PRIx64 ": ", log_cnxid64); - } + picoquic_log_prefix_initial_cid64(F, log_cnxid64); fprintf(F, " versions: "); @@ -422,11 +423,13 @@ void picoquic_log_retry_packet(FILE* F, uint64_t log_cnxid64, picoquic_parse_packet_header_cnxid_lengths(bytes[byte_index++], &unused_cil, &odcil); if ((int)odcil > payload_length) { - fprintf(F, "%" PRIx64 ": packet too short, ODCIL: %x (%d), only %d bytes available.\n", - log_cnxid64, bytes[byte_index - 1], odcil, payload_length); + picoquic_log_prefix_initial_cid64(F, log_cnxid64); + fprintf(F, "packet too short, ODCIL: %x (%d), only %d bytes available.\n", + bytes[byte_index - 1], odcil, payload_length); } else { /* Dump the old connection ID */ - fprintf(F, "%" PRIx64 ": ODCIL: <", log_cnxid64); + picoquic_log_prefix_initial_cid64(F, log_cnxid64); + fprintf(F, " ODCIL: <"); for (uint8_t i = 0; i < odcil; i++) { fprintf(F, "%02x", bytes[byte_index++]); } @@ -435,8 +438,8 @@ void picoquic_log_retry_packet(FILE* F, uint64_t log_cnxid64, fprintf(F, ">, Token length: %d\n", token_length); /* Print the token or an error */ if (token_length > 0) { - int printed_length = (token_length > 16) ? 16 : token_length; - fprintf(F, "%" PRIx64 ": Token: ", log_cnxid64); + int printed_length = (token_length > 16) ? 16 : token_length; + picoquic_log_prefix_initial_cid64(F, log_cnxid64); for (uint8_t i = 0; i < printed_length; i++) { fprintf(F, "%02x", bytes[byte_index++]); } @@ -996,7 +999,6 @@ size_t picoquic_log_crypto_hs_frame(FILE* F, uint8_t* bytes, size_t bytes_max) fprintf(F, " Malformed Crypto HS frame.\n"); byte_index = bytes_max; } else { - fprintf(F, " Crypto HS frame, offset %" PRIu64 ", length %d", offset, (int)data_length); fprintf(F, ": "); @@ -1018,9 +1020,7 @@ void picoquic_log_frames(FILE* F, uint64_t cnx_id64, uint8_t* bytes, size_t leng while (byte_index < length) { uint8_t frame_id = bytes[byte_index]; - if (cnx_id64 != 0) { - fprintf(F, "%" PRIx64 ": ", cnx_id64); - } + picoquic_log_prefix_initial_cid64(F, cnx_id64); if (PICOQUIC_IN_RANGE(frame_id, picoquic_frame_type_stream_range_min, picoquic_frame_type_stream_range_max)) { byte_index += picoquic_log_stream_frame(F, bytes + byte_index, length - byte_index); @@ -1156,9 +1156,8 @@ void picoquic_log_decrypted_segment(void* F_log, int log_cnxid, picoquic_cnx_t* if (ret != 0) { /* packet does parse or decrypt */ - if (log_cnxid64 != 0) { - fprintf(F, "%" PRIx64 ": ", log_cnxid64); - } + picoquic_log_prefix_initial_cid64(F, log_cnxid64); + if (ret == PICOQUIC_ERROR_STATELESS_RESET) { fprintf(F, " Stateless reset.\n"); } @@ -1176,9 +1175,7 @@ void picoquic_log_decrypted_segment(void* F_log, int log_cnxid, picoquic_cnx_t* } else if (ph->ptype != picoquic_packet_error) { /* log frames inside packet */ - if (log_cnxid64 != 0) { - fprintf(F, "%" PRIx64 ": ", log_cnxid64); - } + picoquic_log_prefix_initial_cid64(F, log_cnxid64); fprintf(F, " %s %d bytes\n", (receiving)?"Decrypted": "Prepared", (int)ph->payload_length); picoquic_log_frames(F, log_cnxid64, bytes + ph->offset, ph->payload_length); @@ -1445,37 +1442,31 @@ void picoquic_log_transport_extension(FILE* F, picoquic_cnx_t* cnx, int log_cnxi int client_mode = 1; char const* sni = picoquic_tls_get_sni(cnx); char const* alpn = picoquic_tls_get_negotiated_alpn(cnx); + uint64_t cnx_id64 = (log_cnxid) ? picoquic_val64_connection_id(picoquic_get_logging_cnxid(cnx)) : 0; - if (log_cnxid != 0) { - fprintf(F, "%" PRIx64 ": ", picoquic_val64_connection_id(picoquic_get_logging_cnxid(cnx))); - } + picoquic_log_prefix_initial_cid64(F, cnx_id64); if (sni == NULL) { fprintf(F, "SNI not received.\n"); } else { fprintf(F, "Received SNI: %s\n", sni); } - if (log_cnxid != 0) { - fprintf(F, "%" PRIx64 ": ", picoquic_val64_connection_id(picoquic_get_logging_cnxid(cnx))); - } + picoquic_log_prefix_initial_cid64(F, cnx_id64); if (alpn == NULL) { fprintf(F, "ALPN not received.\n"); } else { fprintf(F, "Received ALPN: %s\n", alpn); } + picoquic_provide_received_transport_extensions(cnx, &bytes, &bytes_max, &ext_received_return, &client_mode); if (bytes_max == 0) { - if (log_cnxid != 0) { - fprintf(F, "%" PRIx64 ": ", picoquic_val64_connection_id(picoquic_get_logging_cnxid(cnx))); - } + picoquic_log_prefix_initial_cid64(F, cnx_id64); fprintf(F, "Did not receive transport parameter TLS extension.\n"); } else { - if (log_cnxid != 0) { - fprintf(F, "%" PRIx64 ": ", picoquic_val64_connection_id(picoquic_get_logging_cnxid(cnx))); - } + picoquic_log_prefix_initial_cid64(F, cnx_id64); fprintf(F, "Received transport parameter TLS extension (%d bytes):\n", (uint32_t)bytes_max); picoquic_log_transport_extension_content(F, log_cnxid, @@ -1522,6 +1513,7 @@ void picoquic_log_congestion_state(FILE* F, picoquic_cnx_t* cnx, uint64_t curren static void picoquic_log_tls_ticket(FILE* F, picoquic_connection_id_t cnx_id, uint8_t* ticket, uint16_t ticket_length) { + uint64_t cnx_id64 = picoquic_val64_connection_id(cnx_id); uint32_t lifetime = 0; uint32_t age_add = 0; uint8_t nonce_length = 0; @@ -1570,16 +1562,18 @@ static void picoquic_log_tls_ticket(FILE* F, picoquic_connection_id_t cnx_id, } if (ret == -1) { - fprintf(F, "%llu: Malformed ticket, length = %d, at least %d required.\n", - (unsigned long long)picoquic_val64_connection_id(cnx_id), ticket_length, min_length); + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "Malformed ticket, length = %d, at least %d required.\n", ticket_length, min_length); } - fprintf(F, "%llu: lifetime = %d, age_add = %x, %d nonce, %d ticket, %d extensions.\n", - (unsigned long long)picoquic_val64_connection_id(cnx_id), lifetime, age_add, nonce_length, ticket_val_length, extension_length); + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "lifetime = %d, age_add = %x, %d nonce, %d ticket, %d extensions.\n", + lifetime, age_add, nonce_length, ticket_val_length, extension_length); if (extension_ptr != NULL) { uint16_t x_index = 0; - fprintf(F, "%llu: ticket extensions: ", (unsigned long long)picoquic_val64_connection_id(cnx_id)); + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "ticket extensions: "); while (x_index + 4 < extension_length) { uint16_t x_type = PICOPARSE_16(extension_ptr + x_index); @@ -1594,22 +1588,23 @@ static void picoquic_log_tls_ticket(FILE* F, picoquic_connection_id_t cnx_id, } if (x_index > extension_length) { - fprintf(F, "\n%llu: malformed extensions, require %d bytes, not just %d", - (unsigned long long)picoquic_val64_connection_id(cnx_id), x_index, extension_length); + fprintf(F, "\n"); + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "malformed extensions, require %d bytes, not just %d", x_index, extension_length); } } fprintf(F, "\n"); if (x_index < extension_length) { - fprintf(F, "\n%llu: %d extra bytes at the end of the extensions\n", - (unsigned long long)picoquic_val64_connection_id(cnx_id), extension_length - x_index); + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "%d extra bytes at the end of the extensions\n", extension_length - x_index); } } if (ret == -2) { - fprintf(F, "%llu: Malformed TLS ticket, %d extra bytes.\n", - (unsigned long long)picoquic_val64_connection_id(cnx_id), ticket_length - min_length); + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "Malformed TLS ticket, %d extra bytes.\n", ticket_length - min_length); } } @@ -1628,6 +1623,7 @@ uint16_t cipher_suite; void picoquic_log_picotls_ticket(FILE* F, picoquic_connection_id_t cnx_id, uint8_t* ticket, uint16_t ticket_length) { + uint64_t cnx_id64 = picoquic_val64_connection_id(cnx_id); uint64_t ticket_time = 0; uint16_t kx_id = 0; uint16_t suite_id = 0; @@ -1670,13 +1666,15 @@ void picoquic_log_picotls_ticket(FILE* F, picoquic_connection_id_t cnx_id, } } - fprintf(F, "%llu: ticket time = %llu, kx = %x, suite = %x, %d ticket, %d secret.\n", - (unsigned long long)picoquic_val64_connection_id(cnx_id), (unsigned long long)ticket_time, + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "ticket time = %llu, kx = %x, suite = %x, %d ticket, %d secret.\n", + (unsigned long long)ticket_time, kx_id, suite_id, tls_ticket_length, secret_length); if (ret == -1) { - fprintf(F, "%llu: Malformed PTLS ticket, length = %d, at least %d required.\n", - (unsigned long long)picoquic_val64_connection_id(cnx_id), ticket_length, min_length); + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "Malformed PTLS ticket, length = %d, at least %d required.\n", + ticket_length, min_length); } else { if (tls_ticket_length > 0 && tls_ticket_ptr != NULL) { picoquic_log_tls_ticket(F, cnx_id, tls_ticket_ptr, (uint16_t) tls_ticket_length); @@ -1684,7 +1682,7 @@ void picoquic_log_picotls_ticket(FILE* F, picoquic_connection_id_t cnx_id, } if (ret == -2) { - fprintf(F, "%llu: Malformed PTLS ticket, %d extra bytes.\n", - (unsigned long long)picoquic_val64_connection_id(cnx_id), ticket_length - min_length); + picoquic_log_prefix_initial_cid64(F, cnx_id64); + fprintf(F, "Malformed PTLS ticket, %d extra bytes.\n", ticket_length - min_length); } } diff --git a/picoquic/packet.c b/picoquic/packet.c index b311f881..2784dfc7 100644 --- a/picoquic/packet.c +++ b/picoquic/packet.c @@ -740,8 +740,8 @@ void picoquic_process_unexpected_cnxid( sp->cnxid_log64 = picoquic_val64_connection_id(ph->dest_cnx_id); if (quic->F_log != NULL) { - fprintf(quic->F_log, "%llu: Unexpected connection ID, sending stateless reset.\n", - (unsigned long long)sp->cnxid_log64); + picoquic_log_prefix_initial_cid64(quic->F_log, sp->cnxid_log64); + fprintf(quic->F_log, "Unexpected connection ID, sending stateless reset.\n"); } diff --git a/picoquic/picoquic_internal.h b/picoquic/picoquic_internal.h index a82eded7..bd07e1a8 100644 --- a/picoquic/picoquic_internal.h +++ b/picoquic/picoquic_internal.h @@ -901,7 +901,7 @@ void picoquic_log_outgoing_segment(void* F_log, int log_cnxid, picoquic_cnx_t* c void picoquic_log_packet_address(FILE* F, uint64_t log_cnxid64, picoquic_cnx_t* cnx, struct sockaddr* addr_peer, int receiving, size_t length, uint64_t current_time); -void picoquic_log_transport_extension(FILE* F, picoquic_cnx_t* cnx, int log_cnxid); +void picoquic_log_prefix_initial_cid64(FILE* F, uint64_t log_cnxid64); void picoquic_log_error_packet(FILE* F, uint8_t* bytes, size_t bytes_max, int ret); void picoquic_log_processing(FILE* F, picoquic_cnx_t* cnx, size_t length, int ret); -- GitLab