#ifndef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE …
#endif
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE …
#endif
#include "common.h"
#if defined(MBEDTLS_NET_C)
#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \
!defined(__APPLE__) && !defined(_WIN32) && !defined(__QNXNTO__) && \
!defined(__HAIKU__) && !defined(__midipix__)
#error "This module only works on Unix and Windows, see MBEDTLS_NET_C in mbedtls_config.h"
#endif
#include "mbedtls/platform.h"
#include "mbedtls/net_sockets.h"
#include "mbedtls/error.h"
#include <string.h>
#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \
!defined(EFI32)
#define IS_EINTR …
#include <ws2tcpip.h>
#include <winsock2.h>
#include <windows.h>
#if (_WIN32_WINNT < 0x0501)
#include <wspiapi.h>
#endif
#if defined(_MSC_VER)
#if defined(_WIN32_WCE)
#pragma comment( lib, "ws2.lib" )
#else
#pragma comment( lib, "ws2_32.lib" )
#endif
#endif
#define read …
#define write …
#define close …
static int wsa_init_done = 0;
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <netdb.h>
#include <errno.h>
#define IS_EINTR(ret) …
#define SOCKET …
#endif
#if defined(_MSC_VER)
#define MSVC_INT_CAST …
#else
#define MSVC_INT_CAST
#endif
#include <stdio.h>
#if defined(MBEDTLS_HAVE_TIME)
#include <time.h>
#endif
#include <stdint.h>
static int net_prepare(void)
{ … }
static int check_fd(int fd, int for_select)
{ … }
void mbedtls_net_init(mbedtls_net_context *ctx)
{ … }
int mbedtls_net_connect(mbedtls_net_context *ctx, const char *host,
const char *port, int proto)
{ … }
int mbedtls_net_bind(mbedtls_net_context *ctx, const char *bind_ip, const char *port, int proto)
{ … }
#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \
!defined(EFI32)
static int net_would_block(const mbedtls_net_context *ctx)
{
((void) ctx);
return WSAGetLastError() == WSAEWOULDBLOCK;
}
#else
static int net_would_block(const mbedtls_net_context *ctx)
{ … }
#endif
int mbedtls_net_accept(mbedtls_net_context *bind_ctx,
mbedtls_net_context *client_ctx,
void *client_ip, size_t buf_size, size_t *cip_len)
{ … }
int mbedtls_net_set_block(mbedtls_net_context *ctx)
{ … }
int mbedtls_net_set_nonblock(mbedtls_net_context *ctx)
{ … }
int mbedtls_net_poll(mbedtls_net_context *ctx, uint32_t rw, uint32_t timeout)
{ … }
void mbedtls_net_usleep(unsigned long usec)
{ … }
int mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len)
{ … }
int mbedtls_net_recv_timeout(void *ctx, unsigned char *buf,
size_t len, uint32_t timeout)
{ … }
int mbedtls_net_send(void *ctx, const unsigned char *buf, size_t len)
{ … }
void mbedtls_net_close(mbedtls_net_context *ctx)
{ … }
void mbedtls_net_free(mbedtls_net_context *ctx)
{ … }
#endif