diff --git a/src/bio.c b/src/bio.c index 318fca66c..f59e14e24 100644 --- a/src/bio.c +++ b/src/bio.c @@ -351,6 +351,15 @@ int wolfSSL_BIO_read(WOLFSSL_BIO* bio, void* buf, int len) ret = NOT_COMPILED_IN; #endif break; + case WOLFSSL_BIO_DGRAM: + #ifdef USE_WOLFSSL_IO + /* BIO requires built-in socket support + * (cannot be used with WOLFSSL_USER_IO) */ + ret = wolfIO_RecvDgram(bio->num, (char*)buf, len, 0); + #else + ret = NOT_COMPILED_IN; + #endif + break; } /* switch */ } @@ -732,6 +741,15 @@ int wolfSSL_BIO_write(WOLFSSL_BIO* bio, const void* data, int len) ret = NOT_COMPILED_IN; #endif break; + case WOLFSSL_BIO_DGRAM: + #ifdef USE_WOLFSSL_IO + /* BIO requires built-in socket support + * (cannot be used with WOLFSSL_USER_IO) */ + ret = wolfIO_SendDgram(bio->num, (char*)data, len, 0); + #else + ret = NOT_COMPILED_IN; + #endif + break; } /* switch */ } @@ -1830,6 +1848,7 @@ long wolfSSL_BIO_set_nbio(WOLFSSL_BIO* bio, long on) if (bio) { switch (bio->type) { case WOLFSSL_BIO_SOCKET: + case WOLFSSL_BIO_DGRAM: #ifdef XFCNTL { int ret; @@ -2146,6 +2165,32 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio) return bio; } + + WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_dgram(void) + { + static WOLFSSL_BIO_METHOD meth = + WOLFSSL_BIO_METHOD_INIT(WOLFSSL_BIO_DGRAM); + + WOLFSSL_ENTER("wolfSSL_BIO_s_dgram"); + + return &meth; + } + + + WOLFSSL_BIO* wolfSSL_BIO_new_dgram(int fd, int closeF) + { + WOLFSSL_BIO* bio = wolfSSL_BIO_new(wolfSSL_BIO_s_dgram()); + + WOLFSSL_ENTER("wolfSSL_BIO_new_dgram"); + if (bio) { + bio->type = WOLFSSL_BIO_DGRAM; + bio->shutdown = (byte)closeF; + bio->num = fd; + } + return bio; + } + + /** * Create new socket BIO object. This is a pure TCP connection with * no SSL or TLS protection. diff --git a/src/x509.c b/src/x509.c index fae957979..6bc2ceab8 100644 --- a/src/x509.c +++ b/src/x509.c @@ -8805,11 +8805,6 @@ const WOLFSSL_X509_VERIFY_PARAM *wolfSSL_X509_VERIFY_PARAM_lookup(const char *na return NULL; } -const WOLFSSL_X509_VERIFY_PARAM *wolfSSL_X509_STORE_get0_param(const WOLFSSL_X509_STORE *store) -{ - return store->param; -} - /* inherits properties of param "to" to param "from" * * WOLFSSL_VPARAM_DEFAULT any values in "src" is copied diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 5e24b073a..c9079344e 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -474,7 +474,8 @@ enum BIO_TYPE { WOLFSSL_BIO_BIO = 5, WOLFSSL_BIO_FILE = 6, WOLFSSL_BIO_BASE64 = 7, - WOLFSSL_BIO_MD = 8 + WOLFSSL_BIO_MD = 8, + WOLFSSL_BIO_DGRAM = 9 }; enum BIO_FLAGS { @@ -1774,6 +1775,7 @@ WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_f_buffer(void); WOLFSSL_API long wolfSSL_BIO_set_write_buffer_size(WOLFSSL_BIO* bio, long size); WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_f_ssl(void); WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_socket(int sfd, int flag); +WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_dgram(int fd, int closeF); WOLFSSL_API int wolfSSL_BIO_eof(WOLFSSL_BIO* b); WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_s_mem(void); @@ -1833,6 +1835,7 @@ WOLFSSL_API WOLFSSL_BIO *wolfSSL_BIO_new_fd(int fd, int close_flag); WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_bio(void); WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_socket(void); +WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_dgram(void); WOLFSSL_API WOLFSSL_BIO *wolfSSL_BIO_new_connect(const char *str); WOLFSSL_API WOLFSSL_BIO *wolfSSL_BIO_new_accept(const char *port); @@ -2141,8 +2144,6 @@ WOLFSSL_API int wolfSSL_X509_VERIFY_PARAM_set1(WOLFSSL_X509_VERIFY_PARAM* to, const WOLFSSL_X509_VERIFY_PARAM* from); WOLFSSL_API const WOLFSSL_X509_VERIFY_PARAM *wolfSSL_X509_VERIFY_PARAM_lookup( const char *name); -WOLFSSL_API const WOLFSSL_X509_VERIFY_PARAM *wolfSSL_X509_STORE_get0_param( - const WOLFSSL_X509_STORE *store); WOLFSSL_API int wolfSSL_X509_VERIFY_PARAM_inherit(WOLFSSL_X509_VERIFY_PARAM *to, const WOLFSSL_X509_VERIFY_PARAM *from); WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx,