libmqtt/platform/platform.h

138 lines
3.7 KiB
C

#ifndef platform_h__included
#define platform_h__included
#include "mqtt_internal.h"
/* Sadly we have to have a Windows-ism here */
#if MSVC
typedef unsigned long (__stdcall *PlatformTask)(void *context);
// Use this to define the PlatformTask callback functions to be cross platform
#define PlatformTaskFunc(_name) unsigned long __stdcall _name(void *context)
#else
typedef void *(*PlatformTask)(void *context);
// Use this to define the PlatformTask callback functions to be cross platform
#define PlatformTaskFunc(_name) void *_name(void *context)
#endif
typedef void (*PlatformTimerCallback)(MQTTHandle *handle, int timer_handle);
/** maximum receiver buffer size, defined by platform */
extern const size_t max_receive_buffer_size;
typedef enum {
PlatformStatusOk, /**< Everything ok */
PlatformStatusError, /**< Non-recoverable error */
PlatformStatusRetry /**< Recoverable error */
} PlatformStatusCode;
/**
* Initialize platform specific data
*
* @param handle: The handle to initialize
* @return Platform status code
*/
PlatformStatusCode platform_init(MQTTHandle *handle);
/**
* Platform specific function to release resources associated with a MQTTHandle
*
* @param handle: The handle to clean up
* @return Platform status code
*/
PlatformStatusCode platform_release(MQTTHandle *handle);
/**
* Platform specific function to start a reading thread
*
* @param handle: The broker connection handle
* @param task_handle: Task handle output
* @param callback: callback to run in the thread
* @return Platform status code
*/
PlatformStatusCode platform_run_task(MQTTHandle *handle, int *task_handle, PlatformTask callback);
/**
* Platform specific function to clean up the reading thread
*
* @param handle: State handle
* @param task_handle: Task handle to clean up
* @return Platform status code
*/
PlatformStatusCode platform_cleanup_task(MQTTHandle *handle, int task_handle);
/**
* Resolve host
*
* @param hostname: Hostname to resolve
* @param ip_out: resulting IP address if no error occured
* @return Platform status code
*/
PlatformStatusCode platform_resolve_host(char *hostname, char *ip_out);
/**
* Connect to host from configuration
*
* @param handle: The configuration
* @return Platform status code
*/
PlatformStatusCode platform_connect(MQTTHandle *handle);
/**
* Read from the "socket" in the handle
*
* @param handle: State handle
* @param buffer: Read target
* @return Platform status code
*/
PlatformStatusCode platform_read(MQTTHandle *handle, Buffer *buffer);
/**
* Write to the "socket" in the handle
*
* @param handle: State handle
* @param buffer: Write source
* @return Platform status code
*/
PlatformStatusCode platform_write(MQTTHandle *handle, Buffer *buffer);
/**
* Disconnect the "socket" in the handle
*
* @param handle: State handle
* @return Platform status code
*/
PlatformStatusCode platform_disconnect(MQTTHandle *handle);
/**
* Set a recurring timer
*
* @param handle: State handle
* @param interval: Number of seconds to call the callback in
* @param timer_handle: Timer handle out
* @param callback: Callback to call
* @return Platform status code
*/
PlatformStatusCode platform_create_timer(MQTTHandle *handle, int interval, int *timer_handle, PlatformTimerCallback callback);
/**
* Destroy a recurring timer
* @param handle
* @param timer_handle
* @return Platform status code
*/
PlatformStatusCode platform_destroy_timer(MQTTHandle *handle, int timer_handle);
/**
* Sleep for some milliseconds, may yield the task, so the sleep time could be longer
*
* @param milliseconds: minimum number of milliseconds to sleep
* @return Platform status code
*/
PlatformStatusCode platform_sleep(int milliseconds);
#endif /* platform_h__included */