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>
This commit is contained in:
Matt Caswell
2015-02-07 00:08:59 +00:00
parent 05c3234ddf
commit 3ffbe00808
3 changed files with 27 additions and 6 deletions

View File

@@ -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);