diff options
author | Matt Caswell <matt@openssl.org> | 2015-02-07 00:08:59 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2015-02-07 14:29:16 +0000 |
commit | 3ffbe008083dcaad282622e8e4be69bb29bc6315 (patch) | |
tree | 5b0daabb913aec51589bd67987a1ec1f278d522b /ssl | |
parent | 05c3234ddfb41f4fdaae1162de3b825d741da828 (diff) |
Apache Traffic Server has a need to set the rbio without touching the wbio.
There is no mechanism to do that at the moment - SSL_set_bio makes changes
to the wbio even if you pass in SSL_get_wbio().
This commit introduces two new API functions SSL_set_rbio() and
SSL_set_wbio(). These do the same job as SSL_set_bio() except they enable
you to manage the rbio and wbio individually.
Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'ssl')
-rw-r--r-- | ssl/ssl.h | 2 | ||||
-rw-r--r-- | ssl/ssl_lib.c | 18 |
2 files changed, 16 insertions, 4 deletions
@@ -1398,6 +1398,8 @@ int SSL_set_fd(SSL *s, int fd); int SSL_set_rfd(SSL *s, int fd); int SSL_set_wfd(SSL *s, int fd); # endif +void SSL_set_rbio(SSL *s, BIO *rbio); +void SSL_set_wbio(SSL *s, BIO *wbio); void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); BIO *SSL_get_rbio(const SSL *s); BIO *SSL_get_wbio(const SSL *s); diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index ed987c0ff5..c535a42900 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -622,7 +622,14 @@ void SSL_free(SSL *s) OPENSSL_free(s); } -void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio) +void SSL_set_rbio(SSL *s, BIO *rbio) +{ + if ((s->rbio != NULL) && (s->rbio != rbio)) + BIO_free_all(s->rbio); + s->rbio = rbio; +} + +void SSL_set_wbio(SSL *s, BIO *wbio) { /* * If the output buffering BIO is still in place, remove it @@ -633,14 +640,17 @@ void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio) s->bbio->next_bio = NULL; } } - if ((s->rbio != NULL) && (s->rbio != rbio)) - BIO_free_all(s->rbio); if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio)) BIO_free_all(s->wbio); - s->rbio = rbio; s->wbio = wbio; } +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio) +{ + SSL_set_wbio(s, wbio); + SSL_set_rbio(s, rbio); +} + BIO *SSL_get_rbio(const SSL *s) { return (s->rbio); |