| /* |
| * Copyright (c) 2018 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** @file mqtt_transport.c |
| * |
| * @brief Internal functions to handle transport in MQTT module. |
| */ |
| |
| #include "mqtt_transport.h" |
| |
| /**@brief Function pointer array for TCP/TLS transport handlers. */ |
| const struct transport_procedure transport_fn[MQTT_TRANSPORT_NUM] = { |
| { |
| mqtt_client_tcp_connect, |
| mqtt_client_tcp_write, |
| mqtt_client_tcp_write_msg, |
| mqtt_client_tcp_read, |
| mqtt_client_tcp_disconnect, |
| }, |
| #if defined(CONFIG_MQTT_LIB_TLS) |
| { |
| mqtt_client_tls_connect, |
| mqtt_client_tls_write, |
| mqtt_client_tls_write_msg, |
| mqtt_client_tls_read, |
| mqtt_client_tls_disconnect, |
| }, |
| #endif /* CONFIG_MQTT_LIB_TLS */ |
| #if defined(CONFIG_MQTT_LIB_WEBSOCKET) |
| { |
| mqtt_client_websocket_connect, |
| mqtt_client_websocket_write, |
| mqtt_client_websocket_write_msg, |
| mqtt_client_websocket_read, |
| mqtt_client_websocket_disconnect, |
| }, |
| #if defined(CONFIG_MQTT_LIB_TLS) |
| { |
| mqtt_client_websocket_connect, |
| mqtt_client_websocket_write, |
| mqtt_client_websocket_write_msg, |
| mqtt_client_websocket_read, |
| mqtt_client_websocket_disconnect, |
| }, |
| #endif /* CONFIG_MQTT_LIB_TLS */ |
| #endif /* CONFIG_MQTT_LIB_WEBSOCKET */ |
| #if defined(CONFIG_MQTT_LIB_CUSTOM_TRANSPORT) |
| { |
| mqtt_client_custom_transport_connect, |
| mqtt_client_custom_transport_write, |
| mqtt_client_custom_transport_write_msg, |
| mqtt_client_custom_transport_read, |
| mqtt_client_custom_transport_disconnect, |
| }, |
| #endif /* CONFIG_MQTT_LIB_CUSTOM_TRANSPORT */ |
| }; |
| |
| int mqtt_transport_connect(struct mqtt_client *client) |
| { |
| return transport_fn[client->transport.type].connect(client); |
| } |
| |
| int mqtt_transport_write(struct mqtt_client *client, const uint8_t *data, |
| uint32_t datalen) |
| { |
| return transport_fn[client->transport.type].write(client, data, |
| datalen); |
| } |
| |
| int mqtt_transport_write_msg(struct mqtt_client *client, |
| const struct msghdr *message) |
| { |
| return transport_fn[client->transport.type].write_msg(client, message); |
| } |
| |
| int mqtt_transport_read(struct mqtt_client *client, uint8_t *data, uint32_t buflen, |
| bool shall_block) |
| { |
| return transport_fn[client->transport.type].read(client, data, buflen, |
| shall_block); |
| } |
| |
| int mqtt_transport_disconnect(struct mqtt_client *client) |
| { |
| return transport_fn[client->transport.type].disconnect(client); |
| } |