interfaces/inc/c_pal/async_socket.h (67 lines of code) (raw):
// Copyright (C) Microsoft Corporation. All rights reserved.
#ifndef ASYNC_SOCKET_H
#define ASYNC_SOCKET_H
#ifdef __cplusplus
#include <cstdint>
#else
#include <stdint.h>
#endif
#include "macro_utils/macro_utils.h"
#include "c_pal/execution_engine.h"
#include "socket_handle.h"
/* Note : At some point this API should be extended with connect/listen in order to fully encapsulate the underlying SOCKET,
so that no other module cares how the underlying SOCKET is obtained and what its lifetime is. */
typedef struct ASYNC_SOCKET_TAG* ASYNC_SOCKET_HANDLE;
#define ASYNC_SOCKET_OPEN_RESULT_VALUES \
ASYNC_SOCKET_OPEN_OK, \
ASYNC_SOCKET_OPEN_ERROR
MU_DEFINE_ENUM(ASYNC_SOCKET_OPEN_RESULT, ASYNC_SOCKET_OPEN_RESULT_VALUES)
#define ASYNC_SOCKET_SEND_SYNC_RESULT_VALUES \
ASYNC_SOCKET_SEND_SYNC_OK, \
ASYNC_SOCKET_SEND_SYNC_ERROR, \
ASYNC_SOCKET_SEND_SYNC_NOT_OPEN
MU_DEFINE_ENUM(ASYNC_SOCKET_SEND_SYNC_RESULT, ASYNC_SOCKET_SEND_SYNC_RESULT_VALUES)
#define ASYNC_SOCKET_SEND_RESULT_VALUES \
ASYNC_SOCKET_SEND_OK, \
ASYNC_SOCKET_SEND_ERROR, \
ASYNC_SOCKET_SEND_ABANDONED
MU_DEFINE_ENUM(ASYNC_SOCKET_SEND_RESULT, ASYNC_SOCKET_SEND_RESULT_VALUES)
#define ASYNC_SOCKET_RECEIVE_RESULT_VALUES \
ASYNC_SOCKET_RECEIVE_OK, \
ASYNC_SOCKET_RECEIVE_ERROR, \
ASYNC_SOCKET_RECEIVE_ABANDONED
MU_DEFINE_ENUM(ASYNC_SOCKET_RECEIVE_RESULT, ASYNC_SOCKET_RECEIVE_RESULT_VALUES)
#define ASYNC_SOCKET_NOTIFY_IO_TYPE_VALUES \
ASYNC_SOCKET_NOTIFY_IO_TYPE_IN, \
ASYNC_SOCKET_NOTIFY_IO_TYPE_OUT
MU_DEFINE_ENUM(ASYNC_SOCKET_NOTIFY_IO_TYPE, ASYNC_SOCKET_NOTIFY_IO_TYPE_VALUES)
#define ASYNC_SOCKET_NOTIFY_IO_RESULT_VALUES \
ASYNC_SOCKET_NOTIFY_IO_RESULT_IN, \
ASYNC_SOCKET_NOTIFY_IO_RESULT_OUT, \
ASYNC_SOCKET_NOTIFY_IO_RESULT_ABANDONED, \
ASYNC_SOCKET_NOTIFY_IO_RESULT_ERROR
MU_DEFINE_ENUM(ASYNC_SOCKET_NOTIFY_IO_RESULT, ASYNC_SOCKET_NOTIFY_IO_RESULT_VALUES)
typedef void (*ON_ASYNC_SOCKET_OPEN_COMPLETE)(void* context, ASYNC_SOCKET_OPEN_RESULT open_result);
typedef void (*ON_ASYNC_SOCKET_SEND_COMPLETE)(void* context, ASYNC_SOCKET_SEND_RESULT send_result);
typedef void (*ON_ASYNC_SOCKET_RECEIVE_COMPLETE)(void* context, ASYNC_SOCKET_RECEIVE_RESULT receive_result, uint32_t bytes_received);
typedef void (*ON_ASYNC_SOCKET_NOTIFY_IO_COMPLETE)(void* context, ASYNC_SOCKET_NOTIFY_IO_RESULT notify_io_result);
typedef int (*ON_ASYNC_SOCKET_SEND)(void* context, ASYNC_SOCKET_HANDLE async_socket, const void* buf, size_t len);
typedef int (*ON_ASYNC_SOCKET_RECV)(void* context, ASYNC_SOCKET_HANDLE async_socket, void* buf, size_t len);
typedef struct ASYNC_SOCKET_BUFFER_TAG
{
void* buffer;
uint32_t length;
} ASYNC_SOCKET_BUFFER;
#include "umock_c/umock_c_prod.h"
#ifdef __cplusplus
extern "C" {
#endif
MOCKABLE_FUNCTION(, ASYNC_SOCKET_HANDLE, async_socket_create, EXECUTION_ENGINE_HANDLE, execution_engine);
MOCKABLE_FUNCTION(, ASYNC_SOCKET_HANDLE, async_socket_create_with_transport, EXECUTION_ENGINE_HANDLE, execution_engine, ON_ASYNC_SOCKET_SEND, on_send, void*, on_send_context, ON_ASYNC_SOCKET_RECV, on_recv, void*, on_recv_context);
MOCKABLE_FUNCTION(, void, async_socket_destroy, ASYNC_SOCKET_HANDLE, async_socket);
MOCKABLE_FUNCTION(, int, async_socket_open_async, ASYNC_SOCKET_HANDLE, async_socket, SOCKET_HANDLE, socket_handle, ON_ASYNC_SOCKET_OPEN_COMPLETE, on_open_complete, void*, on_open_complete_context);
MOCKABLE_FUNCTION(, void, async_socket_close, ASYNC_SOCKET_HANDLE, async_socket);
MOCKABLE_FUNCTION(, ASYNC_SOCKET_SEND_SYNC_RESULT, async_socket_send_async, ASYNC_SOCKET_HANDLE, async_socket, const ASYNC_SOCKET_BUFFER*, payload, uint32_t, buffer_count, ON_ASYNC_SOCKET_SEND_COMPLETE, on_send_complete, void*, on_send_complete_context);
MOCKABLE_FUNCTION(, int, async_socket_receive_async, ASYNC_SOCKET_HANDLE, async_socket, ASYNC_SOCKET_BUFFER*, payload, uint32_t, buffer_count, ON_ASYNC_SOCKET_RECEIVE_COMPLETE, on_receive_complete, void*, on_receive_complete_context);
MOCKABLE_FUNCTION(, int, async_socket_notify_io_async, ASYNC_SOCKET_HANDLE, async_socket, ASYNC_SOCKET_NOTIFY_IO_TYPE, io_type, ON_ASYNC_SOCKET_NOTIFY_IO_COMPLETE, on_notify_io_complete, void*, on_notify_io_complete_context);
#ifdef __cplusplus
}
#endif
#endif // ASYNC_SOCKET_H