xref: /freebsd/crypto/openssl/include/openssl/bio.h.in (revision e7be843b4a162e68651d3911f0357ed464915629)
1/*
2 * {- join("\n * ", @autowarntext) -}
3 *
4 * Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved.
5 *
6 * Licensed under the Apache License 2.0 (the "License").  You may not use
7 * this file except in compliance with the License.  You can obtain a copy
8 * in the file LICENSE in the source distribution or at
9 * https://www.openssl.org/source/license.html
10 */
11{-
12use OpenSSL::stackhash qw(generate_stack_macros);
13-}
14
15#ifndef OPENSSL_BIO_H
16# define OPENSSL_BIO_H
17# pragma once
18
19# include <openssl/macros.h>
20# ifndef OPENSSL_NO_DEPRECATED_3_0
21#  define HEADER_BIO_H
22# endif
23
24# include <openssl/e_os2.h>
25
26# ifndef OPENSSL_NO_STDIO
27#  include <stdio.h>
28# endif
29# include <stdarg.h>
30
31# include <openssl/crypto.h>
32# include <openssl/bioerr.h>
33# include <openssl/core.h>
34
35#ifdef  __cplusplus
36extern "C" {
37#endif
38
39/* There are the classes of BIOs */
40# define BIO_TYPE_DESCRIPTOR     0x0100 /* socket, fd, connect or accept */
41# define BIO_TYPE_FILTER         0x0200
42# define BIO_TYPE_SOURCE_SINK    0x0400
43
44/* These are the 'types' of BIOs */
45# define BIO_TYPE_NONE             0
46# define BIO_TYPE_MEM            ( 1|BIO_TYPE_SOURCE_SINK)
47# define BIO_TYPE_FILE           ( 2|BIO_TYPE_SOURCE_SINK)
48
49# define BIO_TYPE_FD             ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR)
50# define BIO_TYPE_SOCKET         ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR)
51# define BIO_TYPE_NULL           ( 6|BIO_TYPE_SOURCE_SINK)
52# define BIO_TYPE_SSL            ( 7|BIO_TYPE_FILTER)
53# define BIO_TYPE_MD             ( 8|BIO_TYPE_FILTER)
54# define BIO_TYPE_BUFFER         ( 9|BIO_TYPE_FILTER)
55# define BIO_TYPE_CIPHER         (10|BIO_TYPE_FILTER)
56# define BIO_TYPE_BASE64         (11|BIO_TYPE_FILTER)
57# define BIO_TYPE_CONNECT        (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR)
58# define BIO_TYPE_ACCEPT         (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR)
59
60# define BIO_TYPE_NBIO_TEST      (16|BIO_TYPE_FILTER)/* server proxy BIO */
61# define BIO_TYPE_NULL_FILTER    (17|BIO_TYPE_FILTER)
62# define BIO_TYPE_BIO            (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */
63# define BIO_TYPE_LINEBUFFER     (20|BIO_TYPE_FILTER)
64# define BIO_TYPE_DGRAM          (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR)
65# define BIO_TYPE_ASN1           (22|BIO_TYPE_FILTER)
66# define BIO_TYPE_COMP           (23|BIO_TYPE_FILTER)
67# ifndef OPENSSL_NO_SCTP
68#  define BIO_TYPE_DGRAM_SCTP    (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR)
69# endif
70# define BIO_TYPE_CORE_TO_PROV   (25|BIO_TYPE_SOURCE_SINK)
71# define BIO_TYPE_DGRAM_PAIR     (26|BIO_TYPE_SOURCE_SINK)
72# define BIO_TYPE_DGRAM_MEM      (27|BIO_TYPE_SOURCE_SINK)
73
74/* Custom type starting index returned by BIO_get_new_index() */
75#define BIO_TYPE_START           128
76/* Custom type maximum index that can be returned by BIO_get_new_index() */
77#define BIO_TYPE_MASK            0xFF
78
79/*
80 * BIO_FILENAME_READ|BIO_CLOSE to open or close on free.
81 * BIO_set_fp(in,stdin,BIO_NOCLOSE);
82 */
83# define BIO_NOCLOSE             0x00
84# define BIO_CLOSE               0x01
85
86/*
87 * These are used in the following macros and are passed to BIO_ctrl()
88 */
89# define BIO_CTRL_RESET          1/* opt - rewind/zero etc */
90# define BIO_CTRL_EOF            2/* opt - are we at the eof */
91# define BIO_CTRL_INFO           3/* opt - extra tit-bits */
92# define BIO_CTRL_SET            4/* man - set the 'IO' type */
93# define BIO_CTRL_GET            5/* man - get the 'IO' type */
94# define BIO_CTRL_PUSH           6/* opt - internal, used to signify change */
95# define BIO_CTRL_POP            7/* opt - internal, used to signify change */
96# define BIO_CTRL_GET_CLOSE      8/* man - set the 'close' on free */
97# define BIO_CTRL_SET_CLOSE      9/* man - set the 'close' on free */
98# define BIO_CTRL_PENDING        10/* opt - is their more data buffered */
99# define BIO_CTRL_FLUSH          11/* opt - 'flush' buffered output */
100# define BIO_CTRL_DUP            12/* man - extra stuff for 'duped' BIO */
101# define BIO_CTRL_WPENDING       13/* opt - number of bytes still to write */
102# define BIO_CTRL_SET_CALLBACK   14/* opt - set callback function */
103# define BIO_CTRL_GET_CALLBACK   15/* opt - set callback function */
104
105# define BIO_CTRL_PEEK           29/* BIO_f_buffer special */
106# define BIO_CTRL_SET_FILENAME   30/* BIO_s_file special */
107
108/* dgram BIO stuff */
109# define BIO_CTRL_DGRAM_CONNECT       31/* BIO dgram special */
110# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected
111                                         * socket to be passed in */
112# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */
113# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */
114# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */
115# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */
116
117# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */
118# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation timed out */
119
120/* #ifdef IP_MTU_DISCOVER */
121# define BIO_CTRL_DGRAM_MTU_DISCOVER       39/* set DF bit on egress packets */
122/* #endif */
123
124# define BIO_CTRL_DGRAM_QUERY_MTU          40/* as kernel for current MTU */
125# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU   47
126# define BIO_CTRL_DGRAM_GET_MTU            41/* get cached value for MTU */
127# define BIO_CTRL_DGRAM_SET_MTU            42/* set cached value for MTU.
128                                              * want to use this if asking
129                                              * the kernel fails */
130
131# define BIO_CTRL_DGRAM_MTU_EXCEEDED       43/* check whether the MTU was
132                                              * exceed in the previous write
133                                              * operation */
134
135# define BIO_CTRL_DGRAM_GET_PEER           46
136# define BIO_CTRL_DGRAM_SET_PEER           44/* Destination for the data */
137
138# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT   45/* Next DTLS handshake timeout
139                                              * to adjust socket timeouts */
140# define BIO_CTRL_DGRAM_SET_DONT_FRAG      48
141
142# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD   49
143
144/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */
145#  define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE    50
146# ifndef OPENSSL_NO_SCTP
147/* SCTP stuff */
148#  define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY                51
149#  define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY               52
150#  define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD               53
151#  define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO         60
152#  define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO         61
153#  define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO         62
154#  define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO         63
155#  define BIO_CTRL_DGRAM_SCTP_GET_PRINFO                  64
156#  define BIO_CTRL_DGRAM_SCTP_SET_PRINFO                  65
157#  define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN               70
158# endif
159
160# define BIO_CTRL_DGRAM_SET_PEEK_MODE      71
161
162/*
163 * internal BIO:
164 * # define BIO_CTRL_SET_KTLS_SEND                 72
165 * # define BIO_CTRL_SET_KTLS_SEND_CTRL_MSG        74
166 * # define BIO_CTRL_CLEAR_KTLS_CTRL_MSG           75
167 */
168
169# define BIO_CTRL_GET_KTLS_SEND                 73
170# define BIO_CTRL_GET_KTLS_RECV                 76
171
172# define BIO_CTRL_DGRAM_SCTP_WAIT_FOR_DRY       77
173# define BIO_CTRL_DGRAM_SCTP_MSG_WAITING        78
174
175/* BIO_f_prefix controls */
176# define BIO_CTRL_SET_PREFIX                    79
177# define BIO_CTRL_SET_INDENT                    80
178# define BIO_CTRL_GET_INDENT                    81
179
180# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP      82
181# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE   83
182# define BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE   84
183# define BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS      85
184# define BIO_CTRL_DGRAM_GET_CAPS                86
185# define BIO_CTRL_DGRAM_SET_CAPS                87
186# define BIO_CTRL_DGRAM_GET_NO_TRUNC            88
187# define BIO_CTRL_DGRAM_SET_NO_TRUNC            89
188
189/*
190 * internal BIO:
191 * # define BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE 90
192 */
193
194# define BIO_CTRL_GET_RPOLL_DESCRIPTOR          91
195# define BIO_CTRL_GET_WPOLL_DESCRIPTOR          92
196# define BIO_CTRL_DGRAM_DETECT_PEER_ADDR        93
197# define BIO_CTRL_DGRAM_SET0_LOCAL_ADDR         94
198
199# define BIO_DGRAM_CAP_NONE                 0U
200# define BIO_DGRAM_CAP_HANDLES_SRC_ADDR     (1U << 0)
201# define BIO_DGRAM_CAP_HANDLES_DST_ADDR     (1U << 1)
202# define BIO_DGRAM_CAP_PROVIDES_SRC_ADDR    (1U << 2)
203# define BIO_DGRAM_CAP_PROVIDES_DST_ADDR    (1U << 3)
204
205# ifndef OPENSSL_NO_KTLS
206#  define BIO_get_ktls_send(b)         \
207     (BIO_ctrl(b, BIO_CTRL_GET_KTLS_SEND, 0, NULL) > 0)
208#  define BIO_get_ktls_recv(b)         \
209     (BIO_ctrl(b, BIO_CTRL_GET_KTLS_RECV, 0, NULL) > 0)
210# else
211#  define BIO_get_ktls_send(b)  (0)
212#  define BIO_get_ktls_recv(b)  (0)
213# endif
214
215/* modifiers */
216# define BIO_FP_READ             0x02
217# define BIO_FP_WRITE            0x04
218# define BIO_FP_APPEND           0x08
219# define BIO_FP_TEXT             0x10
220
221# define BIO_FLAGS_READ          0x01
222# define BIO_FLAGS_WRITE         0x02
223# define BIO_FLAGS_IO_SPECIAL    0x04
224# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)
225# define BIO_FLAGS_SHOULD_RETRY  0x08
226# ifndef OPENSSL_NO_DEPRECATED_3_0
227/* This #define was replaced by an internal constant and should not be used. */
228#  define BIO_FLAGS_UPLINK       0
229# endif
230
231# define BIO_FLAGS_BASE64_NO_NL  0x100
232
233/*
234 * This is used with memory BIOs:
235 * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way;
236 * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset.
237 */
238# define BIO_FLAGS_MEM_RDONLY    0x200
239# define BIO_FLAGS_NONCLEAR_RST  0x400
240# define BIO_FLAGS_IN_EOF        0x800
241
242/* the BIO FLAGS values 0x1000 to 0x8000 are reserved for internal KTLS flags */
243
244typedef union bio_addr_st BIO_ADDR;
245typedef struct bio_addrinfo_st BIO_ADDRINFO;
246
247int BIO_get_new_index(void);
248void BIO_set_flags(BIO *b, int flags);
249int BIO_test_flags(const BIO *b, int flags);
250void BIO_clear_flags(BIO *b, int flags);
251
252# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0))
253# define BIO_set_retry_special(b) \
254                BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY))
255# define BIO_set_retry_read(b) \
256                BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
257# define BIO_set_retry_write(b) \
258                BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))
259
260/* These are normally used internally in BIOs */
261# define BIO_clear_retry_flags(b) \
262                BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
263# define BIO_get_retry_flags(b) \
264                BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
265
266/* These should be used by the application to tell why we should retry */
267# define BIO_should_read(a)              BIO_test_flags(a, BIO_FLAGS_READ)
268# define BIO_should_write(a)             BIO_test_flags(a, BIO_FLAGS_WRITE)
269# define BIO_should_io_special(a)        BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL)
270# define BIO_retry_type(a)               BIO_test_flags(a, BIO_FLAGS_RWS)
271# define BIO_should_retry(a)             BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY)
272
273/*
274 * The next three are used in conjunction with the BIO_should_io_special()
275 * condition.  After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int
276 * *reason); will walk the BIO stack and return the 'reason' for the special
277 * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return
278 * the code.
279 */
280/*
281 * Returned from the SSL bio when the certificate retrieval code had an error
282 */
283# define BIO_RR_SSL_X509_LOOKUP          0x01
284/* Returned from the connect BIO when a connect would have blocked */
285# define BIO_RR_CONNECT                  0x02
286/* Returned from the accept BIO when an accept would have blocked */
287# define BIO_RR_ACCEPT                   0x03
288
289/* These are passed by the BIO callback */
290# define BIO_CB_FREE        0x01
291# define BIO_CB_READ        0x02
292# define BIO_CB_WRITE       0x03
293# define BIO_CB_PUTS        0x04
294# define BIO_CB_GETS        0x05
295# define BIO_CB_CTRL        0x06
296# define BIO_CB_RECVMMSG    0x07
297# define BIO_CB_SENDMMSG    0x08
298
299/*
300 * The callback is called before and after the underling operation, The
301 * BIO_CB_RETURN flag indicates if it is after the call
302 */
303# define BIO_CB_RETURN   0x80
304# define BIO_CB_return(a) ((a)|BIO_CB_RETURN)
305# define BIO_cb_pre(a)   (!((a)&BIO_CB_RETURN))
306# define BIO_cb_post(a)  ((a)&BIO_CB_RETURN)
307
308# ifndef OPENSSL_NO_DEPRECATED_3_0
309typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi,
310                                long argl, long ret);
311OSSL_DEPRECATEDIN_3_0 BIO_callback_fn BIO_get_callback(const BIO *b);
312OSSL_DEPRECATEDIN_3_0 void BIO_set_callback(BIO *b, BIO_callback_fn callback);
313OSSL_DEPRECATEDIN_3_0 long BIO_debug_callback(BIO *bio, int cmd,
314                                               const char *argp, int argi,
315                                               long argl, long ret);
316# endif
317
318typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp,
319                                   size_t len, int argi,
320                                   long argl, int ret, size_t *processed);
321BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b);
322void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback);
323long BIO_debug_callback_ex(BIO *bio, int oper, const char *argp, size_t len,
324                           int argi, long argl, int ret, size_t *processed);
325
326char *BIO_get_callback_arg(const BIO *b);
327void BIO_set_callback_arg(BIO *b, char *arg);
328
329typedef struct bio_method_st BIO_METHOD;
330
331const char *BIO_method_name(const BIO *b);
332int BIO_method_type(const BIO *b);
333
334typedef int BIO_info_cb(BIO *, int, int);
335typedef BIO_info_cb bio_info_cb;  /* backward compatibility */
336
337{-
338    generate_stack_macros("BIO");
339-}
340
341
342/* Prefix and suffix callback in ASN1 BIO */
343typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen,
344                          void *parg);
345
346typedef void (*BIO_dgram_sctp_notification_handler_fn) (BIO *b,
347                                                        void *context,
348                                                        void *buf);
349# ifndef OPENSSL_NO_SCTP
350/* SCTP parameter structs */
351struct bio_dgram_sctp_sndinfo {
352    uint16_t snd_sid;
353    uint16_t snd_flags;
354    uint32_t snd_ppid;
355    uint32_t snd_context;
356};
357
358struct bio_dgram_sctp_rcvinfo {
359    uint16_t rcv_sid;
360    uint16_t rcv_ssn;
361    uint16_t rcv_flags;
362    uint32_t rcv_ppid;
363    uint32_t rcv_tsn;
364    uint32_t rcv_cumtsn;
365    uint32_t rcv_context;
366};
367
368struct bio_dgram_sctp_prinfo {
369    uint16_t pr_policy;
370    uint32_t pr_value;
371};
372# endif
373
374/* BIO_sendmmsg/BIO_recvmmsg-related definitions */
375typedef struct bio_msg_st {
376    void *data;
377    size_t data_len;
378    BIO_ADDR *peer, *local;
379    uint64_t flags;
380} BIO_MSG;
381
382typedef struct bio_mmsg_cb_args_st {
383    BIO_MSG    *msg;
384    size_t      stride, num_msg;
385    uint64_t    flags;
386    size_t     *msgs_processed;
387} BIO_MMSG_CB_ARGS;
388
389#define BIO_POLL_DESCRIPTOR_TYPE_NONE       0
390#define BIO_POLL_DESCRIPTOR_TYPE_SOCK_FD    1
391#define BIO_POLL_DESCRIPTOR_TYPE_SSL        2
392#define BIO_POLL_DESCRIPTOR_CUSTOM_START    8192
393
394typedef struct bio_poll_descriptor_st {
395    uint32_t type;
396    union {
397        int         fd;
398        void        *custom;
399        uintptr_t   custom_ui;
400        SSL         *ssl;
401    } value;
402} BIO_POLL_DESCRIPTOR;
403
404/*
405 * #define BIO_CONN_get_param_hostname BIO_ctrl
406 */
407
408# define BIO_C_SET_CONNECT                       100
409# define BIO_C_DO_STATE_MACHINE                  101
410# define BIO_C_SET_NBIO                          102
411/* # define BIO_C_SET_PROXY_PARAM                   103 */
412# define BIO_C_SET_FD                            104
413# define BIO_C_GET_FD                            105
414# define BIO_C_SET_FILE_PTR                      106
415# define BIO_C_GET_FILE_PTR                      107
416# define BIO_C_SET_FILENAME                      108
417# define BIO_C_SET_SSL                           109
418# define BIO_C_GET_SSL                           110
419# define BIO_C_SET_MD                            111
420# define BIO_C_GET_MD                            112
421# define BIO_C_GET_CIPHER_STATUS                 113
422# define BIO_C_SET_BUF_MEM                       114
423# define BIO_C_GET_BUF_MEM_PTR                   115
424# define BIO_C_GET_BUFF_NUM_LINES                116
425# define BIO_C_SET_BUFF_SIZE                     117
426# define BIO_C_SET_ACCEPT                        118
427# define BIO_C_SSL_MODE                          119
428# define BIO_C_GET_MD_CTX                        120
429/* # define BIO_C_GET_PROXY_PARAM                   121 */
430# define BIO_C_SET_BUFF_READ_DATA                122/* data to read first */
431# define BIO_C_GET_CONNECT                       123
432# define BIO_C_GET_ACCEPT                        124
433# define BIO_C_SET_SSL_RENEGOTIATE_BYTES         125
434# define BIO_C_GET_SSL_NUM_RENEGOTIATES          126
435# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT       127
436# define BIO_C_FILE_SEEK                         128
437# define BIO_C_GET_CIPHER_CTX                    129
438# define BIO_C_SET_BUF_MEM_EOF_RETURN            130/* return end of input
439                                                     * value */
440# define BIO_C_SET_BIND_MODE                     131
441# define BIO_C_GET_BIND_MODE                     132
442# define BIO_C_FILE_TELL                         133
443# define BIO_C_GET_SOCKS                         134
444# define BIO_C_SET_SOCKS                         135
445
446# define BIO_C_SET_WRITE_BUF_SIZE                136/* for BIO_s_bio */
447# define BIO_C_GET_WRITE_BUF_SIZE                137
448# define BIO_C_MAKE_BIO_PAIR                     138
449# define BIO_C_DESTROY_BIO_PAIR                  139
450# define BIO_C_GET_WRITE_GUARANTEE               140
451# define BIO_C_GET_READ_REQUEST                  141
452# define BIO_C_SHUTDOWN_WR                       142
453# define BIO_C_NREAD0                            143
454# define BIO_C_NREAD                             144
455# define BIO_C_NWRITE0                           145
456# define BIO_C_NWRITE                            146
457# define BIO_C_RESET_READ_REQUEST                147
458# define BIO_C_SET_MD_CTX                        148
459
460# define BIO_C_SET_PREFIX                        149
461# define BIO_C_GET_PREFIX                        150
462# define BIO_C_SET_SUFFIX                        151
463# define BIO_C_GET_SUFFIX                        152
464
465# define BIO_C_SET_EX_ARG                        153
466# define BIO_C_GET_EX_ARG                        154
467
468# define BIO_C_SET_CONNECT_MODE                  155
469
470# define BIO_C_SET_TFO                           156 /* like BIO_C_SET_NBIO */
471
472# define BIO_C_SET_SOCK_TYPE                     157
473# define BIO_C_GET_SOCK_TYPE                     158
474# define BIO_C_GET_DGRAM_BIO                     159
475
476# define BIO_set_app_data(s,arg)         BIO_set_ex_data(s,0,arg)
477# define BIO_get_app_data(s)             BIO_get_ex_data(s,0)
478
479# define BIO_set_nbio(b,n)               BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL)
480# define BIO_set_tfo(b,n)                BIO_ctrl(b,BIO_C_SET_TFO,(n),NULL)
481
482# ifndef OPENSSL_NO_SOCK
483/* IP families we support, for BIO_s_connect() and BIO_s_accept() */
484/* Note: the underlying operating system may not support some of them */
485#  define BIO_FAMILY_IPV4                         4
486#  define BIO_FAMILY_IPV6                         6
487#  define BIO_FAMILY_IPANY                        256
488
489/* BIO_s_connect() */
490#  define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \
491                                                 (char *)(name))
492#  define BIO_set_conn_port(b,port)     BIO_ctrl(b,BIO_C_SET_CONNECT,1, \
493                                                 (char *)(port))
494#  define BIO_set_conn_address(b,addr)  BIO_ctrl(b,BIO_C_SET_CONNECT,2, \
495                                                 (char *)(addr))
496#  define BIO_set_conn_ip_family(b,f)   BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f)
497#  define BIO_get_conn_hostname(b)      ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0))
498#  define BIO_get_conn_port(b)          ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1))
499#  define BIO_get_conn_address(b)       ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2))
500#  define BIO_get_conn_ip_family(b)     BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL)
501#  define BIO_get_conn_mode(b)          BIO_ctrl(b,BIO_C_GET_CONNECT,4,NULL)
502#  define BIO_set_conn_mode(b,n)        BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL)
503#  define BIO_set_sock_type(b,t)        BIO_ctrl(b,BIO_C_SET_SOCK_TYPE,(t),NULL)
504#  define BIO_get_sock_type(b)          BIO_ctrl(b,BIO_C_GET_SOCK_TYPE,0,NULL)
505#  define BIO_get0_dgram_bio(b, p)      BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p))
506
507/* BIO_s_accept() */
508#  define BIO_set_accept_name(b,name)   BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \
509                                                 (char *)(name))
510#  define BIO_set_accept_port(b,port)   BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \
511                                                 (char *)(port))
512#  define BIO_get_accept_name(b)        ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0))
513#  define BIO_get_accept_port(b)        ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1))
514#  define BIO_get_peer_name(b)          ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2))
515#  define BIO_get_peer_port(b)          ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3))
516/* #define BIO_set_nbio(b,n)    BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */
517#  define BIO_set_nbio_accept(b,n)      BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL)
518#  define BIO_set_accept_bios(b,bio)    BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \
519                                                 (char *)(bio))
520#  define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f)
521#  define BIO_get_accept_ip_family(b)   BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL)
522#  define BIO_set_tfo_accept(b,n)       BIO_ctrl(b,BIO_C_SET_ACCEPT,5,(n)?(void *)"a":NULL)
523
524/* Aliases kept for backward compatibility */
525#  define BIO_BIND_NORMAL                 0
526#  define BIO_BIND_REUSEADDR              BIO_SOCK_REUSEADDR
527#  define BIO_BIND_REUSEADDR_IF_UNUSED    BIO_SOCK_REUSEADDR
528#  define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL)
529#  define BIO_get_bind_mode(b)    BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL)
530# endif /* OPENSSL_NO_SOCK */
531
532# define BIO_do_connect(b)       BIO_do_handshake(b)
533# define BIO_do_accept(b)        BIO_do_handshake(b)
534
535# define BIO_do_handshake(b)     BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)
536
537/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */
538# define BIO_set_fd(b,fd,c)      BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)
539# define BIO_get_fd(b,c)         BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c))
540
541/* BIO_s_file() */
542# define BIO_set_fp(b,fp,c)      BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp))
543# define BIO_get_fp(b,fpp)       BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp))
544
545/* BIO_s_fd() and BIO_s_file() */
546# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL)
547# define BIO_tell(b)     (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL)
548
549/*
550 * name is cast to lose const, but might be better to route through a
551 * function so we can do it safely
552 */
553# ifdef CONST_STRICT
554/*
555 * If you are wondering why this isn't defined, its because CONST_STRICT is
556 * purely a compile-time kludge to allow const to be checked.
557 */
558int BIO_read_filename(BIO *b, const char *name);
559# else
560#  define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \
561                BIO_CLOSE|BIO_FP_READ,(char *)(name))
562# endif
563# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \
564                BIO_CLOSE|BIO_FP_WRITE,name)
565# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \
566                BIO_CLOSE|BIO_FP_APPEND,name)
567# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \
568                BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name)
569
570/*
571 * WARNING WARNING, this ups the reference count on the read bio of the SSL
572 * structure.  This is because the ssl read BIO is now pointed to by the
573 * next_bio field in the bio.  So when you free the BIO, make sure you are
574 * doing a BIO_free_all() to catch the underlying BIO.
575 */
576# define BIO_set_ssl(b,ssl,c)    BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl))
577# define BIO_get_ssl(b,sslp)     BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp))
578# define BIO_set_ssl_mode(b,client)      BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL)
579# define BIO_set_ssl_renegotiate_bytes(b,num) \
580        BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL)
581# define BIO_get_num_renegotiates(b) \
582        BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL)
583# define BIO_set_ssl_renegotiate_timeout(b,seconds) \
584        BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL)
585
586/* defined in evp.h */
587/* #define BIO_set_md(b,md)     BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */
588
589# define BIO_get_mem_data(b,pp)  BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp))
590# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm))
591# define BIO_get_mem_ptr(b,pp)   BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \
592                                          (char *)(pp))
593# define BIO_set_mem_eof_return(b,v) \
594                                BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL)
595
596/* For the BIO_f_buffer() type */
597# define BIO_get_buffer_num_lines(b)     BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL)
598# define BIO_set_buffer_size(b,size)     BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL)
599# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0)
600# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1)
601# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf)
602
603/* Don't use the next one unless you know what you are doing :-) */
604# define BIO_dup_state(b,ret)    BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret))
605
606# define BIO_reset(b)            (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL)
607# define BIO_eof(b)              (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL)
608# define BIO_set_close(b,c)      (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL)
609# define BIO_get_close(b)        (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL)
610# define BIO_pending(b)          (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)
611# define BIO_wpending(b)         (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL)
612/* ...pending macros have inappropriate return type */
613size_t BIO_ctrl_pending(BIO *b);
614size_t BIO_ctrl_wpending(BIO *b);
615# define BIO_flush(b)            (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL)
616# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \
617                                                   cbp)
618# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb)
619
620/* For the BIO_f_buffer() type */
621# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL)
622# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s))
623
624/* For BIO_s_bio() */
625# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL)
626# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL)
627# define BIO_make_bio_pair(b1,b2)   (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2)
628# define BIO_destroy_bio_pair(b)    (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL)
629# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL)
630/* macros with inappropriate type -- but ...pending macros use int too: */
631# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL)
632# define BIO_get_read_request(b)    (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL)
633size_t BIO_ctrl_get_write_guarantee(BIO *b);
634size_t BIO_ctrl_get_read_request(BIO *b);
635int BIO_ctrl_reset_read_request(BIO *b);
636
637/* ctrl macros for dgram */
638# define BIO_ctrl_dgram_connect(b,peer)  \
639                     (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer))
640# define BIO_ctrl_set_connected(b,peer) \
641         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer))
642# define BIO_dgram_recv_timedout(b) \
643         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL)
644# define BIO_dgram_send_timedout(b) \
645         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL)
646# define BIO_dgram_get_peer(b,peer) \
647         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer))
648# define BIO_dgram_set_peer(b,peer) \
649         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer))
650# define BIO_dgram_detect_peer_addr(b,peer) \
651         (int)BIO_ctrl(b, BIO_CTRL_DGRAM_DETECT_PEER_ADDR, 0, (char *)(peer))
652# define BIO_dgram_get_mtu_overhead(b) \
653         (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL)
654# define BIO_dgram_get_local_addr_cap(b) \
655         (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP, 0, NULL)
656# define BIO_dgram_get_local_addr_enable(b, penable) \
657         (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE, 0, (char *)(penable))
658# define BIO_dgram_set_local_addr_enable(b, enable) \
659         (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE, (enable), NULL)
660# define BIO_dgram_get_effective_caps(b) \
661         (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS, 0, NULL)
662# define BIO_dgram_get_caps(b) \
663         (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_CAPS, 0, NULL)
664# define BIO_dgram_set_caps(b, caps) \
665         (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_CAPS, (long)(caps), NULL)
666# define BIO_dgram_get_no_trunc(b) \
667         (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_NO_TRUNC, 0, NULL)
668# define BIO_dgram_set_no_trunc(b, enable) \
669         (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_NO_TRUNC, (enable), NULL)
670# define BIO_dgram_get_mtu(b) \
671         (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU, 0, NULL)
672# define BIO_dgram_set_mtu(b, mtu) \
673         (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_MTU, (mtu), NULL)
674# define BIO_dgram_set0_local_addr(b, addr) \
675         (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET0_LOCAL_ADDR, 0, (addr))
676
677/* ctrl macros for BIO_f_prefix */
678# define BIO_set_prefix(b,p) BIO_ctrl((b), BIO_CTRL_SET_PREFIX, 0, (void *)(p))
679# define BIO_set_indent(b,i) BIO_ctrl((b), BIO_CTRL_SET_INDENT, (i), NULL)
680# define BIO_get_indent(b) BIO_ctrl((b), BIO_CTRL_GET_INDENT, 0, NULL)
681
682#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \
683    CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef)
684int BIO_set_ex_data(BIO *bio, int idx, void *data);
685void *BIO_get_ex_data(const BIO *bio, int idx);
686uint64_t BIO_number_read(BIO *bio);
687uint64_t BIO_number_written(BIO *bio);
688
689/* For BIO_f_asn1() */
690int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix,
691                        asn1_ps_func *prefix_free);
692int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix,
693                        asn1_ps_func **pprefix_free);
694int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix,
695                        asn1_ps_func *suffix_free);
696int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix,
697                        asn1_ps_func **psuffix_free);
698
699const BIO_METHOD *BIO_s_file(void);
700BIO *BIO_new_file(const char *filename, const char *mode);
701BIO *BIO_new_from_core_bio(OSSL_LIB_CTX *libctx, OSSL_CORE_BIO *corebio);
702# ifndef OPENSSL_NO_STDIO
703BIO *BIO_new_fp(FILE *stream, int close_flag);
704# endif
705BIO *BIO_new_ex(OSSL_LIB_CTX *libctx, const BIO_METHOD *method);
706BIO *BIO_new(const BIO_METHOD *type);
707int BIO_free(BIO *a);
708void BIO_set_data(BIO *a, void *ptr);
709void *BIO_get_data(BIO *a);
710void BIO_set_init(BIO *a, int init);
711int BIO_get_init(BIO *a);
712void BIO_set_shutdown(BIO *a, int shut);
713int BIO_get_shutdown(BIO *a);
714void BIO_vfree(BIO *a);
715int BIO_up_ref(BIO *a);
716int BIO_read(BIO *b, void *data, int dlen);
717int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes);
718__owur int BIO_recvmmsg(BIO *b, BIO_MSG *msg,
719                        size_t stride, size_t num_msg, uint64_t flags,
720                        size_t *msgs_processed);
721int BIO_gets(BIO *bp, char *buf, int size);
722int BIO_get_line(BIO *bio, char *buf, int size);
723int BIO_write(BIO *b, const void *data, int dlen);
724int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written);
725__owur int BIO_sendmmsg(BIO *b, BIO_MSG *msg,
726                        size_t stride, size_t num_msg, uint64_t flags,
727                        size_t *msgs_processed);
728__owur int BIO_get_rpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc);
729__owur int BIO_get_wpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc);
730int BIO_puts(BIO *bp, const char *buf);
731int BIO_indent(BIO *b, int indent, int max);
732long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg);
733long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp);
734void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg);
735long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg);
736BIO *BIO_push(BIO *b, BIO *append);
737BIO *BIO_pop(BIO *b);
738void BIO_free_all(BIO *a);
739BIO *BIO_find_type(BIO *b, int bio_type);
740BIO *BIO_next(BIO *b);
741void BIO_set_next(BIO *b, BIO *next);
742BIO *BIO_get_retry_BIO(BIO *bio, int *reason);
743int BIO_get_retry_reason(BIO *bio);
744void BIO_set_retry_reason(BIO *bio, int reason);
745BIO *BIO_dup_chain(BIO *in);
746
747int BIO_nread0(BIO *bio, char **buf);
748int BIO_nread(BIO *bio, char **buf, int num);
749int BIO_nwrite0(BIO *bio, char **buf);
750int BIO_nwrite(BIO *bio, char **buf, int num);
751
752const BIO_METHOD *BIO_s_mem(void);
753# ifndef OPENSSL_NO_DGRAM
754const BIO_METHOD *BIO_s_dgram_mem(void);
755# endif
756const BIO_METHOD *BIO_s_secmem(void);
757BIO *BIO_new_mem_buf(const void *buf, int len);
758# ifndef OPENSSL_NO_SOCK
759const BIO_METHOD *BIO_s_socket(void);
760const BIO_METHOD *BIO_s_connect(void);
761const BIO_METHOD *BIO_s_accept(void);
762# endif
763const BIO_METHOD *BIO_s_fd(void);
764const BIO_METHOD *BIO_s_log(void);
765const BIO_METHOD *BIO_s_bio(void);
766const BIO_METHOD *BIO_s_null(void);
767const BIO_METHOD *BIO_f_null(void);
768const BIO_METHOD *BIO_f_buffer(void);
769const BIO_METHOD *BIO_f_readbuffer(void);
770const BIO_METHOD *BIO_f_linebuffer(void);
771const BIO_METHOD *BIO_f_nbio_test(void);
772const BIO_METHOD *BIO_f_prefix(void);
773const BIO_METHOD *BIO_s_core(void);
774# ifndef OPENSSL_NO_DGRAM
775const BIO_METHOD *BIO_s_dgram_pair(void);
776const BIO_METHOD *BIO_s_datagram(void);
777int BIO_dgram_non_fatal_error(int error);
778BIO *BIO_new_dgram(int fd, int close_flag);
779#  ifndef OPENSSL_NO_SCTP
780const BIO_METHOD *BIO_s_datagram_sctp(void);
781BIO *BIO_new_dgram_sctp(int fd, int close_flag);
782int BIO_dgram_is_sctp(BIO *bio);
783int BIO_dgram_sctp_notification_cb(BIO *b,
784                BIO_dgram_sctp_notification_handler_fn handle_notifications,
785                void *context);
786int BIO_dgram_sctp_wait_for_dry(BIO *b);
787int BIO_dgram_sctp_msg_waiting(BIO *b);
788#  endif
789# endif
790
791# ifndef OPENSSL_NO_SOCK
792int BIO_sock_should_retry(int i);
793int BIO_sock_non_fatal_error(int error);
794int BIO_err_is_non_fatal(unsigned int errcode);
795int BIO_socket_wait(int fd, int for_read, time_t max_time);
796# endif
797int BIO_wait(BIO *bio, time_t max_time, unsigned int nap_milliseconds);
798int BIO_do_connect_retry(BIO *bio, int timeout, int nap_milliseconds);
799
800int BIO_fd_should_retry(int i);
801int BIO_fd_non_fatal_error(int error);
802int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u),
803                void *u, const void *s, int len);
804int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u),
805                       void *u, const void *s, int len, int indent);
806int BIO_dump(BIO *b, const void *bytes, int len);
807int BIO_dump_indent(BIO *b, const void *bytes, int len, int indent);
808# ifndef OPENSSL_NO_STDIO
809int BIO_dump_fp(FILE *fp, const void *s, int len);
810int BIO_dump_indent_fp(FILE *fp, const void *s, int len, int indent);
811# endif
812int BIO_hex_string(BIO *out, int indent, int width, const void *data,
813                   int datalen);
814
815# ifndef OPENSSL_NO_SOCK
816BIO_ADDR *BIO_ADDR_new(void);
817int BIO_ADDR_copy(BIO_ADDR *dst, const BIO_ADDR *src);
818BIO_ADDR *BIO_ADDR_dup(const BIO_ADDR *ap);
819int BIO_ADDR_rawmake(BIO_ADDR *ap, int family,
820                     const void *where, size_t wherelen, unsigned short port);
821void BIO_ADDR_free(BIO_ADDR *);
822void BIO_ADDR_clear(BIO_ADDR *ap);
823int BIO_ADDR_family(const BIO_ADDR *ap);
824int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l);
825unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap);
826char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric);
827char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric);
828char *BIO_ADDR_path_string(const BIO_ADDR *ap);
829
830const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai);
831int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai);
832int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai);
833int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai);
834const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai);
835void BIO_ADDRINFO_free(BIO_ADDRINFO *bai);
836
837enum BIO_hostserv_priorities {
838    BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV
839};
840int BIO_parse_hostserv(const char *hostserv, char **host, char **service,
841                       enum BIO_hostserv_priorities hostserv_prio);
842enum BIO_lookup_type {
843    BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER
844};
845int BIO_lookup(const char *host, const char *service,
846               enum BIO_lookup_type lookup_type,
847               int family, int socktype, BIO_ADDRINFO **res);
848int BIO_lookup_ex(const char *host, const char *service,
849                  int lookup_type, int family, int socktype, int protocol,
850                  BIO_ADDRINFO **res);
851int BIO_sock_error(int sock);
852int BIO_socket_ioctl(int fd, long type, void *arg);
853int BIO_socket_nbio(int fd, int mode);
854int BIO_sock_init(void);
855# ifndef OPENSSL_NO_DEPRECATED_1_1_0
856#  define BIO_sock_cleanup() while(0) continue
857# endif
858int BIO_set_tcp_ndelay(int sock, int turn_on);
859# ifndef OPENSSL_NO_DEPRECATED_1_1_0
860OSSL_DEPRECATEDIN_1_1_0 struct hostent *BIO_gethostbyname(const char *name);
861OSSL_DEPRECATEDIN_1_1_0 int BIO_get_port(const char *str, unsigned short *port_ptr);
862OSSL_DEPRECATEDIN_1_1_0 int BIO_get_host_ip(const char *str, unsigned char *ip);
863OSSL_DEPRECATEDIN_1_1_0 int BIO_get_accept_socket(char *host_port, int mode);
864OSSL_DEPRECATEDIN_1_1_0 int BIO_accept(int sock, char **ip_port);
865# endif
866
867union BIO_sock_info_u {
868    BIO_ADDR *addr;
869};
870enum BIO_sock_info_type {
871    BIO_SOCK_INFO_ADDRESS
872};
873int BIO_sock_info(int sock,
874                  enum BIO_sock_info_type type, union BIO_sock_info_u *info);
875
876#  define BIO_SOCK_REUSEADDR    0x01
877#  define BIO_SOCK_V6_ONLY      0x02
878#  define BIO_SOCK_KEEPALIVE    0x04
879#  define BIO_SOCK_NONBLOCK     0x08
880#  define BIO_SOCK_NODELAY      0x10
881#  define BIO_SOCK_TFO          0x20
882
883int BIO_socket(int domain, int socktype, int protocol, int options);
884int BIO_connect(int sock, const BIO_ADDR *addr, int options);
885int BIO_bind(int sock, const BIO_ADDR *addr, int options);
886int BIO_listen(int sock, const BIO_ADDR *addr, int options);
887int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options);
888int BIO_closesocket(int sock);
889
890BIO *BIO_new_socket(int sock, int close_flag);
891BIO *BIO_new_connect(const char *host_port);
892BIO *BIO_new_accept(const char *host_port);
893# endif /* OPENSSL_NO_SOCK*/
894
895BIO *BIO_new_fd(int fd, int close_flag);
896
897int BIO_new_bio_pair(BIO **bio1, size_t writebuf1,
898                     BIO **bio2, size_t writebuf2);
899# ifndef OPENSSL_NO_DGRAM
900int BIO_new_bio_dgram_pair(BIO **bio1, size_t writebuf1,
901                           BIO **bio2, size_t writebuf2);
902# endif
903
904/*
905 * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints.
906 * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default
907 * value.
908 */
909
910void BIO_copy_next_retry(BIO *b);
911
912/*
913 * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);
914 */
915
916# define ossl_bio__attr__(x)
917# if defined(__GNUC__) && defined(__STDC_VERSION__) \
918    && !defined(__MINGW32__) && !defined(__MINGW64__) \
919    && !defined(__APPLE__)
920    /*
921     * Because we support the 'z' modifier, which made its appearance in C99,
922     * we can't use __attribute__ with pre C99 dialects.
923     */
924#  if __STDC_VERSION__ >= 199901L
925#   undef ossl_bio__attr__
926#   define ossl_bio__attr__ __attribute__
927#   if __GNUC__*10 + __GNUC_MINOR__ >= 44
928#    define ossl_bio__printf__ __gnu_printf__
929#   else
930#    define ossl_bio__printf__ __printf__
931#   endif
932#  endif
933# endif
934int BIO_printf(BIO *bio, const char *format, ...)
935ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3)));
936int BIO_vprintf(BIO *bio, const char *format, va_list args)
937ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0)));
938int BIO_snprintf(char *buf, size_t n, const char *format, ...)
939ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4)));
940int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)
941ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0)));
942# undef ossl_bio__attr__
943# undef ossl_bio__printf__
944
945
946BIO_METHOD *BIO_meth_new(int type, const char *name);
947void BIO_meth_free(BIO_METHOD *biom);
948int BIO_meth_set_write(BIO_METHOD *biom,
949                       int (*write) (BIO *, const char *, int));
950int BIO_meth_set_write_ex(BIO_METHOD *biom,
951                       int (*bwrite) (BIO *, const char *, size_t, size_t *));
952int BIO_meth_set_sendmmsg(BIO_METHOD *biom,
953                          int (*f) (BIO *, BIO_MSG *, size_t, size_t,
954                                    uint64_t, size_t *));
955int BIO_meth_set_read(BIO_METHOD *biom,
956                      int (*read) (BIO *, char *, int));
957int BIO_meth_set_read_ex(BIO_METHOD *biom,
958                         int (*bread) (BIO *, char *, size_t, size_t *));
959int BIO_meth_set_recvmmsg(BIO_METHOD *biom,
960                          int (*f) (BIO *, BIO_MSG *, size_t, size_t,
961                                    uint64_t, size_t *));
962int BIO_meth_set_puts(BIO_METHOD *biom,
963                      int (*puts) (BIO *, const char *));
964int BIO_meth_set_gets(BIO_METHOD *biom,
965                      int (*ossl_gets) (BIO *, char *, int));
966int BIO_meth_set_ctrl(BIO_METHOD *biom,
967                      long (*ctrl) (BIO *, int, long, void *));
968int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *));
969int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *));
970int BIO_meth_set_callback_ctrl(BIO_METHOD *biom,
971                               long (*callback_ctrl) (BIO *, int,
972                                                      BIO_info_cb *));
973# ifndef OPENSSL_NO_DEPRECATED_3_5
974OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *,
975                                                                         int);
976OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *,
977                                                                            size_t, size_t *);
978OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_sendmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *,
979                                                                           size_t, size_t,
980                                                                           uint64_t, size_t *);
981OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int);
982OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *,
983                                                                           size_t, size_t *);
984OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_recvmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *,
985                                                                           size_t, size_t,
986                                                                           uint64_t, size_t *);
987OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *);
988OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int);
989OSSL_DEPRECATEDIN_3_5 long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int,
990                                                                         long, void *);
991OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *);
992OSSL_DEPRECATEDIN_3_5 int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *);
993OSSL_DEPRECATEDIN_3_5 long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) (BIO *, int,
994                                                                                  BIO_info_cb *);
995# endif
996# ifdef  __cplusplus
997}
998# endif
999#endif
1000