1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/mqtt/client.h>
#include <aws/mqtt/private/client_impl_shared.h>
struct aws_mqtt_client_connection *aws_mqtt_client_connection_acquire(struct aws_mqtt_client_connection *connection) {
if (connection != NULL) {
return (*connection->vtable->acquire_fn)(connection->impl);
}
return NULL;
}
void aws_mqtt_client_connection_release(struct aws_mqtt_client_connection *connection) {
if (connection != NULL) {
(*connection->vtable->release_fn)(connection->impl);
}
}
int aws_mqtt_client_connection_set_will(
struct aws_mqtt_client_connection *connection,
const struct aws_byte_cursor *topic,
enum aws_mqtt_qos qos,
bool retain,
const struct aws_byte_cursor *payload) {
return (*connection->vtable->set_will_fn)(connection->impl, topic, qos, retain, payload);
}
int aws_mqtt_client_connection_set_login(
struct aws_mqtt_client_connection *connection,
const struct aws_byte_cursor *username,
const struct aws_byte_cursor *password) {
return (*connection->vtable->set_login_fn)(connection->impl, username, password);
}
int aws_mqtt_client_connection_use_websockets(
struct aws_mqtt_client_connection *connection,
aws_mqtt_transform_websocket_handshake_fn *transformer,
void *transformer_ud,
aws_mqtt_validate_websocket_handshake_fn *validator,
void *validator_ud) {
return (*connection->vtable->use_websockets_fn)(
connection->impl, transformer, transformer_ud, validator, validator_ud);
}
int aws_mqtt_client_connection_set_http_proxy_options(
struct aws_mqtt_client_connection *connection,
struct aws_http_proxy_options *proxy_options) {
return (*connection->vtable->set_http_proxy_options_fn)(connection->impl, proxy_options);
}
int aws_mqtt_client_connection_set_host_resolution_options(
struct aws_mqtt_client_connection *connection,
const struct aws_host_resolution_config *host_resolution_config) {
return (*connection->vtable->set_host_resolution_options_fn)(connection->impl, host_resolution_config);
}
int aws_mqtt_client_connection_set_reconnect_timeout(
struct aws_mqtt_client_connection *connection,
uint64_t min_timeout,
uint64_t max_timeout) {
return (*connection->vtable->set_reconnect_timeout_fn)(connection->impl, min_timeout, max_timeout);
}
int aws_mqtt_client_connection_set_connection_result_handlers(
struct aws_mqtt_client_connection *connection,
aws_mqtt_client_on_connection_success_fn *on_connection_success,
void *on_connection_success_ud,
aws_mqtt_client_on_connection_failure_fn *on_connection_failure,
void *on_connection_failure_ud) {
return (*connection->vtable->set_connection_result_handlers)(
connection->impl,
on_connection_success,
on_connection_success_ud,
on_connection_failure,
on_connection_failure_ud);
}
int aws_mqtt_client_connection_set_connection_interruption_handlers(
struct aws_mqtt_client_connection *connection,
aws_mqtt_client_on_connection_interrupted_fn *on_interrupted,
void *on_interrupted_ud,
aws_mqtt_client_on_connection_resumed_fn *on_resumed,
void *on_resumed_ud) {
return (*connection->vtable->set_connection_interruption_handlers_fn)(
connection->impl, on_interrupted, on_interrupted_ud, on_resumed, on_resumed_ud);
}
int aws_mqtt_client_connection_set_connection_closed_handler(
struct aws_mqtt_client_connection *connection,
aws_mqtt_client_on_connection_closed_fn *on_closed,
void *on_closed_ud) {
return (*connection->vtable->set_connection_closed_handler_fn)(connection->impl, on_closed, on_closed_ud);
}
int aws_mqtt_client_connection_set_on_any_publish_handler(
struct aws_mqtt_client_connection *connection,
aws_mqtt_client_publish_received_fn *on_any_publish,
void *on_any_publish_ud) {
return (*connection->vtable->set_on_any_publish_handler_fn)(connection->impl, on_any_publish, on_any_publish_ud);
}
int aws_mqtt_client_connection_set_connection_termination_handler(
struct aws_mqtt_client_connection *connection,
aws_mqtt_client_on_connection_termination_fn *on_termination,
void *on_termination_ud) {
return (*connection->vtable->set_connection_termination_handler_fn)(
connection->impl, on_termination, on_termination_ud);
}
int aws_mqtt_client_connection_connect(
struct aws_mqtt_client_connection *connection,
const struct aws_mqtt_connection_options *connection_options) {
return (*connection->vtable->connect_fn)(connection->impl, connection_options);
}
int aws_mqtt_client_connection_reconnect(
struct aws_mqtt_client_connection *connection,
aws_mqtt_client_on_connection_complete_fn *on_connection_complete,
void *userdata) {
return (*connection->vtable->reconnect_fn)(connection->impl, on_connection_complete, userdata);
}
int aws_mqtt_client_connection_disconnect(
struct aws_mqtt_client_connection *connection,
aws_mqtt_client_on_disconnect_fn *on_disconnect,
void *userdata) {
return (*connection->vtable->disconnect_fn)(connection->impl, on_disconnect, userdata);
}
uint16_t aws_mqtt_client_connection_subscribe_multiple(
struct aws_mqtt_client_connection *connection,
const struct aws_array_list *topic_filters,
aws_mqtt_suback_multi_fn *on_suback,
void *on_suback_ud) {
return (*connection->vtable->subscribe_multiple_fn)(connection->impl, topic_filters, on_suback, on_suback_ud);
}
uint16_t aws_mqtt_client_connection_subscribe(
struct aws_mqtt_client_connection *connection,
const struct aws_byte_cursor *topic_filter,
enum aws_mqtt_qos qos,
aws_mqtt_client_publish_received_fn *on_publish,
void *on_publish_ud,
aws_mqtt_userdata_cleanup_fn *on_ud_cleanup,
aws_mqtt_suback_fn *on_suback,
void *on_suback_ud) {
return (*connection->vtable->subscribe_fn)(
connection->impl, topic_filter, qos, on_publish, on_publish_ud, on_ud_cleanup, on_suback, on_suback_ud);
}
uint16_t aws_mqtt_resubscribe_existing_topics(
struct aws_mqtt_client_connection *connection,
aws_mqtt_suback_multi_fn *on_suback,
void *on_suback_ud) {
return (*connection->vtable->resubscribe_existing_topics_fn)(connection->impl, on_suback, on_suback_ud);
}
uint16_t aws_mqtt_client_connection_unsubscribe(
struct aws_mqtt_client_connection *connection,
const struct aws_byte_cursor *topic_filter,
aws_mqtt_op_complete_fn *on_unsuback,
void *on_unsuback_ud) {
return (*connection->vtable->unsubscribe_fn)(connection->impl, topic_filter, on_unsuback, on_unsuback_ud);
}
uint16_t aws_mqtt_client_connection_publish(
struct aws_mqtt_client_connection *connection,
const struct aws_byte_cursor *topic,
enum aws_mqtt_qos qos,
bool retain,
const struct aws_byte_cursor *payload,
aws_mqtt_op_complete_fn *on_complete,
void *userdata) {
return (*connection->vtable->publish_fn)(connection->impl, topic, qos, retain, payload, on_complete, userdata);
}
int aws_mqtt_client_connection_get_stats(
struct aws_mqtt_client_connection *connection,
struct aws_mqtt_connection_operation_statistics *stats) {
return (*connection->vtable->get_stats_fn)(connection->impl, stats);
}
uint64_t aws_mqtt_hash_uint16_t(const void *item) {
return *(uint16_t *)item;
}
bool aws_mqtt_compare_uint16_t_eq(const void *a, const void *b) {
return *(uint16_t *)a == *(uint16_t *)b;
}
bool aws_mqtt_byte_cursor_hash_equality(const void *a, const void *b) {
const struct aws_byte_cursor *a_cursor = a;
const struct aws_byte_cursor *b_cursor = b;
return aws_byte_cursor_eq(a_cursor, b_cursor);
}
|