wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

Committer:
wolfSSL
Date:
Fri Jun 05 00:11:07 2020 +0000
Revision:
17:a5f916481144
Parent:
16:8e0d178b1d1e
wolfSSL 4.4.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 14:167253f4e170 1 /* io.h
wolfSSL 14:167253f4e170 2 *
wolfSSL 16:8e0d178b1d1e 3 * Copyright (C) 2006-2020 wolfSSL Inc.
wolfSSL 14:167253f4e170 4 *
wolfSSL 14:167253f4e170 5 * This file is part of wolfSSL.
wolfSSL 14:167253f4e170 6 *
wolfSSL 14:167253f4e170 7 * wolfSSL is free software; you can redistribute it and/or modify
wolfSSL 14:167253f4e170 8 * it under the terms of the GNU General Public License as published by
wolfSSL 14:167253f4e170 9 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 14:167253f4e170 10 * (at your option) any later version.
wolfSSL 14:167253f4e170 11 *
wolfSSL 14:167253f4e170 12 * wolfSSL is distributed in the hope that it will be useful,
wolfSSL 14:167253f4e170 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 14:167253f4e170 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 14:167253f4e170 15 * GNU General Public License for more details.
wolfSSL 14:167253f4e170 16 *
wolfSSL 14:167253f4e170 17 * You should have received a copy of the GNU General Public License
wolfSSL 14:167253f4e170 18 * along with this program; if not, write to the Free Software
wolfSSL 14:167253f4e170 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
wolfSSL 14:167253f4e170 20 */
wolfSSL 14:167253f4e170 21
wolfSSL 14:167253f4e170 22 /*!
wolfSSL 16:8e0d178b1d1e 23 \file wolfssl/wolfio.h
wolfSSL 14:167253f4e170 24 */
wolfSSL 14:167253f4e170 25
wolfSSL 14:167253f4e170 26 #ifndef WOLFSSL_IO_H
wolfSSL 14:167253f4e170 27 #define WOLFSSL_IO_H
wolfSSL 14:167253f4e170 28
wolfSSL 14:167253f4e170 29 #ifdef __cplusplus
wolfSSL 14:167253f4e170 30 extern "C" {
wolfSSL 14:167253f4e170 31 #endif
wolfSSL 14:167253f4e170 32
wolfSSL 16:8e0d178b1d1e 33 /* Micrium uses NetSock I/O callbacks in wolfio.c */
wolfSSL 16:8e0d178b1d1e 34 #if !defined(WOLFSSL_USER_IO)
wolfSSL 16:8e0d178b1d1e 35 /* OCSP and CRL_IO require HTTP client */
wolfSSL 16:8e0d178b1d1e 36 #if defined(HAVE_OCSP) || defined(HAVE_CRL_IO)
wolfSSL 16:8e0d178b1d1e 37 #ifndef HAVE_HTTP_CLIENT
wolfSSL 16:8e0d178b1d1e 38 #define HAVE_HTTP_CLIENT
wolfSSL 16:8e0d178b1d1e 39 #endif
wolfSSL 14:167253f4e170 40 #endif
wolfSSL 14:167253f4e170 41 #endif
wolfSSL 14:167253f4e170 42
wolfSSL 14:167253f4e170 43 #if !defined(WOLFSSL_USER_IO)
wolfSSL 14:167253f4e170 44 /* Micrium uses NetSock I/O callbacks in wolfio.c */
wolfSSL 16:8e0d178b1d1e 45 #if !defined(USE_WOLFSSL_IO) && !defined(MICRIUM) && \
wolfSSL 16:8e0d178b1d1e 46 !defined(WOLFSSL_CONTIKI) && !defined(WOLFSSL_NO_SOCK)
wolfSSL 14:167253f4e170 47 #define USE_WOLFSSL_IO
wolfSSL 14:167253f4e170 48 #endif
wolfSSL 14:167253f4e170 49 #endif
wolfSSL 14:167253f4e170 50
wolfSSL 14:167253f4e170 51
wolfSSL 14:167253f4e170 52 #if defined(USE_WOLFSSL_IO) || defined(HAVE_HTTP_CLIENT)
wolfSSL 14:167253f4e170 53
wolfSSL 14:167253f4e170 54 #ifdef HAVE_LIBZ
wolfSSL 14:167253f4e170 55 #include "zlib.h"
wolfSSL 14:167253f4e170 56 #endif
wolfSSL 14:167253f4e170 57
wolfSSL 14:167253f4e170 58 #ifndef USE_WINDOWS_API
wolfSSL 16:8e0d178b1d1e 59 #if defined(WOLFSSL_LWIP) && !defined(WOLFSSL_APACHE_MYNEWT)
wolfSSL 14:167253f4e170 60 /* lwIP needs to be configured to use sockets API in this mode */
wolfSSL 14:167253f4e170 61 /* LWIP_SOCKET 1 in lwip/opt.h or in build */
wolfSSL 14:167253f4e170 62 #include "lwip/sockets.h"
wolfSSL 14:167253f4e170 63 #ifndef LWIP_PROVIDE_ERRNO
wolfSSL 14:167253f4e170 64 #include <errno.h>
wolfSSL 14:167253f4e170 65 #define LWIP_PROVIDE_ERRNO 1
wolfSSL 14:167253f4e170 66 #endif
wolfSSL 14:167253f4e170 67 #elif defined(FREESCALE_MQX)
wolfSSL 14:167253f4e170 68 #include <posix.h>
wolfSSL 14:167253f4e170 69 #include <rtcs.h>
wolfSSL 14:167253f4e170 70 #elif defined(FREESCALE_KSDK_MQX)
wolfSSL 14:167253f4e170 71 #include <rtcs.h>
wolfSSL 14:167253f4e170 72 #elif (defined(WOLFSSL_MDK_ARM) || defined(WOLFSSL_KEIL_TCP_NET))
wolfSSL 14:167253f4e170 73 #include "rl_net.h"
wolfSSL 14:167253f4e170 74 #include "errno.h"
wolfSSL 14:167253f4e170 75 #elif defined(WOLFSSL_CMSIS_RTOS)
wolfSSL 14:167253f4e170 76 #include "cmsis_os.h"
wolfSSL 16:8e0d178b1d1e 77 #elif defined(WOLFSSL_CMSIS_RTOSv2)
wolfSSL 16:8e0d178b1d1e 78 #include "cmsis_os2.h"
wolfSSL 14:167253f4e170 79 #elif defined(WOLFSSL_TIRTOS)
wolfSSL 14:167253f4e170 80 #include <sys/socket.h>
wolfSSL 14:167253f4e170 81 #elif defined(FREERTOS_TCP)
wolfSSL 14:167253f4e170 82 #include "FreeRTOS_Sockets.h"
wolfSSL 14:167253f4e170 83 #elif defined(WOLFSSL_IAR_ARM)
wolfSSL 14:167253f4e170 84 /* nothing */
wolfSSL 16:8e0d178b1d1e 85 #elif defined(HAVE_NETX_BSD)
wolfSSL 16:8e0d178b1d1e 86 #ifdef NETX_DUO
wolfSSL 16:8e0d178b1d1e 87 #include "nxd_bsd.h"
wolfSSL 16:8e0d178b1d1e 88 #else
wolfSSL 16:8e0d178b1d1e 89 #include "nx_bsd.h"
wolfSSL 16:8e0d178b1d1e 90 #endif
wolfSSL 14:167253f4e170 91 #elif defined(WOLFSSL_VXWORKS)
wolfSSL 14:167253f4e170 92 #include <sockLib.h>
wolfSSL 14:167253f4e170 93 #include <errno.h>
wolfSSL 14:167253f4e170 94 #elif defined(WOLFSSL_NUCLEUS_1_2)
wolfSSL 14:167253f4e170 95 #include <externs.h>
wolfSSL 14:167253f4e170 96 #include <errno.h>
wolfSSL 14:167253f4e170 97 #elif defined(WOLFSSL_ATMEL)
wolfSSL 14:167253f4e170 98 #include "socket/include/socket.h"
wolfSSL 14:167253f4e170 99 #elif defined(INTIME_RTOS)
wolfSSL 14:167253f4e170 100 #undef MIN
wolfSSL 14:167253f4e170 101 #undef MAX
wolfSSL 14:167253f4e170 102 #include <rt.h>
wolfSSL 14:167253f4e170 103 #include <sys/types.h>
wolfSSL 14:167253f4e170 104 #include <sys/socket.h>
wolfSSL 14:167253f4e170 105 #include <netdb.h>
wolfSSL 14:167253f4e170 106 #include <netinet/in.h>
wolfSSL 14:167253f4e170 107 #include <io.h>
wolfSSL 14:167253f4e170 108 /* <sys/socket.h> defines these, to avoid conflict, do undef */
wolfSSL 14:167253f4e170 109 #undef SOCKADDR
wolfSSL 14:167253f4e170 110 #undef SOCKADDR_IN
wolfSSL 14:167253f4e170 111 #elif defined(WOLFSSL_PRCONNECT_PRO)
wolfSSL 14:167253f4e170 112 #include <prconnect_pro/prconnect_pro.h>
wolfSSL 14:167253f4e170 113 #include <sys/types.h>
wolfSSL 14:167253f4e170 114 #include <errno.h>
wolfSSL 14:167253f4e170 115 #include <unistd.h>
wolfSSL 14:167253f4e170 116 #include <fcntl.h>
wolfSSL 14:167253f4e170 117 #include <netdb.h>
wolfSSL 14:167253f4e170 118 #include <sys/ioctl.h>
wolfSSL 14:167253f4e170 119 #elif defined(WOLFSSL_SGX)
wolfSSL 14:167253f4e170 120 #include <errno.h>
wolfSSL 16:8e0d178b1d1e 121 #elif defined(WOLFSSL_APACHE_MYNEWT) && !defined(WOLFSSL_LWIP)
wolfSSL 16:8e0d178b1d1e 122 #include <mn_socket/mn_socket.h>
wolfSSL 16:8e0d178b1d1e 123 #elif defined(WOLFSSL_DEOS)
wolfSSL 16:8e0d178b1d1e 124 #include <socketapi.h>
wolfSSL 16:8e0d178b1d1e 125 #include <lwip-socket.h>
wolfSSL 16:8e0d178b1d1e 126 #include <errno.h>
wolfSSL 16:8e0d178b1d1e 127 #elif defined(WOLFSSL_ZEPHYR)
wolfSSL 16:8e0d178b1d1e 128 #include <net/socket.h>
wolfSSL 16:8e0d178b1d1e 129 #elif defined(HAVE_NETX)
wolfSSL 16:8e0d178b1d1e 130 #include "nx_api.h"
wolfSSL 16:8e0d178b1d1e 131 #include "errno.h"
wolfSSL 14:167253f4e170 132 #elif !defined(WOLFSSL_NO_SOCK)
wolfSSL 14:167253f4e170 133 #include <sys/types.h>
wolfSSL 14:167253f4e170 134 #include <errno.h>
wolfSSL 14:167253f4e170 135 #ifndef EBSNET
wolfSSL 14:167253f4e170 136 #include <unistd.h>
wolfSSL 14:167253f4e170 137 #endif
wolfSSL 14:167253f4e170 138 #include <fcntl.h>
wolfSSL 16:8e0d178b1d1e 139 #define XFCNTL(fd, flag, block) fcntl((fd), (flag), (block))
wolfSSL 14:167253f4e170 140
wolfSSL 14:167253f4e170 141 #if defined(HAVE_RTP_SYS)
wolfSSL 14:167253f4e170 142 #include <socket.h>
wolfSSL 14:167253f4e170 143 #elif defined(EBSNET)
wolfSSL 14:167253f4e170 144 #include "rtipapi.h" /* errno */
wolfSSL 14:167253f4e170 145 #include "socket.h"
wolfSSL 16:8e0d178b1d1e 146 #elif !defined(DEVKITPRO) && !defined(WOLFSSL_PICOTCP) \
wolfSSL 16:8e0d178b1d1e 147 && !defined(WOLFSSL_CONTIKI) && !defined(WOLFSSL_WICED) \
wolfSSL 16:8e0d178b1d1e 148 && !defined(WOLFSSL_GNRC) && !defined(WOLFSSL_RIOT_OS)
wolfSSL 14:167253f4e170 149 #include <sys/socket.h>
wolfSSL 14:167253f4e170 150 #include <arpa/inet.h>
wolfSSL 14:167253f4e170 151 #include <netinet/in.h>
wolfSSL 14:167253f4e170 152 #include <netdb.h>
wolfSSL 14:167253f4e170 153 #ifdef __PPU
wolfSSL 14:167253f4e170 154 #include <netex/errno.h>
wolfSSL 14:167253f4e170 155 #else
wolfSSL 14:167253f4e170 156 #include <sys/ioctl.h>
wolfSSL 14:167253f4e170 157 #endif
wolfSSL 14:167253f4e170 158 #endif
wolfSSL 14:167253f4e170 159 #endif
wolfSSL 16:8e0d178b1d1e 160
wolfSSL 16:8e0d178b1d1e 161 #if defined(WOLFSSL_RENESAS_RA6M3G) /* Uses FREERTOS_TCP */
wolfSSL 16:8e0d178b1d1e 162 #include <errno.h>
wolfSSL 16:8e0d178b1d1e 163 #endif
wolfSSL 16:8e0d178b1d1e 164
wolfSSL 14:167253f4e170 165 #endif /* USE_WINDOWS_API */
wolfSSL 14:167253f4e170 166
wolfSSL 14:167253f4e170 167 #ifdef __sun
wolfSSL 14:167253f4e170 168 #include <sys/filio.h>
wolfSSL 14:167253f4e170 169 #endif
wolfSSL 14:167253f4e170 170
wolfSSL 14:167253f4e170 171 #ifdef USE_WINDOWS_API
wolfSSL 14:167253f4e170 172 /* no epipe yet */
wolfSSL 14:167253f4e170 173 #ifndef WSAEPIPE
wolfSSL 14:167253f4e170 174 #define WSAEPIPE -12345
wolfSSL 14:167253f4e170 175 #endif
wolfSSL 14:167253f4e170 176 #define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK
wolfSSL 14:167253f4e170 177 #define SOCKET_EAGAIN WSAETIMEDOUT
wolfSSL 14:167253f4e170 178 #define SOCKET_ECONNRESET WSAECONNRESET
wolfSSL 14:167253f4e170 179 #define SOCKET_EINTR WSAEINTR
wolfSSL 14:167253f4e170 180 #define SOCKET_EPIPE WSAEPIPE
wolfSSL 14:167253f4e170 181 #define SOCKET_ECONNREFUSED WSAENOTCONN
wolfSSL 14:167253f4e170 182 #define SOCKET_ECONNABORTED WSAECONNABORTED
wolfSSL 14:167253f4e170 183 #elif defined(__PPU)
wolfSSL 14:167253f4e170 184 #define SOCKET_EWOULDBLOCK SYS_NET_EWOULDBLOCK
wolfSSL 14:167253f4e170 185 #define SOCKET_EAGAIN SYS_NET_EAGAIN
wolfSSL 14:167253f4e170 186 #define SOCKET_ECONNRESET SYS_NET_ECONNRESET
wolfSSL 14:167253f4e170 187 #define SOCKET_EINTR SYS_NET_EINTR
wolfSSL 14:167253f4e170 188 #define SOCKET_EPIPE SYS_NET_EPIPE
wolfSSL 14:167253f4e170 189 #define SOCKET_ECONNREFUSED SYS_NET_ECONNREFUSED
wolfSSL 14:167253f4e170 190 #define SOCKET_ECONNABORTED SYS_NET_ECONNABORTED
wolfSSL 14:167253f4e170 191 #elif defined(FREESCALE_MQX) || defined(FREESCALE_KSDK_MQX)
wolfSSL 14:167253f4e170 192 #if MQX_USE_IO_OLD
wolfSSL 14:167253f4e170 193 /* RTCS old I/O doesn't have an EWOULDBLOCK */
wolfSSL 14:167253f4e170 194 #define SOCKET_EWOULDBLOCK EAGAIN
wolfSSL 14:167253f4e170 195 #define SOCKET_EAGAIN EAGAIN
wolfSSL 14:167253f4e170 196 #define SOCKET_ECONNRESET RTCSERR_TCP_CONN_RESET
wolfSSL 14:167253f4e170 197 #define SOCKET_EINTR EINTR
wolfSSL 14:167253f4e170 198 #define SOCKET_EPIPE EPIPE
wolfSSL 14:167253f4e170 199 #define SOCKET_ECONNREFUSED RTCSERR_TCP_CONN_REFUSED
wolfSSL 14:167253f4e170 200 #define SOCKET_ECONNABORTED RTCSERR_TCP_CONN_ABORTED
wolfSSL 14:167253f4e170 201 #else
wolfSSL 14:167253f4e170 202 #define SOCKET_EWOULDBLOCK NIO_EWOULDBLOCK
wolfSSL 14:167253f4e170 203 #define SOCKET_EAGAIN NIO_EAGAIN
wolfSSL 14:167253f4e170 204 #define SOCKET_ECONNRESET NIO_ECONNRESET
wolfSSL 14:167253f4e170 205 #define SOCKET_EINTR NIO_EINTR
wolfSSL 14:167253f4e170 206 #define SOCKET_EPIPE NIO_EPIPE
wolfSSL 14:167253f4e170 207 #define SOCKET_ECONNREFUSED NIO_ECONNREFUSED
wolfSSL 14:167253f4e170 208 #define SOCKET_ECONNABORTED NIO_ECONNABORTED
wolfSSL 14:167253f4e170 209 #endif
wolfSSL 14:167253f4e170 210 #elif defined(WOLFSSL_MDK_ARM)|| defined(WOLFSSL_KEIL_TCP_NET)
wolfSSL 14:167253f4e170 211 #define SOCKET_EWOULDBLOCK BSD_ERROR_WOULDBLOCK
wolfSSL 14:167253f4e170 212 #define SOCKET_EAGAIN BSD_ERROR_LOCKED
wolfSSL 14:167253f4e170 213 #define SOCKET_ECONNRESET BSD_ERROR_CLOSED
wolfSSL 14:167253f4e170 214 #define SOCKET_EINTR BSD_ERROR
wolfSSL 14:167253f4e170 215 #define SOCKET_EPIPE BSD_ERROR
wolfSSL 14:167253f4e170 216 #define SOCKET_ECONNREFUSED BSD_ERROR
wolfSSL 14:167253f4e170 217 #define SOCKET_ECONNABORTED BSD_ERROR
wolfSSL 14:167253f4e170 218 #elif defined(WOLFSSL_PICOTCP)
wolfSSL 14:167253f4e170 219 #define SOCKET_EWOULDBLOCK PICO_ERR_EAGAIN
wolfSSL 14:167253f4e170 220 #define SOCKET_EAGAIN PICO_ERR_EAGAIN
wolfSSL 14:167253f4e170 221 #define SOCKET_ECONNRESET PICO_ERR_ECONNRESET
wolfSSL 14:167253f4e170 222 #define SOCKET_EINTR PICO_ERR_EINTR
wolfSSL 14:167253f4e170 223 #define SOCKET_EPIPE PICO_ERR_EIO
wolfSSL 14:167253f4e170 224 #define SOCKET_ECONNREFUSED PICO_ERR_ECONNREFUSED
wolfSSL 14:167253f4e170 225 #define SOCKET_ECONNABORTED PICO_ERR_ESHUTDOWN
wolfSSL 14:167253f4e170 226 #elif defined(FREERTOS_TCP)
wolfSSL 14:167253f4e170 227 #define SOCKET_EWOULDBLOCK FREERTOS_EWOULDBLOCK
wolfSSL 14:167253f4e170 228 #define SOCKET_EAGAIN FREERTOS_EWOULDBLOCK
wolfSSL 14:167253f4e170 229 #define SOCKET_ECONNRESET FREERTOS_SOCKET_ERROR
wolfSSL 14:167253f4e170 230 #define SOCKET_EINTR FREERTOS_SOCKET_ERROR
wolfSSL 14:167253f4e170 231 #define SOCKET_EPIPE FREERTOS_SOCKET_ERROR
wolfSSL 14:167253f4e170 232 #define SOCKET_ECONNREFUSED FREERTOS_SOCKET_ERROR
wolfSSL 14:167253f4e170 233 #define SOCKET_ECONNABORTED FREERTOS_SOCKET_ERROR
wolfSSL 14:167253f4e170 234 #elif defined(WOLFSSL_NUCLEUS_1_2)
wolfSSL 14:167253f4e170 235 #define SOCKET_EWOULDBLOCK NU_WOULD_BLOCK
wolfSSL 14:167253f4e170 236 #define SOCKET_EAGAIN NU_WOULD_BLOCK
wolfSSL 14:167253f4e170 237 #define SOCKET_ECONNRESET NU_NOT_CONNECTED
wolfSSL 14:167253f4e170 238 #define SOCKET_EINTR NU_NOT_CONNECTED
wolfSSL 14:167253f4e170 239 #define SOCKET_EPIPE NU_NOT_CONNECTED
wolfSSL 14:167253f4e170 240 #define SOCKET_ECONNREFUSED NU_CONNECTION_REFUSED
wolfSSL 14:167253f4e170 241 #define SOCKET_ECONNABORTED NU_NOT_CONNECTED
wolfSSL 16:8e0d178b1d1e 242 #elif defined(WOLFSSL_DEOS)
wolfSSL 16:8e0d178b1d1e 243 #define SOCKET_EWOULDBLOCK EAGAIN
wolfSSL 16:8e0d178b1d1e 244 #define SOCKET_EAGAIN EAGAIN
wolfSSL 16:8e0d178b1d1e 245 #define SOCKET_ECONNRESET EINTR
wolfSSL 16:8e0d178b1d1e 246 #define SOCKET_EINTR EINTR
wolfSSL 16:8e0d178b1d1e 247 #define SOCKET_EPIPE EPIPE
wolfSSL 16:8e0d178b1d1e 248 #define SOCKET_ECONNREFUSED SOCKET_ERROR
wolfSSL 16:8e0d178b1d1e 249 #define SOCKET_ECONNABORTED SOCKET_ERROR
wolfSSL 16:8e0d178b1d1e 250 #elif defined(HAVE_NETX)
wolfSSL 16:8e0d178b1d1e 251 #define SOCKET_EWOULDBLOCK NX_NOT_CONNECTED
wolfSSL 16:8e0d178b1d1e 252 #define SOCKET_EAGAIN NX_NOT_CONNECTED
wolfSSL 16:8e0d178b1d1e 253 #define SOCKET_ECONNRESET NX_NOT_CONNECTED
wolfSSL 16:8e0d178b1d1e 254 #define SOCKET_EINTR NX_NOT_CONNECTED
wolfSSL 16:8e0d178b1d1e 255 #define SOCKET_EPIPE NX_NOT_CONNECTED
wolfSSL 16:8e0d178b1d1e 256 #define SOCKET_ECONNREFUSED NX_NOT_CONNECTED
wolfSSL 16:8e0d178b1d1e 257 #define SOCKET_ECONNABORTED NX_NOT_CONNECTED
wolfSSL 14:167253f4e170 258 #else
wolfSSL 14:167253f4e170 259 #define SOCKET_EWOULDBLOCK EWOULDBLOCK
wolfSSL 14:167253f4e170 260 #define SOCKET_EAGAIN EAGAIN
wolfSSL 14:167253f4e170 261 #define SOCKET_ECONNRESET ECONNRESET
wolfSSL 14:167253f4e170 262 #define SOCKET_EINTR EINTR
wolfSSL 14:167253f4e170 263 #define SOCKET_EPIPE EPIPE
wolfSSL 14:167253f4e170 264 #define SOCKET_ECONNREFUSED ECONNREFUSED
wolfSSL 14:167253f4e170 265 #define SOCKET_ECONNABORTED ECONNABORTED
wolfSSL 14:167253f4e170 266 #endif /* USE_WINDOWS_API */
wolfSSL 14:167253f4e170 267
wolfSSL 14:167253f4e170 268 #ifdef DEVKITPRO
wolfSSL 14:167253f4e170 269 /* from network.h */
wolfSSL 14:167253f4e170 270 int net_send(int, const void*, int, unsigned int);
wolfSSL 14:167253f4e170 271 int net_recv(int, void*, int, unsigned int);
wolfSSL 14:167253f4e170 272 #define SEND_FUNCTION net_send
wolfSSL 14:167253f4e170 273 #define RECV_FUNCTION net_recv
wolfSSL 16:8e0d178b1d1e 274 #elif defined(WOLFSSL_LWIP) && !defined(WOLFSSL_APACHE_MYNEWT)
wolfSSL 14:167253f4e170 275 #define SEND_FUNCTION lwip_send
wolfSSL 14:167253f4e170 276 #define RECV_FUNCTION lwip_recv
wolfSSL 14:167253f4e170 277 #elif defined(WOLFSSL_PICOTCP)
wolfSSL 14:167253f4e170 278 #define SEND_FUNCTION pico_send
wolfSSL 14:167253f4e170 279 #define RECV_FUNCTION pico_recv
wolfSSL 14:167253f4e170 280 #elif defined(FREERTOS_TCP)
wolfSSL 14:167253f4e170 281 #define RECV_FUNCTION(a,b,c,d) FreeRTOS_recv((Socket_t)(a),(void*)(b), (size_t)(c), (BaseType_t)(d))
wolfSSL 14:167253f4e170 282 #define SEND_FUNCTION(a,b,c,d) FreeRTOS_send((Socket_t)(a),(void*)(b), (size_t)(c), (BaseType_t)(d))
wolfSSL 14:167253f4e170 283 #elif defined(WOLFSSL_VXWORKS)
wolfSSL 14:167253f4e170 284 #define SEND_FUNCTION send
wolfSSL 14:167253f4e170 285 #define RECV_FUNCTION recv
wolfSSL 14:167253f4e170 286 #elif defined(WOLFSSL_NUCLEUS_1_2)
wolfSSL 14:167253f4e170 287 #define SEND_FUNCTION NU_Send
wolfSSL 14:167253f4e170 288 #define RECV_FUNCTION NU_Recv
wolfSSL 16:8e0d178b1d1e 289 #elif defined(WOLFSSL_ZEPHYR)
wolfSSL 16:8e0d178b1d1e 290 #ifndef WOLFSSL_MAX_SEND_SZ
wolfSSL 16:8e0d178b1d1e 291 #define WOLFSSL_MAX_SEND_SZ 256
wolfSSL 16:8e0d178b1d1e 292 #endif
wolfSSL 16:8e0d178b1d1e 293
wolfSSL 16:8e0d178b1d1e 294 #define SEND_FUNCTION send
wolfSSL 16:8e0d178b1d1e 295 #define RECV_FUNCTION recv
wolfSSL 14:167253f4e170 296 #else
wolfSSL 14:167253f4e170 297 #define SEND_FUNCTION send
wolfSSL 14:167253f4e170 298 #define RECV_FUNCTION recv
wolfSSL 14:167253f4e170 299 #if !defined(HAVE_SOCKADDR) && !defined(WOLFSSL_NO_SOCK)
wolfSSL 14:167253f4e170 300 #define HAVE_SOCKADDR
wolfSSL 14:167253f4e170 301 #endif
wolfSSL 14:167253f4e170 302 #endif
wolfSSL 14:167253f4e170 303
wolfSSL 14:167253f4e170 304 #ifdef USE_WINDOWS_API
wolfSSL 14:167253f4e170 305 typedef unsigned int SOCKET_T;
wolfSSL 14:167253f4e170 306 #else
wolfSSL 14:167253f4e170 307 typedef int SOCKET_T;
wolfSSL 14:167253f4e170 308 #endif
wolfSSL 14:167253f4e170 309
wolfSSL 14:167253f4e170 310 #ifndef WOLFSSL_NO_SOCK
wolfSSL 14:167253f4e170 311 #ifndef XSOCKLENT
wolfSSL 14:167253f4e170 312 #ifdef USE_WINDOWS_API
wolfSSL 14:167253f4e170 313 #define XSOCKLENT int
wolfSSL 14:167253f4e170 314 #else
wolfSSL 14:167253f4e170 315 #define XSOCKLENT socklen_t
wolfSSL 14:167253f4e170 316 #endif
wolfSSL 14:167253f4e170 317 #endif
wolfSSL 14:167253f4e170 318
wolfSSL 14:167253f4e170 319 /* Socket Addr Support */
wolfSSL 14:167253f4e170 320 #ifdef HAVE_SOCKADDR
wolfSSL 14:167253f4e170 321 typedef struct sockaddr SOCKADDR;
wolfSSL 14:167253f4e170 322 typedef struct sockaddr_storage SOCKADDR_S;
wolfSSL 14:167253f4e170 323 typedef struct sockaddr_in SOCKADDR_IN;
wolfSSL 14:167253f4e170 324 #ifdef WOLFSSL_IPV6
wolfSSL 14:167253f4e170 325 typedef struct sockaddr_in6 SOCKADDR_IN6;
wolfSSL 14:167253f4e170 326 #endif
wolfSSL 14:167253f4e170 327 typedef struct hostent HOSTENT;
wolfSSL 14:167253f4e170 328 #endif /* HAVE_SOCKADDR */
wolfSSL 14:167253f4e170 329
wolfSSL 14:167253f4e170 330 /* use gethostbyname for c99 */
wolfSSL 16:8e0d178b1d1e 331 #if defined(HAVE_GETADDRINFO) && !defined(WOLF_C99)
wolfSSL 14:167253f4e170 332 typedef struct addrinfo ADDRINFO;
wolfSSL 14:167253f4e170 333 #endif
wolfSSL 14:167253f4e170 334 #endif /* WOLFSSL_NO_SOCK */
wolfSSL 14:167253f4e170 335
wolfSSL 14:167253f4e170 336
wolfSSL 14:167253f4e170 337 /* IO API's */
wolfSSL 14:167253f4e170 338 #ifdef HAVE_IO_TIMEOUT
wolfSSL 14:167253f4e170 339 WOLFSSL_API int wolfIO_SetBlockingMode(SOCKET_T sockfd, int non_blocking);
wolfSSL 16:8e0d178b1d1e 340 WOLFSSL_API void wolfIO_SetTimeout(int to_sec);
wolfSSL 14:167253f4e170 341 WOLFSSL_API int wolfIO_Select(SOCKET_T sockfd, int to_sec);
wolfSSL 14:167253f4e170 342 #endif
wolfSSL 14:167253f4e170 343 WOLFSSL_API int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip,
wolfSSL 14:167253f4e170 344 unsigned short port, int to_sec);
wolfSSL 14:167253f4e170 345 WOLFSSL_API int wolfIO_Send(SOCKET_T sd, char *buf, int sz, int wrFlags);
wolfSSL 14:167253f4e170 346 WOLFSSL_API int wolfIO_Recv(SOCKET_T sd, char *buf, int sz, int rdFlags);
wolfSSL 14:167253f4e170 347
wolfSSL 14:167253f4e170 348 #endif /* USE_WOLFSSL_IO || HAVE_HTTP_CLIENT */
wolfSSL 14:167253f4e170 349
wolfSSL 16:8e0d178b1d1e 350 #ifndef WOLFSSL_NO_SOCK
wolfSSL 16:8e0d178b1d1e 351 #ifdef USE_WINDOWS_API
wolfSSL 16:8e0d178b1d1e 352 #ifndef CloseSocket
wolfSSL 16:8e0d178b1d1e 353 #define CloseSocket(s) closesocket(s)
wolfSSL 16:8e0d178b1d1e 354 #endif
wolfSSL 16:8e0d178b1d1e 355 #define StartTCP() { WSADATA wsd; WSAStartup(0x0002, &wsd); }
wolfSSL 16:8e0d178b1d1e 356 #elif defined(WOLFSSL_MDK_ARM) || defined(WOLFSSL_KEIL_TCP_NET)
wolfSSL 16:8e0d178b1d1e 357 #ifndef CloseSocket
wolfSSL 16:8e0d178b1d1e 358 extern int closesocket(int);
wolfSSL 16:8e0d178b1d1e 359 #define CloseSocket(s) closesocket(s)
wolfSSL 16:8e0d178b1d1e 360 #endif
wolfSSL 16:8e0d178b1d1e 361 #define StartTCP()
wolfSSL 16:8e0d178b1d1e 362 #else
wolfSSL 16:8e0d178b1d1e 363 #ifndef CloseSocket
wolfSSL 16:8e0d178b1d1e 364 #define CloseSocket(s) close(s)
wolfSSL 16:8e0d178b1d1e 365 #endif
wolfSSL 16:8e0d178b1d1e 366 #define StartTCP()
wolfSSL 16:8e0d178b1d1e 367 #ifdef FREERTOS_TCP_WINSIM
wolfSSL 16:8e0d178b1d1e 368 extern int close(int);
wolfSSL 16:8e0d178b1d1e 369 #endif
wolfSSL 16:8e0d178b1d1e 370 #endif
wolfSSL 16:8e0d178b1d1e 371 #endif /* WOLFSSL_NO_SOCK */
wolfSSL 16:8e0d178b1d1e 372
wolfSSL 14:167253f4e170 373
wolfSSL 14:167253f4e170 374 WOLFSSL_API int BioSend(WOLFSSL* ssl, char *buf, int sz, void *ctx);
wolfSSL 14:167253f4e170 375 WOLFSSL_API int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 14:167253f4e170 376 #if defined(USE_WOLFSSL_IO)
wolfSSL 14:167253f4e170 377 /* default IO callbacks */
wolfSSL 14:167253f4e170 378 WOLFSSL_API int EmbedReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 14:167253f4e170 379 WOLFSSL_API int EmbedSend(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 14:167253f4e170 380
wolfSSL 14:167253f4e170 381 #ifdef WOLFSSL_DTLS
wolfSSL 14:167253f4e170 382 WOLFSSL_API int EmbedReceiveFrom(WOLFSSL* ssl, char* buf, int sz, void*);
wolfSSL 14:167253f4e170 383 WOLFSSL_API int EmbedSendTo(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 14:167253f4e170 384 WOLFSSL_API int EmbedGenerateCookie(WOLFSSL* ssl, unsigned char* buf,
wolfSSL 14:167253f4e170 385 int sz, void*);
wolfSSL 14:167253f4e170 386 #ifdef WOLFSSL_MULTICAST
wolfSSL 14:167253f4e170 387 WOLFSSL_API int EmbedReceiveFromMcast(WOLFSSL* ssl,
wolfSSL 14:167253f4e170 388 char* buf, int sz, void*);
wolfSSL 14:167253f4e170 389 #endif /* WOLFSSL_MULTICAST */
wolfSSL 14:167253f4e170 390 #ifdef WOLFSSL_SESSION_EXPORT
wolfSSL 14:167253f4e170 391 WOLFSSL_API int EmbedGetPeer(WOLFSSL* ssl, char* ip, int* ipSz,
wolfSSL 14:167253f4e170 392 unsigned short* port, int* fam);
wolfSSL 14:167253f4e170 393 WOLFSSL_API int EmbedSetPeer(WOLFSSL* ssl, char* ip, int ipSz,
wolfSSL 14:167253f4e170 394 unsigned short port, int fam);
wolfSSL 14:167253f4e170 395 #endif /* WOLFSSL_SESSION_EXPORT */
wolfSSL 14:167253f4e170 396 #endif /* WOLFSSL_DTLS */
wolfSSL 14:167253f4e170 397 #endif /* USE_WOLFSSL_IO */
wolfSSL 14:167253f4e170 398
wolfSSL 14:167253f4e170 399 #ifdef HAVE_OCSP
wolfSSL 14:167253f4e170 400 WOLFSSL_API int wolfIO_HttpBuildRequestOcsp(const char* domainName,
wolfSSL 14:167253f4e170 401 const char* path, int ocspReqSz, unsigned char* buf, int bufSize);
wolfSSL 14:167253f4e170 402 WOLFSSL_API int wolfIO_HttpProcessResponseOcsp(int sfd,
wolfSSL 14:167253f4e170 403 unsigned char** respBuf, unsigned char* httpBuf, int httpBufSz,
wolfSSL 14:167253f4e170 404 void* heap);
wolfSSL 14:167253f4e170 405
wolfSSL 14:167253f4e170 406 WOLFSSL_API int EmbedOcspLookup(void*, const char*, int, unsigned char*,
wolfSSL 14:167253f4e170 407 int, unsigned char**);
wolfSSL 14:167253f4e170 408 WOLFSSL_API void EmbedOcspRespFree(void*, unsigned char*);
wolfSSL 14:167253f4e170 409 #endif
wolfSSL 14:167253f4e170 410
wolfSSL 14:167253f4e170 411 #ifdef HAVE_CRL_IO
wolfSSL 14:167253f4e170 412 WOLFSSL_API int wolfIO_HttpBuildRequestCrl(const char* url, int urlSz,
wolfSSL 14:167253f4e170 413 const char* domainName, unsigned char* buf, int bufSize);
wolfSSL 14:167253f4e170 414 WOLFSSL_API int wolfIO_HttpProcessResponseCrl(WOLFSSL_CRL* crl, int sfd,
wolfSSL 14:167253f4e170 415 unsigned char* httpBuf, int httpBufSz);
wolfSSL 14:167253f4e170 416
wolfSSL 14:167253f4e170 417 WOLFSSL_API int EmbedCrlLookup(WOLFSSL_CRL* crl, const char* url,
wolfSSL 14:167253f4e170 418 int urlSz);
wolfSSL 14:167253f4e170 419 #endif
wolfSSL 14:167253f4e170 420
wolfSSL 14:167253f4e170 421
wolfSSL 14:167253f4e170 422 #if defined(HAVE_HTTP_CLIENT)
wolfSSL 14:167253f4e170 423 WOLFSSL_API int wolfIO_DecodeUrl(const char* url, int urlSz, char* outName,
wolfSSL 14:167253f4e170 424 char* outPath, unsigned short* outPort);
wolfSSL 14:167253f4e170 425
wolfSSL 14:167253f4e170 426 WOLFSSL_API int wolfIO_HttpBuildRequest(const char* reqType,
wolfSSL 14:167253f4e170 427 const char* domainName, const char* path, int pathLen, int reqSz,
wolfSSL 14:167253f4e170 428 const char* contentType, unsigned char* buf, int bufSize);
wolfSSL 16:8e0d178b1d1e 429 WOLFSSL_LOCAL int wolfIO_HttpBuildRequest_ex(const char* reqType,
wolfSSL 16:8e0d178b1d1e 430 const char* domainName, const char* path, int pathLen, int reqSz,
wolfSSL 16:8e0d178b1d1e 431 const char* contentType, const char *exHdrs, unsigned char* buf, int bufSize);
wolfSSL 14:167253f4e170 432 WOLFSSL_API int wolfIO_HttpProcessResponse(int sfd, const char** appStrList,
wolfSSL 14:167253f4e170 433 unsigned char** respBuf, unsigned char* httpBuf, int httpBufSz,
wolfSSL 14:167253f4e170 434 int dynType, void* heap);
wolfSSL 14:167253f4e170 435 #endif /* HAVE_HTTP_CLIENT */
wolfSSL 14:167253f4e170 436
wolfSSL 14:167253f4e170 437
wolfSSL 14:167253f4e170 438 /* I/O callbacks */
wolfSSL 14:167253f4e170 439 typedef int (*CallbackIORecv)(WOLFSSL *ssl, char *buf, int sz, void *ctx);
wolfSSL 14:167253f4e170 440 typedef int (*CallbackIOSend)(WOLFSSL *ssl, char *buf, int sz, void *ctx);
wolfSSL 14:167253f4e170 441 WOLFSSL_API void wolfSSL_CTX_SetIORecv(WOLFSSL_CTX*, CallbackIORecv);
wolfSSL 14:167253f4e170 442 WOLFSSL_API void wolfSSL_CTX_SetIOSend(WOLFSSL_CTX*, CallbackIOSend);
wolfSSL 16:8e0d178b1d1e 443 WOLFSSL_API void wolfSSL_SSLSetIORecv(WOLFSSL*, CallbackIORecv);
wolfSSL 16:8e0d178b1d1e 444 WOLFSSL_API void wolfSSL_SSLSetIOSend(WOLFSSL*, CallbackIOSend);
wolfSSL 14:167253f4e170 445 /* deprecated old name */
wolfSSL 14:167253f4e170 446 #define wolfSSL_SetIORecv wolfSSL_CTX_SetIORecv
wolfSSL 14:167253f4e170 447 #define wolfSSL_SetIOSend wolfSSL_CTX_SetIOSend
wolfSSL 14:167253f4e170 448
wolfSSL 14:167253f4e170 449 WOLFSSL_API void wolfSSL_SetIOReadCtx( WOLFSSL* ssl, void *ctx);
wolfSSL 14:167253f4e170 450 WOLFSSL_API void wolfSSL_SetIOWriteCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 14:167253f4e170 451
wolfSSL 14:167253f4e170 452 WOLFSSL_API void* wolfSSL_GetIOReadCtx( WOLFSSL* ssl);
wolfSSL 14:167253f4e170 453 WOLFSSL_API void* wolfSSL_GetIOWriteCtx(WOLFSSL* ssl);
wolfSSL 14:167253f4e170 454
wolfSSL 14:167253f4e170 455 WOLFSSL_API void wolfSSL_SetIOReadFlags( WOLFSSL* ssl, int flags);
wolfSSL 14:167253f4e170 456 WOLFSSL_API void wolfSSL_SetIOWriteFlags(WOLFSSL* ssl, int flags);
wolfSSL 14:167253f4e170 457
wolfSSL 14:167253f4e170 458
wolfSSL 14:167253f4e170 459 #ifdef HAVE_NETX
wolfSSL 14:167253f4e170 460 WOLFSSL_LOCAL int NetX_Receive(WOLFSSL *ssl, char *buf, int sz, void *ctx);
wolfSSL 14:167253f4e170 461 WOLFSSL_LOCAL int NetX_Send(WOLFSSL *ssl, char *buf, int sz, void *ctx);
wolfSSL 14:167253f4e170 462
wolfSSL 14:167253f4e170 463 WOLFSSL_API void wolfSSL_SetIO_NetX(WOLFSSL* ssl, NX_TCP_SOCKET* nxsocket,
wolfSSL 14:167253f4e170 464 ULONG waitoption);
wolfSSL 14:167253f4e170 465 #endif /* HAVE_NETX */
wolfSSL 14:167253f4e170 466
wolfSSL 14:167253f4e170 467 #ifdef MICRIUM
wolfSSL 14:167253f4e170 468 WOLFSSL_LOCAL int MicriumSend(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 14:167253f4e170 469 WOLFSSL_LOCAL int MicriumReceive(WOLFSSL* ssl, char* buf, int sz,
wolfSSL 14:167253f4e170 470 void* ctx);
wolfSSL 14:167253f4e170 471 WOLFSSL_LOCAL int MicriumReceiveFrom(WOLFSSL* ssl, char* buf, int sz,
wolfSSL 14:167253f4e170 472 void* ctx);
wolfSSL 14:167253f4e170 473 WOLFSSL_LOCAL int MicriumSendTo(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 14:167253f4e170 474 #endif /* MICRIUM */
wolfSSL 14:167253f4e170 475
wolfSSL 16:8e0d178b1d1e 476 #if defined(WOLFSSL_APACHE_MYNEWT) && !defined(WOLFSSL_LWIP)
wolfSSL 16:8e0d178b1d1e 477 WOLFSSL_LOCAL int Mynewt_Receive(WOLFSSL *ssl, char *buf, int sz, void *ctx);
wolfSSL 16:8e0d178b1d1e 478 WOLFSSL_LOCAL int Mynewt_Send(WOLFSSL* ssl, char *buf, int sz, void *ctx);
wolfSSL 16:8e0d178b1d1e 479 WOLFSSL_API void wolfSSL_SetIO_Mynewt(WOLFSSL* ssl, struct mn_socket* mnSocket,
wolfSSL 16:8e0d178b1d1e 480 struct mn_sockaddr_in* mnSockAddrIn);
wolfSSL 16:8e0d178b1d1e 481 #endif /* defined(WOLFSSL_APACHE_MYNEWT) && !defined(WOLFSSL_LWIP) */
wolfSSL 16:8e0d178b1d1e 482
wolfSSL 16:8e0d178b1d1e 483 #ifdef WOLFSSL_UIP
wolfSSL 16:8e0d178b1d1e 484
wolfSSL 16:8e0d178b1d1e 485 struct uip_wolfssl_ctx {
wolfSSL 16:8e0d178b1d1e 486 union socket_connector {
wolfSSL 16:8e0d178b1d1e 487 struct tcp_socket tcp;
wolfSSL 16:8e0d178b1d1e 488 struct udp_socket udp;
wolfSSL 16:8e0d178b1d1e 489 } conn;
wolfSSL 16:8e0d178b1d1e 490 WOLFSSL_CTX *ctx;
wolfSSL 16:8e0d178b1d1e 491 WOLFSSL *ssl;
wolfSSL 16:8e0d178b1d1e 492 uint8_t *input_databuf;
wolfSSL 16:8e0d178b1d1e 493 uint8_t *output_databuf;
wolfSSL 16:8e0d178b1d1e 494 uint8_t *ssl_rx_databuf;
wolfSSL 16:8e0d178b1d1e 495 int ssl_rb_len;
wolfSSL 16:8e0d178b1d1e 496 int ssl_rb_off;
wolfSSL 16:8e0d178b1d1e 497 struct process *process;
wolfSSL 16:8e0d178b1d1e 498 tcp_socket_data_callback_t input_callback;
wolfSSL 16:8e0d178b1d1e 499 tcp_socket_event_callback_t event_callback;
wolfSSL 16:8e0d178b1d1e 500 int closing;
wolfSSL 16:8e0d178b1d1e 501 uip_ipaddr_t peer_addr;
wolfSSL 16:8e0d178b1d1e 502 uint16_t peer_port;
wolfSSL 16:8e0d178b1d1e 503 };
wolfSSL 16:8e0d178b1d1e 504
wolfSSL 16:8e0d178b1d1e 505 typedef struct uip_wolfssl_ctx uip_wolfssl_ctx;
wolfSSL 16:8e0d178b1d1e 506
wolfSSL 16:8e0d178b1d1e 507 WOLFSSL_LOCAL int uIPSend(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 16:8e0d178b1d1e 508 WOLFSSL_LOCAL int uIPReceive(WOLFSSL* ssl, char* buf, int sz,
wolfSSL 16:8e0d178b1d1e 509 void* ctx);
wolfSSL 16:8e0d178b1d1e 510 WOLFSSL_LOCAL int uIPReceiveFrom(WOLFSSL* ssl, char* buf, int sz,
wolfSSL 16:8e0d178b1d1e 511 void* ctx);
wolfSSL 16:8e0d178b1d1e 512 WOLFSSL_LOCAL int uIPSendTo(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 16:8e0d178b1d1e 513
wolfSSL 16:8e0d178b1d1e 514 #endif
wolfSSL 16:8e0d178b1d1e 515
wolfSSL 16:8e0d178b1d1e 516 #ifdef WOLFSSL_GNRC
wolfSSL 16:8e0d178b1d1e 517 #include <sock_types.h>
wolfSSL 16:8e0d178b1d1e 518 #include <net/gnrc.h>
wolfSSL 16:8e0d178b1d1e 519 #include <net/af.h>
wolfSSL 16:8e0d178b1d1e 520 #include <net/sock.h>
wolfSSL 16:8e0d178b1d1e 521 #include <net/gnrc/tcp.h>
wolfSSL 16:8e0d178b1d1e 522 #include <net/gnrc/udp.h>
wolfSSL 16:8e0d178b1d1e 523
wolfSSL 16:8e0d178b1d1e 524 struct gnrc_wolfssl_ctx {
wolfSSL 16:8e0d178b1d1e 525 union socket_connector {
wolfSSL 16:8e0d178b1d1e 526 #ifdef MODULE_SOCK_TCP
wolfSSL 16:8e0d178b1d1e 527 sock_tcp_t tcp;
wolfSSL 16:8e0d178b1d1e 528 #endif
wolfSSL 16:8e0d178b1d1e 529 sock_udp_t udp;
wolfSSL 16:8e0d178b1d1e 530 } conn;
wolfSSL 16:8e0d178b1d1e 531 WOLFSSL_CTX *ctx;
wolfSSL 16:8e0d178b1d1e 532 WOLFSSL *ssl;
wolfSSL 16:8e0d178b1d1e 533
wolfSSL 16:8e0d178b1d1e 534 int closing;
wolfSSL 16:8e0d178b1d1e 535 struct _sock_tl_ep peer_addr;
wolfSSL 16:8e0d178b1d1e 536 };
wolfSSL 16:8e0d178b1d1e 537
wolfSSL 16:8e0d178b1d1e 538 typedef struct gnrc_wolfssl_ctx sock_tls_t;
wolfSSL 16:8e0d178b1d1e 539
wolfSSL 16:8e0d178b1d1e 540 WOLFSSL_LOCAL int GNRC_ReceiveFrom(WOLFSSL* ssl, char* buf, int sz,
wolfSSL 16:8e0d178b1d1e 541 void* ctx);
wolfSSL 16:8e0d178b1d1e 542 WOLFSSL_LOCAL int GNRC_SendTo(WOLFSSL* ssl, char* buf, int sz, void* ctx);
wolfSSL 16:8e0d178b1d1e 543
wolfSSL 16:8e0d178b1d1e 544 #endif
wolfSSL 16:8e0d178b1d1e 545
wolfSSL 16:8e0d178b1d1e 546
wolfSSL 14:167253f4e170 547 #ifdef WOLFSSL_DTLS
wolfSSL 14:167253f4e170 548 typedef int (*CallbackGenCookie)(WOLFSSL* ssl, unsigned char* buf, int sz,
wolfSSL 14:167253f4e170 549 void* ctx);
wolfSSL 14:167253f4e170 550 WOLFSSL_API void wolfSSL_CTX_SetGenCookie(WOLFSSL_CTX*, CallbackGenCookie);
wolfSSL 14:167253f4e170 551 WOLFSSL_API void wolfSSL_SetCookieCtx(WOLFSSL* ssl, void *ctx);
wolfSSL 14:167253f4e170 552 WOLFSSL_API void* wolfSSL_GetCookieCtx(WOLFSSL* ssl);
wolfSSL 14:167253f4e170 553
wolfSSL 14:167253f4e170 554 #ifdef WOLFSSL_SESSION_EXPORT
wolfSSL 14:167253f4e170 555 typedef int (*CallbackGetPeer)(WOLFSSL* ssl, char* ip, int* ipSz,
wolfSSL 14:167253f4e170 556 unsigned short* port, int* fam);
wolfSSL 14:167253f4e170 557 typedef int (*CallbackSetPeer)(WOLFSSL* ssl, char* ip, int ipSz,
wolfSSL 14:167253f4e170 558 unsigned short port, int fam);
wolfSSL 14:167253f4e170 559
wolfSSL 14:167253f4e170 560 WOLFSSL_API void wolfSSL_CTX_SetIOGetPeer(WOLFSSL_CTX*, CallbackGetPeer);
wolfSSL 14:167253f4e170 561 WOLFSSL_API void wolfSSL_CTX_SetIOSetPeer(WOLFSSL_CTX*, CallbackSetPeer);
wolfSSL 14:167253f4e170 562 #endif /* WOLFSSL_SESSION_EXPORT */
wolfSSL 14:167253f4e170 563 #endif
wolfSSL 14:167253f4e170 564
wolfSSL 14:167253f4e170 565
wolfSSL 14:167253f4e170 566
wolfSSL 14:167253f4e170 567 #ifndef XINET_NTOP
wolfSSL 14:167253f4e170 568 #define XINET_NTOP(a,b,c,d) inet_ntop((a),(b),(c),(d))
wolfSSL 14:167253f4e170 569 #ifdef USE_WINDOWS_API /* Windows-friendly definition */
wolfSSL 14:167253f4e170 570 #undef XINET_NTOP
wolfSSL 14:167253f4e170 571 #define XINET_NTOP(a,b,c,d) InetNtop((a),(b),(c),(d))
wolfSSL 14:167253f4e170 572 #endif
wolfSSL 14:167253f4e170 573 #endif
wolfSSL 14:167253f4e170 574 #ifndef XINET_PTON
wolfSSL 14:167253f4e170 575 #define XINET_PTON(a,b,c) inet_pton((a),(b),(c))
wolfSSL 14:167253f4e170 576 #ifdef USE_WINDOWS_API /* Windows-friendly definition */
wolfSSL 14:167253f4e170 577 #undef XINET_PTON
wolfSSL 14:167253f4e170 578 #define XINET_PTON(a,b,c) InetPton((a),(b),(c))
wolfSSL 14:167253f4e170 579 #endif
wolfSSL 14:167253f4e170 580 #endif
wolfSSL 14:167253f4e170 581 #ifndef XHTONS
wolfSSL 14:167253f4e170 582 #define XHTONS(a) htons((a))
wolfSSL 14:167253f4e170 583 #endif
wolfSSL 14:167253f4e170 584 #ifndef XNTOHS
wolfSSL 14:167253f4e170 585 #define XNTOHS(a) ntohs((a))
wolfSSL 14:167253f4e170 586 #endif
wolfSSL 14:167253f4e170 587
wolfSSL 14:167253f4e170 588 #ifndef WOLFSSL_IP4
wolfSSL 14:167253f4e170 589 #define WOLFSSL_IP4 AF_INET
wolfSSL 14:167253f4e170 590 #endif
wolfSSL 14:167253f4e170 591 #ifndef WOLFSSL_IP6
wolfSSL 14:167253f4e170 592 #define WOLFSSL_IP6 AF_INET6
wolfSSL 14:167253f4e170 593 #endif
wolfSSL 14:167253f4e170 594
wolfSSL 14:167253f4e170 595
wolfSSL 14:167253f4e170 596 #ifdef __cplusplus
wolfSSL 14:167253f4e170 597 } /* extern "C" */
wolfSSL 14:167253f4e170 598 #endif
wolfSSL 14:167253f4e170 599
wolfSSL 14:167253f4e170 600 #endif /* WOLFSSL_IO_H */
wolfSSL 14:167253f4e170 601