167 lines
5.9 KiB
C
167 lines
5.9 KiB
C
/*
|
|
* Copyright (c) 2018 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/** @file mqtt_transport.h
|
|
*
|
|
* @brief Internal functions to handle transport in MQTT module.
|
|
*/
|
|
|
|
#ifndef MQTT_TRANSPORT_H_
|
|
#define MQTT_TRANSPORT_H_
|
|
|
|
#include <zephyr/net/mqtt.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**@brief Transport for handling transport connect procedure. */
|
|
typedef int (*transport_connect_handler_t)(struct mqtt_client *client);
|
|
|
|
/**@brief Transport write handler. */
|
|
typedef int (*transport_write_handler_t)(struct mqtt_client *client,
|
|
const uint8_t *data, uint32_t datalen);
|
|
|
|
/**@brief Transport write message handler, similar to POSIX sendmsg function. */
|
|
typedef int (*transport_write_msg_handler_t)(struct mqtt_client *client,
|
|
const struct msghdr *message);
|
|
|
|
/**@brief Transport read handler. */
|
|
typedef int (*transport_read_handler_t)(struct mqtt_client *client, uint8_t *data,
|
|
uint32_t buflen, bool shall_block);
|
|
|
|
/**@brief Transport disconnect handler. */
|
|
typedef int (*transport_disconnect_handler_t)(struct mqtt_client *client);
|
|
|
|
/**@brief Transport procedure handlers. */
|
|
struct transport_procedure {
|
|
/** Transport connect handler. Handles TCP connection callback based on
|
|
* type of transport.
|
|
*/
|
|
transport_connect_handler_t connect;
|
|
|
|
/** Transport write handler. Handles transport write based on type of
|
|
* transport.
|
|
*/
|
|
transport_write_handler_t write;
|
|
|
|
/** Transport write message handler. Handles transport write based
|
|
* on type of transport.
|
|
*/
|
|
transport_write_msg_handler_t write_msg;
|
|
|
|
/** Transport read handler. Handles transport read based on type of
|
|
* transport.
|
|
*/
|
|
transport_read_handler_t read;
|
|
|
|
/** Transport disconnect handler. Handles transport disconnection based
|
|
* on type of transport.
|
|
*/
|
|
transport_disconnect_handler_t disconnect;
|
|
};
|
|
|
|
/**@brief Handles TCP Connection Complete for configured transport.
|
|
*
|
|
* @param[in] client Identifies the client on which the procedure is requested.
|
|
*
|
|
* @retval 0 or an error code indicating reason for failure.
|
|
*/
|
|
int mqtt_transport_connect(struct mqtt_client *client);
|
|
|
|
/**@brief Handles write requests on configured transport.
|
|
*
|
|
* @param[in] client Identifies the client on which the procedure is requested.
|
|
* @param[in] data Data to be written on the transport.
|
|
* @param[in] datalen Length of data to be written on the transport.
|
|
*
|
|
* @retval 0 or an error code indicating reason for failure.
|
|
*/
|
|
int mqtt_transport_write(struct mqtt_client *client, const uint8_t *data,
|
|
uint32_t datalen);
|
|
|
|
/**@brief Handles write message requests on configured transport.
|
|
*
|
|
* @param[in] client Identifies the client on which the procedure is requested.
|
|
* @param[in] message Pointer to the `struct msghdr` structure, containing data
|
|
* to be written on the transport.
|
|
*
|
|
* @retval 0 or an error code indicating reason for failure.
|
|
*/
|
|
int mqtt_transport_write_msg(struct mqtt_client *client,
|
|
const struct msghdr *message);
|
|
|
|
/**@brief Handles read requests on configured transport.
|
|
*
|
|
* @param[in] client Identifies the client on which the procedure is requested.
|
|
* @param[in] data Pointer where read data is to be fetched.
|
|
* @param[in] buflen Size of memory provided for the operation.
|
|
* @param[in] shall_block Information whether the call should block or not.
|
|
*
|
|
* @retval Number of bytes read or an error code indicating reason for failure.
|
|
* 0 if connection was closed.
|
|
*/
|
|
int mqtt_transport_read(struct mqtt_client *client, uint8_t *data, uint32_t buflen,
|
|
bool shall_block);
|
|
|
|
/**@brief Handles transport disconnection requests on configured transport.
|
|
*
|
|
* @param[in] client Identifies the client on which the procedure is requested.
|
|
*
|
|
* @retval 0 or an error code indicating reason for failure.
|
|
*/
|
|
int mqtt_transport_disconnect(struct mqtt_client *client);
|
|
|
|
/* Transport handler functions for TCP socket transport. */
|
|
int mqtt_client_tcp_connect(struct mqtt_client *client);
|
|
int mqtt_client_tcp_write(struct mqtt_client *client, const uint8_t *data,
|
|
uint32_t datalen);
|
|
int mqtt_client_tcp_write_msg(struct mqtt_client *client,
|
|
const struct msghdr *message);
|
|
int mqtt_client_tcp_read(struct mqtt_client *client, uint8_t *data,
|
|
uint32_t buflen, bool shall_block);
|
|
int mqtt_client_tcp_disconnect(struct mqtt_client *client);
|
|
|
|
#if defined(CONFIG_MQTT_LIB_TLS)
|
|
/* Transport handler functions for TLS socket transport. */
|
|
int mqtt_client_tls_connect(struct mqtt_client *client);
|
|
int mqtt_client_tls_write(struct mqtt_client *client, const uint8_t *data,
|
|
uint32_t datalen);
|
|
int mqtt_client_tls_write_msg(struct mqtt_client *client,
|
|
const struct msghdr *message);
|
|
int mqtt_client_tls_read(struct mqtt_client *client, uint8_t *data,
|
|
uint32_t buflen, bool shall_block);
|
|
int mqtt_client_tls_disconnect(struct mqtt_client *client);
|
|
#endif /* CONFIG_MQTT_LIB_TLS */
|
|
|
|
#if defined(CONFIG_MQTT_LIB_WEBSOCKET)
|
|
int mqtt_client_websocket_connect(struct mqtt_client *client);
|
|
int mqtt_client_websocket_write(struct mqtt_client *client, const uint8_t *data,
|
|
uint32_t datalen);
|
|
int mqtt_client_websocket_write_msg(struct mqtt_client *client,
|
|
const struct msghdr *message);
|
|
int mqtt_client_websocket_read(struct mqtt_client *client, uint8_t *data,
|
|
uint32_t buflen, bool shall_block);
|
|
int mqtt_client_websocket_disconnect(struct mqtt_client *client);
|
|
#endif
|
|
|
|
#if defined(CONFIG_MQTT_LIB_CUSTOM_TRANSPORT)
|
|
int mqtt_client_custom_transport_connect(struct mqtt_client *client);
|
|
int mqtt_client_custom_transport_write(struct mqtt_client *client, const uint8_t *data,
|
|
uint32_t datalen);
|
|
int mqtt_client_custom_transport_write_msg(struct mqtt_client *client,
|
|
const struct msghdr *message);
|
|
int mqtt_client_custom_transport_read(struct mqtt_client *client, uint8_t *data,
|
|
uint32_t buflen, bool shall_block);
|
|
int mqtt_client_custom_transport_disconnect(struct mqtt_client *client);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* MQTT_TRANSPORT_H_ */
|