Skip to content

Commit 46860a4

Browse files
committed
Merge branch 'metrics_mqtt5' of github.com:awslabs/aws-c-mqtt into metrics_adapter
2 parents 98f0c93 + 38e5e06 commit 46860a4

13 files changed

Lines changed: 168 additions & 113 deletions

include/aws/mqtt/private/mqtt_iot_sdk_metrics.h

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@
66
#ifndef AWS_MQTT_IOT_SDK_METRICS_H
77
#define AWS_MQTT_IOT_SDK_METRICS_H
88

9-
/* IoT SDK Metrics */
9+
/* Storage for `aws_mqtt_iot_sdk_metrics`. */
1010
struct aws_mqtt_iot_sdk_metrics_storage {
1111
struct aws_allocator *allocator;
1212

13-
struct aws_mqtt_iot_sdk_metrics storage_view;
14-
1513
struct aws_array_list metadata_entries;
1614

1715
struct aws_byte_cursor library_name;
@@ -23,15 +21,13 @@ AWS_MQTT_API struct aws_mqtt_iot_sdk_metrics_storage *aws_mqtt_iot_sdk_metrics_s
2321
struct aws_allocator *allocator,
2422
const struct aws_mqtt_iot_sdk_metrics *metrics_options);
2523

26-
AWS_MQTT_API size_t aws_mqtt_iot_sdk_metrics_compute_storage_size(const struct aws_mqtt_iot_sdk_metrics *metrics);
27-
2824
AWS_MQTT_API void aws_mqtt_iot_sdk_metrics_storage_destroy(struct aws_mqtt_iot_sdk_metrics_storage *metrics_storage);
2925

3026
/**
3127
* Appends SDK metrics to the username
3228
*
3329
* @param original_username The original username
34-
* @param metrics The metrics configuration
30+
* @param metrics_storage The metrics configuration
3531
* @param output_username Buffer to store the modified username. If the function succeed, caller is responsible to
3632
* release the memory for output_username.
3733
* @param out_full_username_size If not NULL, will be set to the full size of the username with metrics appended
@@ -42,17 +38,17 @@ AWS_MQTT_API
4238
int aws_mqtt_append_sdk_metrics_to_username(
4339
struct aws_allocator *allocator,
4440
const struct aws_byte_cursor *original_username,
45-
const struct aws_mqtt_iot_sdk_metrics *metrics,
41+
const struct aws_mqtt_iot_sdk_metrics_storage *metrics_storage,
4642
struct aws_byte_buf *output_username,
4743
size_t *out_full_username_size);
4844

4945
/**
50-
* Validates that all string fields in aws_mqtt_iot_sdk_metrics are valid UTF-8
46+
* Validates that all string fields in aws_mqtt_iot_sdk_metrics
5147
*
5248
* @param metrics The metrics structure to validate
53-
* @return AWS_OP_SUCCESS if all strings are valid UTF-8, AWS_OP_ERR otherwise
49+
* @return AWS_OP_SUCCESS if all strings are valid, AWS_OP_ERR otherwise
5450
*/
5551
AWS_MQTT_API
56-
int aws_mqtt_validate_iot_sdk_metrics_utf8(const struct aws_mqtt_iot_sdk_metrics *metrics);
52+
int aws_mqtt_validate_iot_sdk_metrics(const struct aws_mqtt_iot_sdk_metrics *metrics);
5753

5854
#endif /* AWS_MQTT_IOT_SDK_METRICS_H */

include/aws/mqtt/private/v5/mqtt5_options_storage.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ struct aws_mqtt5_operation_pingreq {
138138

139139
struct aws_mqtt5_client_options_storage {
140140
struct aws_allocator *allocator;
141-
struct aws_mqtt5_client_options options;
142141

143142
struct aws_string *host_name;
144143
uint32_t port;
@@ -220,7 +219,7 @@ AWS_MQTT_API uint32_t aws_mqtt5_operation_get_ack_timeout_override(const struct
220219
AWS_MQTT_API struct aws_mqtt5_operation_connect *aws_mqtt5_operation_connect_new(
221220
struct aws_allocator *allocator,
222221
const struct aws_mqtt5_packet_connect_view *connect_options,
223-
const struct aws_mqtt5_client_options *client_config);
222+
const struct aws_mqtt5_client_options_storage *option_storage);
224223

225224
AWS_MQTT_API int aws_mqtt5_packet_connect_view_validate(const struct aws_mqtt5_packet_connect_view *connect_view);
226225

include/aws/mqtt/v5/mqtt5_packet_storage.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
AWS_PUSH_SANE_WARNING_LEVEL
1414

15-
struct aws_mqtt5_client_options;
15+
struct aws_mqtt5_client_options_storage;
1616

1717
struct aws_mqtt5_user_property_set {
1818
struct aws_array_list properties;
@@ -212,7 +212,7 @@ AWS_MQTT_API int aws_mqtt5_packet_connect_storage_init(
212212
struct aws_mqtt5_packet_connect_storage *connect_storage,
213213
struct aws_allocator *allocator,
214214
const struct aws_mqtt5_packet_connect_view *connect_options,
215-
const struct aws_mqtt5_client_options *client_options);
215+
const struct aws_mqtt5_client_options_storage *options_storage);
216216

217217
AWS_MQTT_API int aws_mqtt5_packet_connect_storage_init_from_external_storage(
218218
struct aws_mqtt5_packet_connect_storage *connect_storage,

source/client.c

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ static void s_mqtt_client_init(
637637
if (aws_mqtt_append_sdk_metrics_to_username(
638638
connection->allocator,
639639
&username_cur,
640-
connection->metrics_storage ? &connection->metrics_storage->storage_view : NULL,
640+
connection->metrics_storage ? connection->metrics_storage : NULL,
641641
&username_with_metrics_buf,
642642
NULL) == AWS_OP_SUCCESS) {
643643
username_cur = aws_byte_cursor_from_buf(&username_with_metrics_buf);
@@ -646,22 +646,24 @@ static void s_mqtt_client_init(
646646
AWS_LS_MQTT_CLIENT, "id=%p: Failed to apply metrics to username, using original", (void *)connection);
647647
}
648648

649-
AWS_LOGF_DEBUG(
650-
AWS_LS_MQTT_CLIENT,
651-
"id=%p: Adding username " PRInSTR " to connection",
652-
(void *)connection,
653-
AWS_BYTE_CURSOR_PRI(username_cur));
649+
if (aws_byte_cursor_is_valid(&username_cur)) {
650+
AWS_LOGF_DEBUG(
651+
AWS_LS_MQTT_CLIENT,
652+
"id=%p: Adding username " PRInSTR " to connection",
653+
(void *)connection,
654+
AWS_BYTE_CURSOR_PRI(username_cur));
654655

655-
struct aws_byte_cursor password_cur = {
656-
.ptr = NULL,
657-
.len = 0,
658-
};
656+
struct aws_byte_cursor password_cur = {
657+
.ptr = NULL,
658+
.len = 0,
659+
};
659660

660-
if (connection->password) {
661-
password_cur = aws_byte_cursor_from_string(connection->password);
662-
}
661+
if (connection->password) {
662+
password_cur = aws_byte_cursor_from_string(connection->password);
663+
}
663664

664-
aws_mqtt_packet_connect_add_credentials(&connect, username_cur, password_cur);
665+
aws_mqtt_packet_connect_add_credentials(&connect, username_cur, password_cur);
666+
}
665667
}
666668

667669
message = mqtt_get_message_for_packet(connection, &connect.fixed_header);
@@ -3384,7 +3386,7 @@ static int s_aws_mqtt_client_connection_311_set_metrics(void *impl, const struct
33843386
return aws_raise_error(AWS_ERROR_INVALID_STATE);
33853387
}
33863388

3387-
if (metrics != NULL && aws_mqtt_validate_iot_sdk_metrics_utf8(metrics) == AWS_OP_ERR) {
3389+
if (metrics != NULL && aws_mqtt_validate_iot_sdk_metrics(metrics) == AWS_OP_ERR) {
33883390
AWS_LOGF_ERROR(
33893391
AWS_LS_MQTT_CLIENT, "id=%p: Invalid utf8 or forbidden codepoints in metrics.", (void *)connection);
33903392
return aws_raise_error(AWS_ERROR_INVALID_UTF8);

source/mqtt_iot_sdk_metrics.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ int s_build_username_query(
7878
int aws_mqtt_append_sdk_metrics_to_username(
7979
struct aws_allocator *allocator,
8080
const struct aws_byte_cursor *original_username,
81-
const struct aws_mqtt_iot_sdk_metrics *metrics,
81+
const struct aws_mqtt_iot_sdk_metrics_storage *metrics_storage,
8282
struct aws_byte_buf *output_username,
8383
size_t *out_full_username_size) {
8484

@@ -88,7 +88,7 @@ int aws_mqtt_append_sdk_metrics_to_username(
8888
const struct aws_byte_cursor local_original_username =
8989
original_username == NULL ? aws_byte_cursor_from_c_str("") : *original_username;
9090

91-
if (!metrics) {
91+
if (!metrics_storage) {
9292
if (out_full_username_size) {
9393
*out_full_username_size = local_original_username.len;
9494
}
@@ -100,10 +100,6 @@ int aws_mqtt_append_sdk_metrics_to_username(
100100
return AWS_OP_SUCCESS;
101101
}
102102

103-
if (aws_mqtt_validate_iot_sdk_metrics_utf8(metrics)) {
104-
return AWS_OP_ERR;
105-
}
106-
107103
int result = AWS_OP_ERR;
108104
// The length of the base username part not including query parameters
109105
size_t base_username_length = 0;
@@ -153,8 +149,8 @@ int aws_mqtt_append_sdk_metrics_to_username(
153149
if (!found_sdk) {
154150
struct aws_uri_param sdk_params = {
155151
.key = sdk_str,
156-
.value =
157-
metrics->library_name.len > 0 ? metrics->library_name : aws_byte_cursor_from_c_str("IoTDeviceSDK/C"),
152+
.value = metrics_storage->library_name.len > 0 ? metrics_storage->library_name
153+
: aws_byte_cursor_from_c_str("IoTDeviceSDK/C"),
158154
};
159155
aws_array_list_push_back(&params_list, &sdk_params);
160156
}
@@ -240,14 +236,11 @@ struct aws_mqtt_iot_sdk_metrics_storage *aws_mqtt_iot_sdk_metrics_storage_new(
240236

241237
metrics_storage->allocator = allocator;
242238

243-
struct aws_mqtt_iot_sdk_metrics *storage_view = &metrics_storage->storage_view;
244-
245239
if (metrics_options->library_name.len > 0) {
246240
metrics_storage->library_name = metrics_options->library_name;
247241
if (aws_byte_buf_append_and_update(&metrics_storage->storage, &metrics_storage->library_name)) {
248242
goto cleanup_storage;
249243
}
250-
storage_view->library_name = metrics_storage->library_name;
251244
}
252245

253246
return metrics_storage;
@@ -280,7 +273,7 @@ void aws_mqtt_iot_sdk_metrics_storage_destroy(struct aws_mqtt_iot_sdk_metrics_st
280273
aws_mem_release(metrics_storage->allocator, metrics_storage);
281274
}
282275

283-
int aws_mqtt_validate_iot_sdk_metrics_utf8(const struct aws_mqtt_iot_sdk_metrics *metrics) {
276+
int aws_mqtt_validate_iot_sdk_metrics(const struct aws_mqtt_iot_sdk_metrics *metrics) {
284277
if (metrics == NULL) {
285278
return AWS_OP_SUCCESS;
286279
}

source/v5/mqtt5_client.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1175,7 +1175,7 @@ static void s_change_current_state_to_mqtt_connect(struct aws_mqtt5_client *clie
11751175
connect_view.client_id = aws_byte_cursor_from_buf(&client->negotiated_settings.client_id_storage);
11761176

11771177
struct aws_mqtt5_operation_connect *connect_op =
1178-
aws_mqtt5_operation_connect_new(client->allocator, &connect_view, &client->config->options);
1178+
aws_mqtt5_operation_connect_new(client->allocator, &connect_view, client->config);
11791179
if (connect_op == NULL) {
11801180
int error_code = aws_last_error();
11811181
AWS_LOGF_ERROR(

0 commit comments

Comments
 (0)