From fea15e4d9c70fae33e5aa1318e002afddb95c2e9 Mon Sep 17 00:00:00 2001 From: Zhihui Xia Date: Thu, 12 Oct 2023 13:09:01 -0700 Subject: [PATCH 1/2] restore negotiated setting copy --- include/aws/mqtt/v5/mqtt5_client.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/aws/mqtt/v5/mqtt5_client.h b/include/aws/mqtt/v5/mqtt5_client.h index 025c03ba..7cbb19a2 100644 --- a/include/aws/mqtt/v5/mqtt5_client.h +++ b/include/aws/mqtt/v5/mqtt5_client.h @@ -787,6 +787,20 @@ AWS_MQTT_API int aws_mqtt5_negotiated_settings_init( struct aws_mqtt5_negotiated_settings *negotiated_settings, const struct aws_byte_cursor *client_id); +/** + * Makes an owning copy of a negotiated settings structure. + * + * @param source settings to copy from + * @param dest settings to copy into. Must be in a zeroed or initialized state because it gets clean up + * called on it as the first step of the copy process. + * @return success/failure + * + * Used in downstream. + */ +AWS_MQTT_API int aws_mqtt5_negotiated_settings_copy( + const struct aws_mqtt5_negotiated_settings *source, + struct aws_mqtt5_negotiated_settings *dest); + /** * Clean up owned memory in negotiated_settings * From 9a4208e638f58fe492db4c78df8d10c236abe653 Mon Sep 17 00:00:00 2001 From: Zhihui Xia Date: Thu, 12 Oct 2023 13:12:06 -0700 Subject: [PATCH 2/2] add back negotiated settings copy --- source/v5/mqtt5_utils.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/v5/mqtt5_utils.c b/source/v5/mqtt5_utils.c index d4444203..dd483f69 100644 --- a/source/v5/mqtt5_utils.c +++ b/source/v5/mqtt5_utils.c @@ -123,6 +123,24 @@ int aws_mqtt5_negotiated_settings_init( return AWS_OP_SUCCESS; } +int aws_mqtt5_negotiated_settings_copy( + const struct aws_mqtt5_negotiated_settings *source, + struct aws_mqtt5_negotiated_settings *dest) { + aws_mqtt5_negotiated_settings_clean_up(dest); + + *dest = *source; + AWS_ZERO_STRUCT(dest->client_id_storage); + + if (source->client_id_storage.allocator != NULL) { + return aws_byte_buf_init_copy_from_cursor( + &dest->client_id_storage, + source->client_id_storage.allocator, + aws_byte_cursor_from_buf(&source->client_id_storage)); + } + + return AWS_OP_SUCCESS; +} + int aws_mqtt5_negotiated_settings_apply_client_id( struct aws_mqtt5_negotiated_settings *negotiated_settings, const struct aws_byte_cursor *client_id) {