interfaces/inc/c_pal/socket_transport.h (75 lines of code) (raw):

// Copyright (C) Microsoft Corporation. All rights reserved. #ifndef SOCKET_TRANSPORT_H #define SOCKET_TRANSPORT_H #ifdef __cplusplus #include <cstdint> extern "C" { #else #include <stdbool.h> #include <stdint.h> #endif #include "macro_utils/macro_utils.h" #include "socket_handle.h" #define MAX_GET_HOST_NAME_LEN 256 #define MAX_LOCAL_ADDRESS_LEN 22 typedef struct SOCKET_TRANSPORT_TAG* SOCKET_TRANSPORT_HANDLE; #define SOCKET_SEND_RESULT_VALUES \ SOCKET_SEND_INVALID_ARG, \ SOCKET_SEND_OK, \ SOCKET_SEND_ERROR, \ SOCKET_SEND_FAILED, \ SOCKET_SEND_SHUTDOWN MU_DEFINE_ENUM(SOCKET_SEND_RESULT, SOCKET_SEND_RESULT_VALUES) #define SOCKET_RECEIVE_RESULT_VALUES \ SOCKET_RECEIVE_INVALID_ARG, \ SOCKET_RECEIVE_OK, \ SOCKET_RECEIVE_WOULD_BLOCK, \ SOCKET_RECEIVE_ERROR, \ SOCKET_RECEIVE_SHUTDOWN MU_DEFINE_ENUM(SOCKET_RECEIVE_RESULT, SOCKET_RECEIVE_RESULT_VALUES) #define SOCKET_ACCEPT_RESULT_VALUES \ SOCKET_ACCEPT_OK, \ SOCKET_ACCEPT_ERROR, \ SOCKET_ACCEPT_PORT_EXHAUSTION, \ SOCKET_ACCEPT_INPROGRESS, \ SOCKET_ACCEPT_NO_CONNECTION MU_DEFINE_ENUM(SOCKET_ACCEPT_RESULT, SOCKET_ACCEPT_RESULT_VALUES) #define SOCKET_TYPE_VALUES \ SOCKET_BINDING, \ SOCKET_CLIENT MU_DEFINE_ENUM(SOCKET_TYPE, SOCKET_TYPE_VALUES) #define ADDRESS_TYPE_VALUES \ ADDRESS_INET, \ ADDRESS_INET_6, \ ADDRESS_NETBIOS MU_DEFINE_ENUM(ADDRESS_TYPE, ADDRESS_TYPE_VALUES) typedef struct SOCKET_BUFFER_TAG { uint32_t length; unsigned char* buffer; } SOCKET_BUFFER; #include "umock_c/umock_c_prod.h" #ifdef __cplusplus extern "C" { #endif typedef struct LOCAL_ADDRESS_TAG { ADDRESS_TYPE address_type; char address[MAX_LOCAL_ADDRESS_LEN]; } LOCAL_ADDRESS; MOCKABLE_FUNCTION(, SOCKET_TRANSPORT_HANDLE, socket_transport_create_client); MOCKABLE_FUNCTION(, SOCKET_TRANSPORT_HANDLE, socket_transport_create_server); MOCKABLE_FUNCTION(, SOCKET_TRANSPORT_HANDLE, socket_transport_create_from_socket, SOCKET_HANDLE, socket_handle); MOCKABLE_FUNCTION(, void, socket_transport_destroy, SOCKET_TRANSPORT_HANDLE, socket_transport); MOCKABLE_FUNCTION(, int, socket_transport_connect, SOCKET_TRANSPORT_HANDLE, socket_transport, const char*, hostname, uint16_t, port, uint32_t, connection_timeout_ms); MOCKABLE_FUNCTION(, int, socket_transport_listen, SOCKET_TRANSPORT_HANDLE, socket_transport, uint16_t, port); MOCKABLE_FUNCTION(, void, socket_transport_disconnect, SOCKET_TRANSPORT_HANDLE, socket_transport); MOCKABLE_FUNCTION(, SOCKET_ACCEPT_RESULT, socket_transport_accept, SOCKET_TRANSPORT_HANDLE, socket_transport, SOCKET_TRANSPORT_HANDLE*, accepted_socket, uint32_t, connection_timeout_ms); MOCKABLE_FUNCTION(, SOCKET_SEND_RESULT, socket_transport_send, SOCKET_TRANSPORT_HANDLE, socket_transport, const SOCKET_BUFFER*, payload, uint32_t, buffer_count, uint32_t*, bytes_sent, uint32_t, flags, void*, data); MOCKABLE_FUNCTION(, SOCKET_RECEIVE_RESULT, socket_transport_receive, SOCKET_TRANSPORT_HANDLE, socket_transport, SOCKET_BUFFER*, payload, uint32_t, buffer_count, uint32_t*, bytes_recv, uint32_t, flags, void*, data); MOCKABLE_FUNCTION(, SOCKET_HANDLE, socket_transport_get_underlying_socket, SOCKET_TRANSPORT_HANDLE, socket_transport); MOCKABLE_FUNCTION(, bool, socket_transport_is_valid_socket, SOCKET_TRANSPORT_HANDLE, socket_transport_handle); MOCKABLE_FUNCTION(, int, socket_transport_get_local_address, SOCKET_TRANSPORT_HANDLE, socket_transport, char, hostname[MAX_GET_HOST_NAME_LEN], LOCAL_ADDRESS**, local_address_list, uint32_t*, address_count); #ifdef __cplusplus } #endif #endif // SOCKET_TRANSPORT_H