90 lines
2.3 KiB
C
90 lines
2.3 KiB
C
/*
|
|
* 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);
|
|
}
|