Current Path : /usr/opt/openssl11/share/doc/openssl/html/man3/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/opt/openssl11/share/doc/openssl/html/man3/BIO_push.html |
<?xml version="1.0" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>BIO_push</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link rev="made" href="mailto:root@hsxx.drive.ne.jp" /> </head> <body style="background-color: white"> <!-- INDEX BEGIN --> <div name="index"> <p><a name="__index__"></a></p> <ul> <li><a href="#name">NAME</a></li> <li><a href="#synopsis">SYNOPSIS</a></li> <li><a href="#description">DESCRIPTION</a></li> <li><a href="#notes">NOTES</a></li> <li><a href="#return_values">RETURN VALUES</a></li> <li><a href="#examples">EXAMPLES</a></li> <li><a href="#see_also">SEE ALSO</a></li> <li><a href="#history">HISTORY</a></li> <li><a href="#copyright">COPYRIGHT</a></li> </ul> <hr name="index" /> </div> <!-- INDEX END --> <p> </p> <hr /> <h1><a name="name">NAME</a></h1> <p>BIO_push, BIO_pop, BIO_set_next - add and remove BIOs from a chain</p> <p> </p> <hr /> <h1><a name="synopsis">SYNOPSIS</a></h1> <pre> #include <openssl/bio.h></pre> <pre> BIO *BIO_push(BIO *b, BIO *next); BIO *BIO_pop(BIO *b); void BIO_set_next(BIO *b, BIO *next);</pre> <p> </p> <hr /> <h1><a name="description">DESCRIPTION</a></h1> <p><code>BIO_push()</code> pushes <em>b</em> on <em>next</em>. If <em>b</em> is NULL the function does nothing and returns <em>next</em>. Otherwise it prepends <em>b</em>, which may be a single BIO or a chain of BIOs, to <em>next</em> (unless <em>next</em> is NULL). It then makes a control call on <em>b</em> and returns <em>b</em>.</p> <p><code>BIO_pop()</code> removes the BIO <em>b</em> from any chain is is part of. If <em>b</em> is NULL the function does nothing and returns NULL. Otherwise it makes a control call on <em>b</em> and returns the next BIO in the chain, or NULL if there is no next BIO. The removed BIO becomes a single BIO with no association with the original chain, it can thus be freed or be made part of a different chain.</p> <p><code>BIO_set_next()</code> replaces the existing next BIO in a chain with the BIO pointed to by <em>next</em>. The new chain may include some of the same BIOs from the old chain or it may be completely different.</p> <p> </p> <hr /> <h1><a name="notes">NOTES</a></h1> <p>The names of these functions are perhaps a little misleading. <code>BIO_push()</code> joins two BIO chains whereas <code>BIO_pop()</code> deletes a single BIO from a chain, the deleted BIO does not need to be at the end of a chain.</p> <p>The process of calling <code>BIO_push()</code> and <code>BIO_pop()</code> on a BIO may have additional consequences (a control call is made to the affected BIOs). Any effects will be noted in the descriptions of individual BIOs.</p> <p> </p> <hr /> <h1><a name="return_values">RETURN VALUES</a></h1> <p><code>BIO_push()</code> returns the head of the chain, which usually is <em>b</em>, or <em>next</em> if <em>b</em> is NULL.</p> <p><code>BIO_pop()</code> returns the next BIO in the chain, or NULL if there is no next BIO.</p> <p> </p> <hr /> <h1><a name="examples">EXAMPLES</a></h1> <p>For these examples suppose <em>md1</em> and <em>md2</em> are digest BIOs, <em>b64</em> is a base64 BIO and <em>f</em> is a file BIO.</p> <p>If the call:</p> <pre> BIO_push(b64, f);</pre> <p>is made then the new chain will be <em>b64-f</em>. After making the calls</p> <pre> BIO_push(md2, b64); BIO_push(md1, md2);</pre> <p>the new chain is <em>md1-md2-b64-f</em>. Data written to <em>md1</em> will be digested by <em>md1</em> and <em>md2</em>, base64 encoded, and finally written to <em>f</em>.</p> <p>It should be noted that reading causes data to pass in the reverse direction, that is data is read from <em>f</em>, base64 decoded, and digested by <em>md2</em> and then <em>md1</em>.</p> <p>The call:</p> <pre> BIO_pop(md2);</pre> <p>will return <em>b64</em> and the new chain will be <em>md1-b64-f</em>. Data can be written to and read from <em>md1</em> as before, except that <em>md2</em> will no more be applied.</p> <p> </p> <hr /> <h1><a name="see_also">SEE ALSO</a></h1> <p><a href="/man7/bio.html">the bio manpage</a></p> <p> </p> <hr /> <h1><a name="history">HISTORY</a></h1> <p>The <code>BIO_set_next()</code> function was added in OpenSSL 1.1.0.</p> <p> </p> <hr /> <h1><a name="copyright">COPYRIGHT</a></h1> <p>Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.</p> <p>Licensed under the OpenSSL license (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <a href="https://www.openssl.org/source/license.html">https://www.openssl.org/source/license.html</a>.</p> </body> </html>