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:
parent
05c3234ddf
commit
3ffbe00808
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
SSL_set_bio - connect the SSL object with a BIO
|
SSL_set_bio, SSL_set_rbio, SSL_set_wbio - connect the SSL object with a BIO
|
||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
@ -21,9 +21,14 @@ If a BIO is non-blocking, the B<ssl> will also have non-blocking behaviour.
|
|||||||
If there was already a BIO connected to B<ssl>, BIO_free() will be called
|
If there was already a BIO connected to B<ssl>, BIO_free() will be called
|
||||||
(for both the reading and writing side, if different).
|
(for both the reading and writing side, if different).
|
||||||
|
|
||||||
|
SSL_set_rbio() does the same job as SSL_set_bio() except that it enables you
|
||||||
|
to only connect the read bio, without touching the write bio. Similarly
|
||||||
|
SSL_set_wbio() enables you to connect the write bio without touching the read
|
||||||
|
bio.
|
||||||
|
|
||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
SSL_set_bio() cannot fail.
|
SSL_set_bio(), SSL_set_rbio() and SSL_set_wbio() cannot fail.
|
||||||
|
|
||||||
=head1 SEE ALSO
|
=head1 SEE ALSO
|
||||||
|
|
||||||
@ -31,4 +36,8 @@ L<SSL_get_rbio(3)|SSL_get_rbio(3)>,
|
|||||||
L<SSL_connect(3)|SSL_connect(3)>, L<SSL_accept(3)|SSL_accept(3)>,
|
L<SSL_connect(3)|SSL_connect(3)>, L<SSL_accept(3)|SSL_accept(3)>,
|
||||||
L<SSL_shutdown(3)|SSL_shutdown(3)>, L<ssl(3)|ssl(3)>, L<bio(3)|bio(3)>
|
L<SSL_shutdown(3)|SSL_shutdown(3)>, L<ssl(3)|ssl(3)>, L<bio(3)|bio(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
SSL_set_rbio() and SSL_set_wbio() were added in OpenSSL 1.1.0.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
@ -1398,6 +1398,8 @@ int SSL_set_fd(SSL *s, int fd);
|
|||||||
int SSL_set_rfd(SSL *s, int fd);
|
int SSL_set_rfd(SSL *s, int fd);
|
||||||
int SSL_set_wfd(SSL *s, int fd);
|
int SSL_set_wfd(SSL *s, int fd);
|
||||||
# endif
|
# 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);
|
void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio);
|
||||||
BIO *SSL_get_rbio(const SSL *s);
|
BIO *SSL_get_rbio(const SSL *s);
|
||||||
BIO *SSL_get_wbio(const SSL *s);
|
BIO *SSL_get_wbio(const SSL *s);
|
||||||
|
@ -622,7 +622,14 @@ void SSL_free(SSL *s)
|
|||||||
OPENSSL_free(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
|
* 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;
|
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))
|
if ((s->wbio != NULL) && (s->wbio != wbio) && (s->rbio != s->wbio))
|
||||||
BIO_free_all(s->wbio);
|
BIO_free_all(s->wbio);
|
||||||
s->rbio = rbio;
|
|
||||||
s->wbio = wbio;
|
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)
|
BIO *SSL_get_rbio(const SSL *s)
|
||||||
{
|
{
|
||||||
return (s->rbio);
|
return (s->rbio);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user