From 85f60dbc37936529938b5e0a7140398903bbcd61 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius <daniel.bevenius@gmail.com> Date: Fri, 1 Nov 2019 14:17:35 +0100 Subject: [PATCH] Introduce put_uint16_varint function This commit adds a static function named put_uint16_varint to reduce some code duplication when putting some transport parameters. --- lib/ngtcp2_crypto.c | 81 +++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 50 deletions(-) diff --git a/lib/ngtcp2_crypto.c b/lib/ngtcp2_crypto.c index e43c81ac..e0fab981 100644 --- a/lib/ngtcp2_crypto.c +++ b/lib/ngtcp2_crypto.c @@ -86,6 +86,13 @@ static size_t varint_paramlen(uint64_t param) { return 4 + ngtcp2_put_varint_len(param); } +static uint8_t *put_uint16_varint(uint8_t *p, ngtcp2_transport_param_id id, + uint64_t value) { + p = ngtcp2_put_uint16be(p, id); + p = ngtcp2_put_uint16be(p, (uint16_t)ngtcp2_put_varint_len(value)); + return ngtcp2_put_varint(p, value); +} + ssize_t ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, ngtcp2_transport_params_type exttype, const ngtcp2_transport_params *params) { @@ -202,63 +209,45 @@ ssize_t ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, } if (params->initial_max_stream_data_bidi_local) { - p = ngtcp2_put_uint16be( - p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL); - p = ngtcp2_put_uint16be(p, (uint16_t)ngtcp2_put_varint_len( - params->initial_max_stream_data_bidi_local)); - p = ngtcp2_put_varint(p, params->initial_max_stream_data_bidi_local); + p = put_uint16_varint(p, + NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL, + params->initial_max_stream_data_bidi_local); } if (params->initial_max_stream_data_bidi_remote) { - p = ngtcp2_put_uint16be( - p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE); - p = ngtcp2_put_uint16be(p, - (uint16_t)ngtcp2_put_varint_len( - params->initial_max_stream_data_bidi_remote)); - p = ngtcp2_put_varint(p, params->initial_max_stream_data_bidi_remote); + p = put_uint16_varint(p, + NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE, + params->initial_max_stream_data_bidi_remote); } if (params->initial_max_stream_data_uni) { - p = ngtcp2_put_uint16be(p, - NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_UNI); - p = ngtcp2_put_uint16be(p, (uint16_t)ngtcp2_put_varint_len( - params->initial_max_stream_data_uni)); - p = ngtcp2_put_varint(p, params->initial_max_stream_data_uni); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAM_DATA_UNI, + params->initial_max_stream_data_uni); } if (params->initial_max_data) { - p = ngtcp2_put_uint16be(p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_DATA); - p = ngtcp2_put_uint16be( - p, (uint16_t)ngtcp2_put_varint_len(params->initial_max_data)); - p = ngtcp2_put_varint(p, params->initial_max_data); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_DATA, + params->initial_max_data); } if (params->initial_max_streams_bidi) { - p = ngtcp2_put_uint16be(p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_BIDI); - p = ngtcp2_put_uint16be( - p, (uint16_t)ngtcp2_put_varint_len(params->initial_max_streams_bidi)); - p = ngtcp2_put_varint(p, params->initial_max_streams_bidi); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_BIDI, + params->initial_max_streams_bidi); } if (params->initial_max_streams_uni) { - p = ngtcp2_put_uint16be(p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_UNI); - p = ngtcp2_put_uint16be( - p, (uint16_t)ngtcp2_put_varint_len(params->initial_max_streams_uni)); - p = ngtcp2_put_varint(p, params->initial_max_streams_uni); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_INITIAL_MAX_STREAMS_UNI, + params->initial_max_streams_uni); } if (params->max_packet_size != NGTCP2_MAX_PKT_SIZE) { - p = ngtcp2_put_uint16be(p, NGTCP2_TRANSPORT_PARAM_MAX_PACKET_SIZE); - p = ngtcp2_put_uint16be( - p, (uint16_t)ngtcp2_put_varint_len(params->max_packet_size)); - p = ngtcp2_put_varint(p, params->max_packet_size); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_MAX_PACKET_SIZE, + params->max_packet_size); } if (params->ack_delay_exponent != NGTCP2_DEFAULT_ACK_DELAY_EXPONENT) { - p = ngtcp2_put_uint16be(p, NGTCP2_TRANSPORT_PARAM_ACK_DELAY_EXPONENT); - p = ngtcp2_put_uint16be( - p, (uint16_t)ngtcp2_put_varint_len(params->ack_delay_exponent)); - p = ngtcp2_put_varint(p, params->ack_delay_exponent); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_ACK_DELAY_EXPONENT, + params->ack_delay_exponent); } if (params->disable_active_migration) { @@ -267,26 +256,18 @@ ssize_t ngtcp2_encode_transport_params(uint8_t *dest, size_t destlen, } if (params->max_ack_delay != NGTCP2_DEFAULT_MAX_ACK_DELAY) { - p = ngtcp2_put_uint16be(p, NGTCP2_TRANSPORT_PARAM_MAX_ACK_DELAY); - p = ngtcp2_put_uint16be(p, - (uint16_t)ngtcp2_put_varint_len( - params->max_ack_delay / NGTCP2_MILLISECONDS)); - p = ngtcp2_put_varint(p, params->max_ack_delay / NGTCP2_MILLISECONDS); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_MAX_ACK_DELAY, + params->max_ack_delay / NGTCP2_MILLISECONDS); } if (params->idle_timeout) { - p = ngtcp2_put_uint16be(p, NGTCP2_TRANSPORT_PARAM_IDLE_TIMEOUT); - p = ngtcp2_put_uint16be(p, (uint16_t)ngtcp2_put_varint_len( - params->idle_timeout / NGTCP2_MILLISECONDS)); - p = ngtcp2_put_varint(p, params->idle_timeout / NGTCP2_MILLISECONDS); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_IDLE_TIMEOUT, + params->idle_timeout / NGTCP2_MILLISECONDS); } if (params->active_connection_id_limit) { - p = ngtcp2_put_uint16be(p, - NGTCP2_TRANSPORT_PARAM_ACTIVE_CONNECTION_ID_LIMIT); - p = ngtcp2_put_uint16be( - p, (uint16_t)ngtcp2_put_varint_len(params->active_connection_id_limit)); - p = ngtcp2_put_varint(p, params->active_connection_id_limit); + p = put_uint16_varint(p, NGTCP2_TRANSPORT_PARAM_ACTIVE_CONNECTION_ID_LIMIT, + params->active_connection_id_limit); } assert((size_t)(p - dest) == len); -- GitLab