summaryrefslogtreecommitdiff
path: root/static/openbsd/man3/BIO_set_callback.3
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:54:44 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:54:44 -0400
commita9157ce950dfe2fc30795d43b9d79b9d1bffc48b (patch)
tree9df484304b560466d145e662c1c254ff0e9ae0ba /static/openbsd/man3/BIO_set_callback.3
parent160aa82b2d39c46ad33723d7d909cb4972efbb03 (diff)
docs: Added All OpenBSD Manuals
Diffstat (limited to 'static/openbsd/man3/BIO_set_callback.3')
-rw-r--r--static/openbsd/man3/BIO_set_callback.3397
1 files changed, 397 insertions, 0 deletions
diff --git a/static/openbsd/man3/BIO_set_callback.3 b/static/openbsd/man3/BIO_set_callback.3
new file mode 100644
index 00000000..f3f40cba
--- /dev/null
+++ b/static/openbsd/man3/BIO_set_callback.3
@@ -0,0 +1,397 @@
+.\" $OpenBSD: BIO_set_callback.3,v 1.13 2025/06/08 22:40:29 schwarze Exp $
+.\" full merge up to: OpenSSL 24a535ea Sep 22 13:14:20 2020 +0100
+.\"
+.\" This file is a derived work.
+.\" The changes are covered by the following Copyright and license:
+.\"
+.\" Copyright (c) 2018, 2022 Ingo Schwarze <schwarze@openbsd.org>
+.\"
+.\" Permission to use, copy, modify, and distribute this software for any
+.\" purpose with or without fee is hereby granted, provided that the above
+.\" copyright notice and this permission notice appear in all copies.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.\" The original file was written by Dr. Stephen Henson <steve@openssl.org>.
+.\" Copyright (c) 2000, 2016, 2017 The OpenSSL Project. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\"
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\"
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in
+.\" the documentation and/or other materials provided with the
+.\" distribution.
+.\"
+.\" 3. All advertising materials mentioning features or use of this
+.\" software must display the following acknowledgment:
+.\" "This product includes software developed by the OpenSSL Project
+.\" for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+.\"
+.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+.\" endorse or promote products derived from this software without
+.\" prior written permission. For written permission, please contact
+.\" openssl-core@openssl.org.
+.\"
+.\" 5. Products derived from this software may not be called "OpenSSL"
+.\" nor may "OpenSSL" appear in their names without prior written
+.\" permission of the OpenSSL Project.
+.\"
+.\" 6. Redistributions of any form whatsoever must retain the following
+.\" acknowledgment:
+.\" "This product includes software developed by the OpenSSL Project
+.\" for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+.\" OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd $Mdocdate: June 8 2025 $
+.Dt BIO_SET_CALLBACK 3
+.Os
+.Sh NAME
+.Nm BIO_callback_fn_ex ,
+.Nm BIO_set_callback_ex ,
+.Nm BIO_get_callback_ex ,
+.Nm BIO_callback_fn ,
+.Nm BIO_set_callback ,
+.Nm BIO_get_callback ,
+.Nm BIO_set_callback_arg ,
+.Nm BIO_get_callback_arg ,
+.Nm BIO_debug_callback
+.\" The following three macros are intentionally undocumented because
+.\" they are unused and would only cause obfuscation if they were used.
+.\" .Nm BIO_CB_return
+.\" .Nm BIO_cb_pre
+.\" .Nm BIO_cb_post
+.Nd BIO callback functions
+.Sh SYNOPSIS
+.Lb libcrypto
+.In openssl/bio.h
+.Ft typedef long
+.Fo (*BIO_callback_fn_ex)
+.Fa "BIO *b"
+.Fa "int oper"
+.Fa "const char *argp"
+.Fa "size_t len"
+.Fa "int argi"
+.Fa "long argl"
+.Fa "int ret"
+.Fa "size_t *processed"
+.Fc
+.Ft void
+.Fo BIO_set_callback_ex
+.Fa "BIO *b"
+.Fa "BIO_callback_fn_ex cb_ex"
+.Fc
+.Ft BIO_callback_fn_ex
+.Fo BIO_get_callback_ex
+.Fa "const BIO *b"
+.Fc
+.Ft typedef long
+.Fo (*BIO_callback_fn)
+.Fa "BIO *b"
+.Fa "int oper"
+.Fa "const char *argp"
+.Fa "int argi"
+.Fa "long argl"
+.Fa "long ret"
+.Fc
+.Ft void
+.Fo BIO_set_callback
+.Fa "BIO *b"
+.Fa "BIO_callback_fn cb"
+.Fc
+.Ft BIO_callback_fn
+.Fo BIO_get_callback
+.Fa "BIO *b"
+.Fc
+.Ft void
+.Fo BIO_set_callback_arg
+.Fa "BIO *b"
+.Fa "char *pointer"
+.Fc
+.Ft char *
+.Fo BIO_get_callback_arg
+.Fa "const BIO *b"
+.Fc
+.Ft long
+.Fo BIO_debug_callback
+.Fa "BIO *bio"
+.Fa "int oper"
+.Fa "const char *argp"
+.Fa "int argi"
+.Fa "long argl"
+.Fa "long ret"
+.Fc
+.Sh DESCRIPTION
+.Fn BIO_set_callback_ex
+and
+.Fn BIO_get_callback_ex
+set and retrieve the BIO callback.
+The callback is called during most high-level BIO operations.
+It can be used for debugging purposes to trace operations on a BIO
+or to modify its operation.
+.Pp
+.Fn BIO_set_callback
+and
+.Fn BIO_get_callback
+are deprecated functions that set and retrieve the old-style BIO callback,
+which is only used if no new-style callback is set with
+.Fn BIO_set_callback_ex .
+.Pp
+.Fn BIO_set_callback_arg
+stores the
+.Fa pointer
+internally in
+.Fa b
+and
+.Fn BIO_get_callback_arg
+retrieves it from
+.Fa b .
+The name of these two functions is badly misleading: the
+.Fa pointer
+is never passed as an argument to any callback function.
+But of course, callback functions can call
+.Fn BIO_get_callback_arg
+and access the pointer, just like any other code can.
+.Pp
+.Fn BIO_debug_callback
+is a standard debugging callback which prints
+out information related to each BIO operation.
+If
+.Fn BIO_set_callback_arg
+was called with a
+.Pf non- Dv NULL
+argument, information is sent to the BIO pointed to by the
+.Fa pointer ;
+otherwise, standard error output is used.
+.Pp
+The arguments of the callback functions are as follows:
+.Bl -tag -width Ds
+.It Fa b
+The BIO the callback is attached to.
+.It Fa oper
+The operation being performed, which is one of
+.Dv BIO_CB_CTRL ,
+.Dv BIO_CB_FREE ,
+.Dv BIO_CB_GETS ,
+.Dv BIO_CB_PUTS ,
+.Dv BIO_CB_READ ,
+or
+.Dv BIO_CB_WRITE .
+For some operations, the callback is called twice,
+once before and once after the actual operation.
+The latter case has
+.Fa oper
+OR'ed with
+.Dv BIO_CB_RETURN .
+.It Fa argp , argi , argl
+The meaning of these three arguments depends on the value of
+.Fa oper ,
+that is on the operation being performed.
+.It Fa len
+The length of the data requested to be read or written.
+This is only useful if
+.Fa oper
+is
+.Dv BIO_CB_READ ,
+.Dv BIO_CB_WRITE ,
+or
+.Dv BIO_CB_GETS .
+.It Fa ret
+When
+.Fa oper
+does not include
+.Dv BIO_CB_RETURN ,
+i.e. when the callback is invoked before an operation,
+the value passed into the callback via
+.Fa ret
+is always 1.
+In this case, if the callback returns a negative value, the library
+aborts the requested operation and instead returns the negative
+return value from the callback to the application.
+If the callback returns a non-negative value, that return value is
+ignored by the library, and the operation is performed normally.
+.Pp
+When
+.Fa oper
+includes
+.Dv BIO_CB_RETURN ,
+i.e. when the callback is invoked after an operation,
+the value passed into the callback via
+.Fa ret
+is the return value that the operation would return to the application
+if no callback were present.
+When a callback is present, the operation only passes this value
+to the callback and instead of it returns the return value of the
+callback to the application.
+.It Fa processed
+The location pointed to is updated with the number of bytes
+actually read or written.
+Only used for
+.Dv BIO_CB_READ ,
+.Dv BIO_CB_WRITE ,
+.Dv BIO_CB_GETS ,
+and
+.Dv BIO_CB_PUTS .
+.El
+.Pp
+The callback should normally simply return
+.Fa ret
+when it has finished processing, unless it specifically wishes to
+abort the operation or to modify the value returned to the application.
+.Pp
+The callbacks are called as follows:
+.Bl -tag -width 1n
+.It \&In Fn BIO_free "BIO *b" :
+.Bd -literal
+before the free operation:
+cb_ex(b, BIO_CB_FREE, NULL, 0, 0, 0, 1, NULL)
+or cb(b, BIO_CB_FREE, NULL, 0, 0, 1)
+.Ed
+.It \&In Fn BIO_read "BIO *b" "void *out" "int outl" :
+.Bd -literal
+before the read operation:
+cb_ex(b, BIO_CB_READ, out, outl, 0, 0, 1, NULL)
+or cb(b, BIO_CB_READ, out, outl, 0, 1)
+
+after the read operation:
+cb_ex(b, BIO_CB_READ|BIO_CB_RETURN, out, outl, 0, 0, ret, &bytes)
+or cb(b, BIO_CB_READ|BIO_CB_RETURN, out, outl, 0, ret)
+.Ed
+.It \&In Fn BIO_write "BIO *b" "const void *in" "int inl" :
+.Bd -literal
+before the write operation:
+cb_ex(b, BIO_CB_WRITE, in, inl, 0, 0, 1, NULL)
+or cb(b, BIO_CB_WRITE, in, inl, 0, 1)
+
+after the write operation:
+cb_ex(b, BIO_CB_WRITE|BIO_CB_RETURN, in, inl, 0, 0, ret, &bytes)
+or cb(b, BIO_CB_WRITE|BIO_CB_RETURN, in, inl, 0, ret)
+.Ed
+.It \&In Fn BIO_gets "BIO *b" "char *out" "int outl" :
+.Bd -literal
+before the read operation:
+cb_ex(b, BIO_CB_GETS, out, outl, 0, 0, 1, NULL)
+or cb(b, BIO_CB_GETS, out, outl, 0, 1)
+
+after the read operation:
+cb_ex(b, BIO_CB_GETS|BIO_CB_RETURN, out, outl, 0, 0, ret, &bytes)
+or cb(b, BIO_CB_GETS|BIO_CB_RETURN, out, outl, 0, ret)
+.Ed
+.It \&In Fn BIO_puts "BIO *b" "const char *in" :
+.Bd -literal
+before the write operation:
+cb_ex(b, BIO_CB_PUTS, in, 0, 0, 0, 1, NULL)
+or cb(b, BIO_CB_PUTS, in, 0, 0, 1)
+
+after the write operation:
+cb_ex(b, BIO_CB_PUTS|BIO_CB_RETURN, in, 0, 0, 0, ret, &bytes)
+or cb(b, BIO_CB_PUTS|BIO_CB_RETURN, in, 0, 0, ret)
+.Ed
+.It \&In Fn BIO_ctrl "BIO *b" "int cmd" "long larg" "void *parg" :
+.Bd -literal
+before the control operation:
+cb_ex(b, BIO_CB_CTRL, parg, 0, cmd, larg, 1, NULL)
+or cb(b, BIO_CB_CTRL, parg, cmd, larg, 1)
+
+after the control operation:
+cb_ex(b, BIO_CB_CTRL|BIO_CB_RETURN, parg, 0, cmd, larg, ret, NULL)
+or cb(b, BIO_CB_CTRL|BIO_CB_RETURN, parg, cmd, larg, ret)
+.Ed
+.It \&In Fn BIO_callback_ctrl "BIO *b" "int cmd" "BIO_info_cb *fp" :
+.Bd -literal
+before the control operation:
+cb_ex(b, BIO_CB_CTRL, fp, 0, cmd, 0, 1, NULL)
+or cb(b, BIO_CB_CTRL, fp, cmd, 0, 1)
+
+after the control operation:
+cb_ex(b, BIO_CB_CTRL|BIO_CB_RETURN, fp, 0, cmd, 0, ret, NULL)
+or cb(b, BIO_CB_CTRL|BIO_CB_RETURN, fp, cmd, 0, ret)
+.Ed
+.El
+.Sh RETURN VALUES
+.Fn BIO_get_callback_ex
+returns a pointer to the function
+.Fa cb_ex
+previously installed with
+.Fn BIO_set_callback_cb ,
+or
+.Dv NULL
+if no such callback was installed.
+.Pp
+.Fn BIO_get_callback
+returns a pointer to the function
+.Fa cb
+previously installed with
+.Fn BIO_set_callback ,
+or
+.Dv NULL
+if no such callback was installed.
+.Pp
+.Fn BIO_get_callback_arg
+returns the
+.Fa pointer
+previously set with
+.Fn BIO_set_callback_arg ,
+or
+.Dv NULL
+if no such pointer was set.
+.Pp
+.Fn BIO_debug_callback
+returns
+.Fa ret
+if the bit
+.Dv BIO_CB_RETURN
+is set in
+.Fa cmd ,
+or 1 otherwise.
+.Sh EXAMPLES
+The
+.Fn BIO_debug_callback
+function is a good example.
+Its source is in the file
+.Pa crypto/bio/bio_cb.c .
+.Sh SEE ALSO
+.Xr BIO_new 3
+.Sh HISTORY
+.Fn BIO_set_callback ,
+.Fn BIO_get_callback ,
+.Fn BIO_set_callback_arg ,
+and
+.Fn BIO_debug_callback
+first appeared in SSLeay 0.6.0.
+.Fn BIO_get_callback_arg
+first appeared in SSLeay 0.8.0.
+These functions have been available since
+.Ox 2.4 .
+.Pp
+.Fn BIO_callback_fn
+first appeared in OpenSSL 1.1.0.
+.Fn BIO_callback_fn_ex ,
+.Fn BIO_set_callback_ex ,
+and
+.Fn BIO_get_callback_ex
+first appeared in OpenSSL 1.1.1.
+These functions have been available since
+.Ox 7.1 .