File: //usr/local/openssl/man/man3/BIO_method_type.3
.\" -*- mode: troff; coding: utf-8 -*-
.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
.ie n \{\
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds C`
. ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{\
. if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. if !\nF==2 \{\
. nr % 0
. nr F 2
. \}
. \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "BIO_find_type 3"
.TH BIO_find_type 3 2019-12-20 1.0.2u OpenSSL
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH NAME
BIO_find_type, BIO_next, BIO_method_type \- BIO chain traversal
.SH SYNOPSIS
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/bio.h>
\&
\& BIO * BIO_find_type(BIO *b,int bio_type);
\& BIO * BIO_next(BIO *b);
\&
\& #define BIO_method_type(b) ((b)\->method\->type)
\&
\& #define BIO_TYPE_NONE 0
\& #define BIO_TYPE_MEM (1|0x0400)
\& #define BIO_TYPE_FILE (2|0x0400)
\&
\& #define BIO_TYPE_FD (4|0x0400|0x0100)
\& #define BIO_TYPE_SOCKET (5|0x0400|0x0100)
\& #define BIO_TYPE_NULL (6|0x0400)
\& #define BIO_TYPE_SSL (7|0x0200)
\& #define BIO_TYPE_MD (8|0x0200)
\& #define BIO_TYPE_BUFFER (9|0x0200)
\& #define BIO_TYPE_CIPHER (10|0x0200)
\& #define BIO_TYPE_BASE64 (11|0x0200)
\& #define BIO_TYPE_CONNECT (12|0x0400|0x0100)
\& #define BIO_TYPE_ACCEPT (13|0x0400|0x0100)
\& #define BIO_TYPE_PROXY_CLIENT (14|0x0200)
\& #define BIO_TYPE_PROXY_SERVER (15|0x0200)
\& #define BIO_TYPE_NBIO_TEST (16|0x0200)
\& #define BIO_TYPE_NULL_FILTER (17|0x0200)
\& #define BIO_TYPE_BER (18|0x0200)
\& #define BIO_TYPE_BIO (19|0x0400)
\&
\& #define BIO_TYPE_DESCRIPTOR 0x0100
\& #define BIO_TYPE_FILTER 0x0200
\& #define BIO_TYPE_SOURCE_SINK 0x0400
.Ve
.SH DESCRIPTION
.IX Header "DESCRIPTION"
The \fBBIO_find_type()\fR searches for a BIO of a given type in a chain, starting
at BIO \fBb\fR. If \fBtype\fR is a specific type (such as BIO_TYPE_MEM) then a search
is made for a BIO of that type. If \fBtype\fR is a general type (such as
\&\fBBIO_TYPE_SOURCE_SINK\fR) then the next matching BIO of the given general type is
searched for. \fBBIO_find_type()\fR returns the next matching BIO or NULL if none is
found.
.PP
Note: not all the \fBBIO_TYPE_*\fR types above have corresponding BIO implementations.
.PP
\&\fBBIO_next()\fR returns the next BIO in a chain. It can be used to traverse all BIOs
in a chain or used in conjunction with \fBBIO_find_type()\fR to find all BIOs of a
certain type.
.PP
\&\fBBIO_method_type()\fR returns the type of a BIO.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\&\fBBIO_find_type()\fR returns a matching BIO or NULL for no match.
.PP
\&\fBBIO_next()\fR returns the next BIO in a chain.
.PP
\&\fBBIO_method_type()\fR returns the type of the BIO \fBb\fR.
.SH NOTES
.IX Header "NOTES"
\&\fBBIO_next()\fR was added to OpenSSL 0.9.6 to provide a 'clean' way to traverse a BIO
chain or find multiple matches using \fBBIO_find_type()\fR. Previous versions had to
use:
.PP
.Vb 1
\& next = bio\->next_bio;
.Ve
.SH BUGS
.IX Header "BUGS"
\&\fBBIO_find_type()\fR in OpenSSL 0.9.5a and earlier could not be safely passed a
NULL pointer for the \fBb\fR argument.
.SH EXAMPLE
.IX Header "EXAMPLE"
Traverse a chain looking for digest BIOs:
.PP
.Vb 2
\& BIO *btmp;
\& btmp = in_bio; /* in_bio is chain to search through */
\&
\& do {
\& btmp = BIO_find_type(btmp, BIO_TYPE_MD);
\& if(btmp == NULL) break; /* Not found */
\& /* btmp is a digest BIO, do something with it ...*/
\& ...
\&
\& btmp = BIO_next(btmp);
\& } while(btmp);
.Ve
.SH "SEE ALSO"
.IX Header "SEE ALSO"
TBA