Linux Audio

Check our new training course

Loading...
/*
 * 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 <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 u8_t *data, u32_t datalen);

/**@brief Transport read handler. */
typedef int (*transport_read_handler_t)(struct mqtt_client *client, u8_t *data,
					u32_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 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 u8_t *data,
			 u32_t datalen);

/**@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, u8_t *data, u32_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 u8_t *data,
			  u32_t datalen);
int mqtt_client_tcp_read(struct mqtt_client *client, u8_t *data,
			 u32_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 u8_t *data,
			  u32_t datalen);
int mqtt_client_tls_read(struct mqtt_client *client, u8_t *data,
			 u32_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 u8_t *data,
				u32_t datalen);
int mqtt_client_websocket_read(struct mqtt_client *client, u8_t *data,
			       u32_t buflen, bool shall_block);
int mqtt_client_websocket_disconnect(struct mqtt_client *client);
#endif

#ifdef __cplusplus
}
#endif

#endif /* MQTT_TRANSPORT_H_ */