Skip to content

Commit

Permalink
Post-lesson checkpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
Bret Ambrose committed Jul 11, 2023
1 parent 7503c0a commit 0f6268f
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/aws/mqtt/mqtt.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ enum aws_mqtt_error {
AWS_ERROR_MQTT5_INVALID_OUTBOUND_TOPIC_ALIAS,
AWS_ERROR_MQTT5_INVALID_UTF8_STRING,
AWS_ERROR_MQTT_CONNECTION_RESET_FOR_ADAPTER_CONNECT,
AWS_ERROR_MQTT_CONNECTION_RESUBSCRIBE_NO_TOPICS,

AWS_ERROR_END_MQTT_RANGE = AWS_ERROR_ENUM_END_RANGE(AWS_C_MQTT_PACKAGE_ID),
};
Expand Down
3 changes: 3 additions & 0 deletions source/mqtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,9 @@ bool aws_mqtt_is_valid_topic_filter(const struct aws_byte_cursor *topic_filter)
AWS_DEFINE_ERROR_INFO_MQTT(
AWS_ERROR_MQTT_CONNECTION_RESET_FOR_ADAPTER_CONNECT,
"Mqtt5 connection was reset by the Mqtt3 adapter in order to guarantee correct connection configuration"),
AWS_DEFINE_ERROR_INFO_MQTT(
AWS_ERROR_MQTT_CONNECTION_RESUBSCRIBE_NO_TOPICS,
"Resubscribe was called when there were no subscriptions"),
};
/* clang-format on */
#undef AWS_DEFINE_ERROR_INFO_MQTT
Expand Down
35 changes: 35 additions & 0 deletions source/v5/mqtt3_to_mqtt5_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -2289,6 +2289,41 @@ static uint16_t s_aws_mqtt_5_resubscribe_existing_topics(

aws_mqtt_subscription_set_get_subscriptions(connection->subscriptions, &full_subscriptions);

size_t subscription_count = aws_array_list_length(&full_subscriptions);

AWS_VARIABLE_LENGTH_ARRAY(struct aws_mqtt_topic_subscription, multi_sub_subscriptions, subscription_count);
AWS_VARIABLE_LENGTH_ARRAY(struct aws_mqtt_topic_subscription *, multi_sub_subscription_ptrs, subscription_count);

if (subscription_count == 0) {
aws_raise_error(AWS_ERROR_MQTT_CONNECTION_RESUBSCRIBE_NO_TOPICS);
goto done;
}

for (size_t i = 0; i < subscription_count; ++i) {
struct aws_mqtt_subscription_set_subscription_options *existing_subscription = NULL;
aws_array_list_get_at_ptr(&full_subscriptions, (void **)&existing_subscription, i);

multi_sub_subscriptions[i].topic = existing_subscription->topic_filter;
multi_sub_subscriptions[i].qos = (enum aws_mqtt_qos)existing_subscription->qos;
multi_sub_subscriptions[i].on_publish = existing_subscription->on_publish_received;
multi_sub_subscriptions[i].on_cleanup = existing_subscription->on_cleanup;
multi_sub_subscriptions[i].on_publish_ud = existing_subscription->callback_user_data;

multi_sub_subscription_ptrs[i] = &multi_sub_subscriptions[i];
}

struct aws_array_list multi_subscription_ptr_list;
AWS_ZERO_STRUCT(multi_subscription_ptr_list);

aws_array_list_init_static_from_initialized(
&multi_subscription_ptr_list,
multi_sub_subscription_ptrs,
subscription_count,
sizeof(struct aws_mqtt_topic_subscription *));

packet_id =
s_aws_mqtt_client_connection_5_subscribe_multiple(impl, &multi_subscription_ptr_list, on_suback, on_suback_ud);

done:

aws_array_list_clean_up(&full_subscriptions);
Expand Down

0 comments on commit 0f6268f

Please sign in to comment.