From 64758251cdf7c8d9b7a3a637cae5c6f6a85b752b Mon Sep 17 00:00:00 2001 From: Bret Ambrose Date: Thu, 12 Sep 2024 09:31:43 -0700 Subject: [PATCH] Event loop accessor for request response client --- .../request-response/protocol_adapter.h | 8 ++++++++ .../request_response_client.h | 7 +++++++ source/request-response/protocol_adapter.c | 19 ++++++++++++++++++- .../request_response_client.c | 6 ++++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/include/aws/mqtt/private/request-response/protocol_adapter.h b/include/aws/mqtt/private/request-response/protocol_adapter.h index a4896c68..7d71e805 100644 --- a/include/aws/mqtt/private/request-response/protocol_adapter.h +++ b/include/aws/mqtt/private/request-response/protocol_adapter.h @@ -12,6 +12,7 @@ #include struct aws_allocator; +struct aws_event_loop; struct aws_mqtt_client_connection; struct aws_mqtt5_client; @@ -143,6 +144,8 @@ struct aws_mqtt_protocol_adapter_vtable { int (*aws_mqtt_protocol_adapter_publish_fn)(void *, struct aws_protocol_adapter_publish_options *); bool (*aws_mqtt_protocol_adapter_is_connected_fn)(void *); + + struct aws_event_loop *(*aws_mqtt_protocol_adapter_get_event_loop_fn)(void *); }; struct aws_mqtt_protocol_adapter { @@ -201,6 +204,11 @@ AWS_MQTT_API int aws_mqtt_protocol_adapter_publish( */ AWS_MQTT_API bool aws_mqtt_protocol_adapter_is_connected(struct aws_mqtt_protocol_adapter *adapter); +/* + * Returns the event loop that the protocol client is bound to. + */ +AWS_MQTT_API struct aws_event_loop *aws_mqtt_protocol_adapter_get_event_loop(struct aws_mqtt_protocol_adapter *adapter); + AWS_MQTT_API const char *aws_protocol_adapter_subscription_event_type_to_c_str( enum aws_protocol_adapter_subscription_event_type type); diff --git a/include/aws/mqtt/request-response/request_response_client.h b/include/aws/mqtt/request-response/request_response_client.h index 55c8ae6c..3edff934 100644 --- a/include/aws/mqtt/request-response/request_response_client.h +++ b/include/aws/mqtt/request-response/request_response_client.h @@ -8,6 +8,7 @@ #include +struct aws_event_loop; struct aws_mqtt_request_response_client; struct aws_mqtt_client_connection; struct aws_mqtt5_client; @@ -245,6 +246,12 @@ AWS_MQTT_API struct aws_mqtt_rr_client_operation *aws_mqtt_request_response_clie struct aws_mqtt_request_response_client *client, const struct aws_mqtt_streaming_operation_options *streaming_options); +/* + * Returns the event loop used by the request-response client's protocol client + */ +AWS_MQTT_API struct aws_event_loop *aws_mqtt_request_response_client_get_event_loop( + struct aws_mqtt_request_response_client *client); + /* * Initiates a streaming operation's subscription process. */ diff --git a/source/request-response/protocol_adapter.c b/source/request-response/protocol_adapter.c index 8aa244cb..76aea9c4 100644 --- a/source/request-response/protocol_adapter.c +++ b/source/request-response/protocol_adapter.c @@ -457,12 +457,19 @@ static void s_protocol_adapter_mqtt311_listener_termination_callback(void *user_ } } +static struct aws_event_loop *s_aws_mqtt_protocol_adapter_311_get_event_loop(void *impl) { + struct aws_mqtt_protocol_adapter_311_impl *adapter = impl; + + return adapter->loop; +} + static struct aws_mqtt_protocol_adapter_vtable s_protocol_adapter_mqtt311_vtable = { .aws_mqtt_protocol_adapter_destroy_fn = s_aws_mqtt_protocol_adapter_311_destroy, .aws_mqtt_protocol_adapter_subscribe_fn = s_aws_mqtt_protocol_adapter_311_subscribe, .aws_mqtt_protocol_adapter_unsubscribe_fn = s_aws_mqtt_protocol_adapter_311_unsubscribe, .aws_mqtt_protocol_adapter_publish_fn = s_aws_mqtt_protocol_adapter_311_publish, .aws_mqtt_protocol_adapter_is_connected_fn = s_aws_mqtt_protocol_adapter_311_is_connected, + .aws_mqtt_protocol_adapter_get_event_loop_fn = s_aws_mqtt_protocol_adapter_311_get_event_loop, }; struct aws_mqtt_protocol_adapter *aws_mqtt_protocol_adapter_new_from_311( @@ -848,13 +855,19 @@ static void s_protocol_adapter_mqtt5_listener_termination_callback(void *user_da } } +static struct aws_event_loop *s_aws_mqtt_protocol_adapter_5_get_event_loop(void *impl) { + struct aws_mqtt_protocol_adapter_5_impl *adapter = impl; + + return adapter->loop; +} + static struct aws_mqtt_protocol_adapter_vtable s_protocol_adapter_mqtt5_vtable = { .aws_mqtt_protocol_adapter_destroy_fn = s_aws_mqtt_protocol_adapter_5_destroy, .aws_mqtt_protocol_adapter_subscribe_fn = s_aws_mqtt_protocol_adapter_5_subscribe, .aws_mqtt_protocol_adapter_unsubscribe_fn = s_aws_mqtt_protocol_adapter_5_unsubscribe, .aws_mqtt_protocol_adapter_publish_fn = s_aws_mqtt_protocol_adapter_5_publish, .aws_mqtt_protocol_adapter_is_connected_fn = s_aws_mqtt_protocol_adapter_5_is_connected, -}; + .aws_mqtt_protocol_adapter_get_event_loop_fn = s_aws_mqtt_protocol_adapter_5_get_event_loop}; struct aws_mqtt_protocol_adapter *aws_mqtt_protocol_adapter_new_from_5( struct aws_allocator *allocator, @@ -921,6 +934,10 @@ bool aws_mqtt_protocol_adapter_is_connected(struct aws_mqtt_protocol_adapter *ad return (*adapter->vtable->aws_mqtt_protocol_adapter_is_connected_fn)(adapter->impl); } +struct aws_event_loop *aws_mqtt_protocol_adapter_get_event_loop(struct aws_mqtt_protocol_adapter *adapter) { + return (*adapter->vtable->aws_mqtt_protocol_adapter_get_event_loop_fn)(adapter->impl); +} + const char *aws_protocol_adapter_subscription_event_type_to_c_str( enum aws_protocol_adapter_subscription_event_type type) { switch (type) { diff --git a/source/request-response/request_response_client.c b/source/request-response/request_response_client.c index 95458af6..eeb4ffc8 100644 --- a/source/request-response/request_response_client.c +++ b/source/request-response/request_response_client.c @@ -2268,3 +2268,9 @@ struct aws_mqtt_rr_client_operation *aws_mqtt_rr_client_operation_release( return NULL; } + +struct aws_event_loop *aws_mqtt_request_response_client_get_event_loop( + struct aws_mqtt_request_response_client *client) { + + return aws_mqtt_protocol_adapter_get_event_loop(client->client_adapter); +}