OSDN Git Service

Update OpenSSL to 1.0.2d.
[ffftp/ffftp.git] / contrib / openssl / include / openssl / bio.h
1 /* crypto/bio/bio.h */\r
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)\r
3  * All rights reserved.\r
4  *\r
5  * This package is an SSL implementation written\r
6  * by Eric Young (eay@cryptsoft.com).\r
7  * The implementation was written so as to conform with Netscapes SSL.\r
8  *\r
9  * This library is free for commercial and non-commercial use as long as\r
10  * the following conditions are aheared to.  The following conditions\r
11  * apply to all code found in this distribution, be it the RC4, RSA,\r
12  * lhash, DES, etc., code; not just the SSL code.  The SSL documentation\r
13  * included with this distribution is covered by the same copyright terms\r
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).\r
15  *\r
16  * Copyright remains Eric Young's, and as such any Copyright notices in\r
17  * the code are not to be removed.\r
18  * If this package is used in a product, Eric Young should be given attribution\r
19  * as the author of the parts of the library used.\r
20  * This can be in the form of a textual message at program startup or\r
21  * in documentation (online or textual) provided with the package.\r
22  *\r
23  * Redistribution and use in source and binary forms, with or without\r
24  * modification, are permitted provided that the following conditions\r
25  * are met:\r
26  * 1. Redistributions of source code must retain the copyright\r
27  *    notice, this list of conditions and the following disclaimer.\r
28  * 2. Redistributions in binary form must reproduce the above copyright\r
29  *    notice, this list of conditions and the following disclaimer in the\r
30  *    documentation and/or other materials provided with the distribution.\r
31  * 3. All advertising materials mentioning features or use of this software\r
32  *    must display the following acknowledgement:\r
33  *    "This product includes cryptographic software written by\r
34  *     Eric Young (eay@cryptsoft.com)"\r
35  *    The word 'cryptographic' can be left out if the rouines from the library\r
36  *    being used are not cryptographic related :-).\r
37  * 4. If you include any Windows specific code (or a derivative thereof) from\r
38  *    the apps directory (application code) you must include an acknowledgement:\r
39  *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"\r
40  *\r
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND\r
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
44  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
51  * SUCH DAMAGE.\r
52  *\r
53  * The licence and distribution terms for any publically available version or\r
54  * derivative of this code cannot be changed.  i.e. this code cannot simply be\r
55  * copied and put under another distribution licence\r
56  * [including the GNU Public Licence.]\r
57  */\r
58 \r
59 #ifndef HEADER_BIO_H\r
60 # define HEADER_BIO_H\r
61 \r
62 # include <openssl/e_os2.h>\r
63 \r
64 # ifndef OPENSSL_NO_FP_API\r
65 #  include <stdio.h>\r
66 # endif\r
67 # include <stdarg.h>\r
68 \r
69 # include <openssl/crypto.h>\r
70 \r
71 # ifndef OPENSSL_NO_SCTP\r
72 #  ifndef OPENSSL_SYS_VMS\r
73 #   include <stdint.h>\r
74 #  else\r
75 #   include <inttypes.h>\r
76 #  endif\r
77 # endif\r
78 \r
79 #ifdef  __cplusplus\r
80 extern "C" {\r
81 #endif\r
82 \r
83 /* These are the 'types' of BIOs */\r
84 # define BIO_TYPE_NONE           0\r
85 # define BIO_TYPE_MEM            (1|0x0400)\r
86 # define BIO_TYPE_FILE           (2|0x0400)\r
87 \r
88 # define BIO_TYPE_FD             (4|0x0400|0x0100)\r
89 # define BIO_TYPE_SOCKET         (5|0x0400|0x0100)\r
90 # define BIO_TYPE_NULL           (6|0x0400)\r
91 # define BIO_TYPE_SSL            (7|0x0200)\r
92 # define BIO_TYPE_MD             (8|0x0200)/* passive filter */\r
93 # define BIO_TYPE_BUFFER         (9|0x0200)/* filter */\r
94 # define BIO_TYPE_CIPHER         (10|0x0200)/* filter */\r
95 # define BIO_TYPE_BASE64         (11|0x0200)/* filter */\r
96 # define BIO_TYPE_CONNECT        (12|0x0400|0x0100)/* socket - connect */\r
97 # define BIO_TYPE_ACCEPT         (13|0x0400|0x0100)/* socket for accept */\r
98 # define BIO_TYPE_PROXY_CLIENT   (14|0x0200)/* client proxy BIO */\r
99 # define BIO_TYPE_PROXY_SERVER   (15|0x0200)/* server proxy BIO */\r
100 # define BIO_TYPE_NBIO_TEST      (16|0x0200)/* server proxy BIO */\r
101 # define BIO_TYPE_NULL_FILTER    (17|0x0200)\r
102 # define BIO_TYPE_BER            (18|0x0200)/* BER -> bin filter */\r
103 # define BIO_TYPE_BIO            (19|0x0400)/* (half a) BIO pair */\r
104 # define BIO_TYPE_LINEBUFFER     (20|0x0200)/* filter */\r
105 # define BIO_TYPE_DGRAM          (21|0x0400|0x0100)\r
106 # ifndef OPENSSL_NO_SCTP\r
107 #  define BIO_TYPE_DGRAM_SCTP     (24|0x0400|0x0100)\r
108 # endif\r
109 # define BIO_TYPE_ASN1           (22|0x0200)/* filter */\r
110 # define BIO_TYPE_COMP           (23|0x0200)/* filter */\r
111 \r
112 # define BIO_TYPE_DESCRIPTOR     0x0100/* socket, fd, connect or accept */\r
113 # define BIO_TYPE_FILTER         0x0200\r
114 # define BIO_TYPE_SOURCE_SINK    0x0400\r
115 \r
116 /*\r
117  * BIO_FILENAME_READ|BIO_CLOSE to open or close on free.\r
118  * BIO_set_fp(in,stdin,BIO_NOCLOSE);\r
119  */\r
120 # define BIO_NOCLOSE             0x00\r
121 # define BIO_CLOSE               0x01\r
122 \r
123 /*\r
124  * These are used in the following macros and are passed to BIO_ctrl()\r
125  */\r
126 # define BIO_CTRL_RESET          1/* opt - rewind/zero etc */\r
127 # define BIO_CTRL_EOF            2/* opt - are we at the eof */\r
128 # define BIO_CTRL_INFO           3/* opt - extra tit-bits */\r
129 # define BIO_CTRL_SET            4/* man - set the 'IO' type */\r
130 # define BIO_CTRL_GET            5/* man - get the 'IO' type */\r
131 # define BIO_CTRL_PUSH           6/* opt - internal, used to signify change */\r
132 # define BIO_CTRL_POP            7/* opt - internal, used to signify change */\r
133 # define BIO_CTRL_GET_CLOSE      8/* man - set the 'close' on free */\r
134 # define BIO_CTRL_SET_CLOSE      9/* man - set the 'close' on free */\r
135 # define BIO_CTRL_PENDING        10/* opt - is their more data buffered */\r
136 # define BIO_CTRL_FLUSH          11/* opt - 'flush' buffered output */\r
137 # define BIO_CTRL_DUP            12/* man - extra stuff for 'duped' BIO */\r
138 # define BIO_CTRL_WPENDING       13/* opt - number of bytes still to write */\r
139 /* callback is int cb(BIO *bio,state,ret); */\r
140 # define BIO_CTRL_SET_CALLBACK   14/* opt - set callback function */\r
141 # define BIO_CTRL_GET_CALLBACK   15/* opt - set callback function */\r
142 \r
143 # define BIO_CTRL_SET_FILENAME   30/* BIO_s_file special */\r
144 \r
145 /* dgram BIO stuff */\r
146 # define BIO_CTRL_DGRAM_CONNECT       31/* BIO dgram special */\r
147 # define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected\r
148                                          * socket to be passed in */\r
149 # define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */\r
150 # define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */\r
151 # define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */\r
152 # define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */\r
153 \r
154 # define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */\r
155 # define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */\r
156 \r
157 /* #ifdef IP_MTU_DISCOVER */\r
158 # define BIO_CTRL_DGRAM_MTU_DISCOVER       39/* set DF bit on egress packets */\r
159 /* #endif */\r
160 \r
161 # define BIO_CTRL_DGRAM_QUERY_MTU          40/* as kernel for current MTU */\r
162 # define BIO_CTRL_DGRAM_GET_FALLBACK_MTU   47\r
163 # define BIO_CTRL_DGRAM_GET_MTU            41/* get cached value for MTU */\r
164 # define BIO_CTRL_DGRAM_SET_MTU            42/* set cached value for MTU.\r
165                                               * want to use this if asking\r
166                                               * the kernel fails */\r
167 \r
168 # define BIO_CTRL_DGRAM_MTU_EXCEEDED       43/* check whether the MTU was\r
169                                               * exceed in the previous write\r
170                                               * operation */\r
171 \r
172 # define BIO_CTRL_DGRAM_GET_PEER           46\r
173 # define BIO_CTRL_DGRAM_SET_PEER           44/* Destination for the data */\r
174 \r
175 # define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT   45/* Next DTLS handshake timeout\r
176                                               * to adjust socket timeouts */\r
177 # define BIO_CTRL_DGRAM_SET_DONT_FRAG      48\r
178 \r
179 # define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD   49\r
180 \r
181 # ifndef OPENSSL_NO_SCTP\r
182 /* SCTP stuff */\r
183 #  define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE    50\r
184 #  define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY                51\r
185 #  define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY               52\r
186 #  define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD               53\r
187 #  define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO         60\r
188 #  define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO         61\r
189 #  define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO         62\r
190 #  define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO         63\r
191 #  define BIO_CTRL_DGRAM_SCTP_GET_PRINFO                  64\r
192 #  define BIO_CTRL_DGRAM_SCTP_SET_PRINFO                  65\r
193 #  define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN               70\r
194 # endif\r
195 \r
196 /* modifiers */\r
197 # define BIO_FP_READ             0x02\r
198 # define BIO_FP_WRITE            0x04\r
199 # define BIO_FP_APPEND           0x08\r
200 # define BIO_FP_TEXT             0x10\r
201 \r
202 # define BIO_FLAGS_READ          0x01\r
203 # define BIO_FLAGS_WRITE         0x02\r
204 # define BIO_FLAGS_IO_SPECIAL    0x04\r
205 # define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL)\r
206 # define BIO_FLAGS_SHOULD_RETRY  0x08\r
207 # ifndef BIO_FLAGS_UPLINK\r
208 /*\r
209  * "UPLINK" flag denotes file descriptors provided by application. It\r
210  * defaults to 0, as most platforms don't require UPLINK interface.\r
211  */\r
212 #  define BIO_FLAGS_UPLINK        0\r
213 # endif\r
214 \r
215 /* Used in BIO_gethostbyname() */\r
216 # define BIO_GHBN_CTRL_HITS              1\r
217 # define BIO_GHBN_CTRL_MISSES            2\r
218 # define BIO_GHBN_CTRL_CACHE_SIZE        3\r
219 # define BIO_GHBN_CTRL_GET_ENTRY         4\r
220 # define BIO_GHBN_CTRL_FLUSH             5\r
221 \r
222 /* Mostly used in the SSL BIO */\r
223 /*-\r
224  * Not used anymore\r
225  * #define BIO_FLAGS_PROTOCOL_DELAYED_READ 0x10\r
226  * #define BIO_FLAGS_PROTOCOL_DELAYED_WRITE 0x20\r
227  * #define BIO_FLAGS_PROTOCOL_STARTUP   0x40\r
228  */\r
229 \r
230 # define BIO_FLAGS_BASE64_NO_NL  0x100\r
231 \r
232 /*\r
233  * This is used with memory BIOs: it means we shouldn't free up or change the\r
234  * data in any way.\r
235  */\r
236 # define BIO_FLAGS_MEM_RDONLY    0x200\r
237 \r
238 typedef struct bio_st BIO;\r
239 \r
240 void BIO_set_flags(BIO *b, int flags);\r
241 int BIO_test_flags(const BIO *b, int flags);\r
242 void BIO_clear_flags(BIO *b, int flags);\r
243 \r
244 # define BIO_get_flags(b) BIO_test_flags(b, ~(0x0))\r
245 # define BIO_set_retry_special(b) \\r
246                 BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY))\r
247 # define BIO_set_retry_read(b) \\r
248                 BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))\r
249 # define BIO_set_retry_write(b) \\r
250                 BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))\r
251 \r
252 /* These are normally used internally in BIOs */\r
253 # define BIO_clear_retry_flags(b) \\r
254                 BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))\r
255 # define BIO_get_retry_flags(b) \\r
256                 BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))\r
257 \r
258 /* These should be used by the application to tell why we should retry */\r
259 # define BIO_should_read(a)              BIO_test_flags(a, BIO_FLAGS_READ)\r
260 # define BIO_should_write(a)             BIO_test_flags(a, BIO_FLAGS_WRITE)\r
261 # define BIO_should_io_special(a)        BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL)\r
262 # define BIO_retry_type(a)               BIO_test_flags(a, BIO_FLAGS_RWS)\r
263 # define BIO_should_retry(a)             BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY)\r
264 \r
265 /*\r
266  * The next three are used in conjunction with the BIO_should_io_special()\r
267  * condition.  After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int\r
268  * *reason); will walk the BIO stack and return the 'reason' for the special\r
269  * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return\r
270  * the code.\r
271  */\r
272 /*\r
273  * Returned from the SSL bio when the certificate retrieval code had an error\r
274  */\r
275 # define BIO_RR_SSL_X509_LOOKUP          0x01\r
276 /* Returned from the connect BIO when a connect would have blocked */\r
277 # define BIO_RR_CONNECT                  0x02\r
278 /* Returned from the accept BIO when an accept would have blocked */\r
279 # define BIO_RR_ACCEPT                   0x03\r
280 \r
281 /* These are passed by the BIO callback */\r
282 # define BIO_CB_FREE     0x01\r
283 # define BIO_CB_READ     0x02\r
284 # define BIO_CB_WRITE    0x03\r
285 # define BIO_CB_PUTS     0x04\r
286 # define BIO_CB_GETS     0x05\r
287 # define BIO_CB_CTRL     0x06\r
288 \r
289 /*\r
290  * The callback is called before and after the underling operation, The\r
291  * BIO_CB_RETURN flag indicates if it is after the call\r
292  */\r
293 # define BIO_CB_RETURN   0x80\r
294 # define BIO_CB_return(a) ((a)|BIO_CB_RETURN)\r
295 # define BIO_cb_pre(a)   (!((a)&BIO_CB_RETURN))\r
296 # define BIO_cb_post(a)  ((a)&BIO_CB_RETURN)\r
297 \r
298 long (*BIO_get_callback(const BIO *b)) (struct bio_st *, int, const char *,\r
299                                         int, long, long);\r
300 void BIO_set_callback(BIO *b,\r
301                       long (*callback) (struct bio_st *, int, const char *,\r
302                                         int, long, long));\r
303 char *BIO_get_callback_arg(const BIO *b);\r
304 void BIO_set_callback_arg(BIO *b, char *arg);\r
305 \r
306 const char *BIO_method_name(const BIO *b);\r
307 int BIO_method_type(const BIO *b);\r
308 \r
309 typedef void bio_info_cb (struct bio_st *, int, const char *, int, long,\r
310                           long);\r
311 \r
312 typedef struct bio_method_st {\r
313     int type;\r
314     const char *name;\r
315     int (*bwrite) (BIO *, const char *, int);\r
316     int (*bread) (BIO *, char *, int);\r
317     int (*bputs) (BIO *, const char *);\r
318     int (*bgets) (BIO *, char *, int);\r
319     long (*ctrl) (BIO *, int, long, void *);\r
320     int (*create) (BIO *);\r
321     int (*destroy) (BIO *);\r
322     long (*callback_ctrl) (BIO *, int, bio_info_cb *);\r
323 } BIO_METHOD;\r
324 \r
325 struct bio_st {\r
326     BIO_METHOD *method;\r
327     /* bio, mode, argp, argi, argl, ret */\r
328     long (*callback) (struct bio_st *, int, const char *, int, long, long);\r
329     char *cb_arg;               /* first argument for the callback */\r
330     int init;\r
331     int shutdown;\r
332     int flags;                  /* extra storage */\r
333     int retry_reason;\r
334     int num;\r
335     void *ptr;\r
336     struct bio_st *next_bio;    /* used by filter BIOs */\r
337     struct bio_st *prev_bio;    /* used by filter BIOs */\r
338     int references;\r
339     unsigned long num_read;\r
340     unsigned long num_write;\r
341     CRYPTO_EX_DATA ex_data;\r
342 };\r
343 \r
344 DECLARE_STACK_OF(BIO)\r
345 \r
346 typedef struct bio_f_buffer_ctx_struct {\r
347     /*-\r
348      * Buffers are setup like this:\r
349      *\r
350      * <---------------------- size ----------------------->\r
351      * +---------------------------------------------------+\r
352      * | consumed | remaining          | free space        |\r
353      * +---------------------------------------------------+\r
354      * <-- off --><------- len ------->\r
355      */\r
356     /*- BIO *bio; *//*\r
357      * this is now in the BIO struct\r
358      */\r
359     int ibuf_size;              /* how big is the input buffer */\r
360     int obuf_size;              /* how big is the output buffer */\r
361     char *ibuf;                 /* the char array */\r
362     int ibuf_len;               /* how many bytes are in it */\r
363     int ibuf_off;               /* write/read offset */\r
364     char *obuf;                 /* the char array */\r
365     int obuf_len;               /* how many bytes are in it */\r
366     int obuf_off;               /* write/read offset */\r
367 } BIO_F_BUFFER_CTX;\r
368 \r
369 /* Prefix and suffix callback in ASN1 BIO */\r
370 typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen,\r
371                           void *parg);\r
372 \r
373 # ifndef OPENSSL_NO_SCTP\r
374 /* SCTP parameter structs */\r
375 struct bio_dgram_sctp_sndinfo {\r
376     uint16_t snd_sid;\r
377     uint16_t snd_flags;\r
378     uint32_t snd_ppid;\r
379     uint32_t snd_context;\r
380 };\r
381 \r
382 struct bio_dgram_sctp_rcvinfo {\r
383     uint16_t rcv_sid;\r
384     uint16_t rcv_ssn;\r
385     uint16_t rcv_flags;\r
386     uint32_t rcv_ppid;\r
387     uint32_t rcv_tsn;\r
388     uint32_t rcv_cumtsn;\r
389     uint32_t rcv_context;\r
390 };\r
391 \r
392 struct bio_dgram_sctp_prinfo {\r
393     uint16_t pr_policy;\r
394     uint32_t pr_value;\r
395 };\r
396 # endif\r
397 \r
398 /* connect BIO stuff */\r
399 # define BIO_CONN_S_BEFORE               1\r
400 # define BIO_CONN_S_GET_IP               2\r
401 # define BIO_CONN_S_GET_PORT             3\r
402 # define BIO_CONN_S_CREATE_SOCKET        4\r
403 # define BIO_CONN_S_CONNECT              5\r
404 # define BIO_CONN_S_OK                   6\r
405 # define BIO_CONN_S_BLOCKED_CONNECT      7\r
406 # define BIO_CONN_S_NBIO                 8\r
407 /*\r
408  * #define BIO_CONN_get_param_hostname BIO_ctrl\r
409  */\r
410 \r
411 # define BIO_C_SET_CONNECT                       100\r
412 # define BIO_C_DO_STATE_MACHINE                  101\r
413 # define BIO_C_SET_NBIO                          102\r
414 # define BIO_C_SET_PROXY_PARAM                   103\r
415 # define BIO_C_SET_FD                            104\r
416 # define BIO_C_GET_FD                            105\r
417 # define BIO_C_SET_FILE_PTR                      106\r
418 # define BIO_C_GET_FILE_PTR                      107\r
419 # define BIO_C_SET_FILENAME                      108\r
420 # define BIO_C_SET_SSL                           109\r
421 # define BIO_C_GET_SSL                           110\r
422 # define BIO_C_SET_MD                            111\r
423 # define BIO_C_GET_MD                            112\r
424 # define BIO_C_GET_CIPHER_STATUS                 113\r
425 # define BIO_C_SET_BUF_MEM                       114\r
426 # define BIO_C_GET_BUF_MEM_PTR                   115\r
427 # define BIO_C_GET_BUFF_NUM_LINES                116\r
428 # define BIO_C_SET_BUFF_SIZE                     117\r
429 # define BIO_C_SET_ACCEPT                        118\r
430 # define BIO_C_SSL_MODE                          119\r
431 # define BIO_C_GET_MD_CTX                        120\r
432 # define BIO_C_GET_PROXY_PARAM                   121\r
433 # define BIO_C_SET_BUFF_READ_DATA                122/* data to read first */\r
434 # define BIO_C_GET_CONNECT                       123\r
435 # define BIO_C_GET_ACCEPT                        124\r
436 # define BIO_C_SET_SSL_RENEGOTIATE_BYTES         125\r
437 # define BIO_C_GET_SSL_NUM_RENEGOTIATES          126\r
438 # define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT       127\r
439 # define BIO_C_FILE_SEEK                         128\r
440 # define BIO_C_GET_CIPHER_CTX                    129\r
441 # define BIO_C_SET_BUF_MEM_EOF_RETURN            130/* return end of input\r
442                                                      * value */\r
443 # define BIO_C_SET_BIND_MODE                     131\r
444 # define BIO_C_GET_BIND_MODE                     132\r
445 # define BIO_C_FILE_TELL                         133\r
446 # define BIO_C_GET_SOCKS                         134\r
447 # define BIO_C_SET_SOCKS                         135\r
448 \r
449 # define BIO_C_SET_WRITE_BUF_SIZE                136/* for BIO_s_bio */\r
450 # define BIO_C_GET_WRITE_BUF_SIZE                137\r
451 # define BIO_C_MAKE_BIO_PAIR                     138\r
452 # define BIO_C_DESTROY_BIO_PAIR                  139\r
453 # define BIO_C_GET_WRITE_GUARANTEE               140\r
454 # define BIO_C_GET_READ_REQUEST                  141\r
455 # define BIO_C_SHUTDOWN_WR                       142\r
456 # define BIO_C_NREAD0                            143\r
457 # define BIO_C_NREAD                             144\r
458 # define BIO_C_NWRITE0                           145\r
459 # define BIO_C_NWRITE                            146\r
460 # define BIO_C_RESET_READ_REQUEST                147\r
461 # define BIO_C_SET_MD_CTX                        148\r
462 \r
463 # define BIO_C_SET_PREFIX                        149\r
464 # define BIO_C_GET_PREFIX                        150\r
465 # define BIO_C_SET_SUFFIX                        151\r
466 # define BIO_C_GET_SUFFIX                        152\r
467 \r
468 # define BIO_C_SET_EX_ARG                        153\r
469 # define BIO_C_GET_EX_ARG                        154\r
470 \r
471 # define BIO_set_app_data(s,arg)         BIO_set_ex_data(s,0,arg)\r
472 # define BIO_get_app_data(s)             BIO_get_ex_data(s,0)\r
473 \r
474 /* BIO_s_connect() and BIO_s_socks4a_connect() */\r
475 # define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0,(char *)name)\r
476 # define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1,(char *)port)\r
477 # define BIO_set_conn_ip(b,ip)     BIO_ctrl(b,BIO_C_SET_CONNECT,2,(char *)ip)\r
478 # define BIO_set_conn_int_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,3,(char *)port)\r
479 # define BIO_get_conn_hostname(b)  BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)\r
480 # define BIO_get_conn_port(b)      BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)\r
481 # define BIO_get_conn_ip(b)               BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)\r
482 # define BIO_get_conn_int_port(b) BIO_int_ctrl(b,BIO_C_GET_CONNECT,3,0)\r
483 \r
484 # define BIO_set_nbio(b,n)       BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL)\r
485 \r
486 /* BIO_s_accept_socket() */\r
487 # define BIO_set_accept_port(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0,(char *)name)\r
488 # define BIO_get_accept_port(b)  BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)\r
489 /* #define BIO_set_nbio(b,n)    BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */\r
490 # define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,1,(n)?(void *)"a":NULL)\r
491 # define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(char *)bio)\r
492 \r
493 # define BIO_BIND_NORMAL                 0\r
494 # define BIO_BIND_REUSEADDR_IF_UNUSED    1\r
495 # define BIO_BIND_REUSEADDR              2\r
496 # define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL)\r
497 # define BIO_get_bind_mode(b,mode) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL)\r
498 \r
499 # define BIO_do_connect(b)       BIO_do_handshake(b)\r
500 # define BIO_do_accept(b)        BIO_do_handshake(b)\r
501 # define BIO_do_handshake(b)     BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)\r
502 \r
503 /* BIO_s_proxy_client() */\r
504 # define BIO_set_url(b,url)      BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,0,(char *)(url))\r
505 # define BIO_set_proxies(b,p)    BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,1,(char *)(p))\r
506 /* BIO_set_nbio(b,n) */\r
507 # define BIO_set_filter_bio(b,s) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,2,(char *)(s))\r
508 /* BIO *BIO_get_filter_bio(BIO *bio); */\r
509 # define BIO_set_proxy_cb(b,cb) BIO_callback_ctrl(b,BIO_C_SET_PROXY_PARAM,3,(void *(*cb)()))\r
510 # define BIO_set_proxy_header(b,sk) BIO_ctrl(b,BIO_C_SET_PROXY_PARAM,4,(char *)sk)\r
511 # define BIO_set_no_connect_return(b,bool) BIO_int_ctrl(b,BIO_C_SET_PROXY_PARAM,5,bool)\r
512 \r
513 # define BIO_get_proxy_header(b,skp) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,0,(char *)skp)\r
514 # define BIO_get_proxies(b,pxy_p) BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,1,(char *)(pxy_p))\r
515 # define BIO_get_url(b,url)      BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,2,(char *)(url))\r
516 # define BIO_get_no_connect_return(b)    BIO_ctrl(b,BIO_C_GET_PROXY_PARAM,5,NULL)\r
517 \r
518 # define BIO_set_fd(b,fd,c)      BIO_int_ctrl(b,BIO_C_SET_FD,c,fd)\r
519 # define BIO_get_fd(b,c)         BIO_ctrl(b,BIO_C_GET_FD,0,(char *)c)\r
520 \r
521 # define BIO_set_fp(b,fp,c)      BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)fp)\r
522 # define BIO_get_fp(b,fpp)       BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)fpp)\r
523 \r
524 # define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL)\r
525 # define BIO_tell(b)     (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL)\r
526 \r
527 /*\r
528  * name is cast to lose const, but might be better to route through a\r
529  * function so we can do it safely\r
530  */\r
531 # ifdef CONST_STRICT\r
532 /*\r
533  * If you are wondering why this isn't defined, its because CONST_STRICT is\r
534  * purely a compile-time kludge to allow const to be checked.\r
535  */\r
536 int BIO_read_filename(BIO *b, const char *name);\r
537 # else\r
538 #  define BIO_read_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \\r
539                 BIO_CLOSE|BIO_FP_READ,(char *)name)\r
540 # endif\r
541 # define BIO_write_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \\r
542                 BIO_CLOSE|BIO_FP_WRITE,name)\r
543 # define BIO_append_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \\r
544                 BIO_CLOSE|BIO_FP_APPEND,name)\r
545 # define BIO_rw_filename(b,name) BIO_ctrl(b,BIO_C_SET_FILENAME, \\r
546                 BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name)\r
547 \r
548 /*\r
549  * WARNING WARNING, this ups the reference count on the read bio of the SSL\r
550  * structure.  This is because the ssl read BIO is now pointed to by the\r
551  * next_bio field in the bio.  So when you free the BIO, make sure you are\r
552  * doing a BIO_free_all() to catch the underlying BIO.\r
553  */\r
554 # define BIO_set_ssl(b,ssl,c)    BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl)\r
555 # define BIO_get_ssl(b,sslp)     BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)sslp)\r
556 # define BIO_set_ssl_mode(b,client)      BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL)\r
557 # define BIO_set_ssl_renegotiate_bytes(b,num) \\r
558         BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL);\r
559 # define BIO_get_num_renegotiates(b) \\r
560         BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL);\r
561 # define BIO_set_ssl_renegotiate_timeout(b,seconds) \\r
562         BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL);\r
563 \r
564 /* defined in evp.h */\r
565 /* #define BIO_set_md(b,md)     BIO_ctrl(b,BIO_C_SET_MD,1,(char *)md) */\r
566 \r
567 # define BIO_get_mem_data(b,pp)  BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)pp)\r
568 # define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)bm)\r
569 # define BIO_get_mem_ptr(b,pp)   BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0,(char *)pp)\r
570 # define BIO_set_mem_eof_return(b,v) \\r
571                                 BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL)\r
572 \r
573 /* For the BIO_f_buffer() type */\r
574 # define BIO_get_buffer_num_lines(b)     BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL)\r
575 # define BIO_set_buffer_size(b,size)     BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL)\r
576 # define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0)\r
577 # define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1)\r
578 # define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf)\r
579 \r
580 /* Don't use the next one unless you know what you are doing :-) */\r
581 # define BIO_dup_state(b,ret)    BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret))\r
582 \r
583 # define BIO_reset(b)            (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL)\r
584 # define BIO_eof(b)              (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL)\r
585 # define BIO_set_close(b,c)      (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL)\r
586 # define BIO_get_close(b)        (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL)\r
587 # define BIO_pending(b)          (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL)\r
588 # define BIO_wpending(b)         (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL)\r
589 /* ...pending macros have inappropriate return type */\r
590 size_t BIO_ctrl_pending(BIO *b);\r
591 size_t BIO_ctrl_wpending(BIO *b);\r
592 # define BIO_flush(b)            (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL)\r
593 # define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \\r
594                                                    cbp)\r
595 # define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb)\r
596 \r
597 /* For the BIO_f_buffer() type */\r
598 # define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL)\r
599 \r
600 /* For BIO_s_bio() */\r
601 # define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL)\r
602 # define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL)\r
603 # define BIO_make_bio_pair(b1,b2)   (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2)\r
604 # define BIO_destroy_bio_pair(b)    (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL)\r
605 # define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL)\r
606 /* macros with inappropriate type -- but ...pending macros use int too: */\r
607 # define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL)\r
608 # define BIO_get_read_request(b)    (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL)\r
609 size_t BIO_ctrl_get_write_guarantee(BIO *b);\r
610 size_t BIO_ctrl_get_read_request(BIO *b);\r
611 int BIO_ctrl_reset_read_request(BIO *b);\r
612 \r
613 /* ctrl macros for dgram */\r
614 # define BIO_ctrl_dgram_connect(b,peer)  \\r
615                      (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)peer)\r
616 # define BIO_ctrl_set_connected(b, state, peer) \\r
617          (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, state, (char *)peer)\r
618 # define BIO_dgram_recv_timedout(b) \\r
619          (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL)\r
620 # define BIO_dgram_send_timedout(b) \\r
621          (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL)\r
622 # define BIO_dgram_get_peer(b,peer) \\r
623          (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)peer)\r
624 # define BIO_dgram_set_peer(b,peer) \\r
625          (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)peer)\r
626 # define BIO_dgram_get_mtu_overhead(b) \\r
627          (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL)\r
628 \r
629 /* These two aren't currently implemented */\r
630 /* int BIO_get_ex_num(BIO *bio); */\r
631 /* void BIO_set_ex_free_func(BIO *bio,int idx,void (*cb)()); */\r
632 int BIO_set_ex_data(BIO *bio, int idx, void *data);\r
633 void *BIO_get_ex_data(BIO *bio, int idx);\r
634 int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,\r
635                          CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);\r
636 unsigned long BIO_number_read(BIO *bio);\r
637 unsigned long BIO_number_written(BIO *bio);\r
638 \r
639 /* For BIO_f_asn1() */\r
640 int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix,\r
641                         asn1_ps_func *prefix_free);\r
642 int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix,\r
643                         asn1_ps_func **pprefix_free);\r
644 int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix,\r
645                         asn1_ps_func *suffix_free);\r
646 int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix,\r
647                         asn1_ps_func **psuffix_free);\r
648 \r
649 # ifndef OPENSSL_NO_FP_API\r
650 BIO_METHOD *BIO_s_file(void);\r
651 BIO *BIO_new_file(const char *filename, const char *mode);\r
652 BIO *BIO_new_fp(FILE *stream, int close_flag);\r
653 #  define BIO_s_file_internal    BIO_s_file\r
654 # endif\r
655 BIO *BIO_new(BIO_METHOD *type);\r
656 int BIO_set(BIO *a, BIO_METHOD *type);\r
657 int BIO_free(BIO *a);\r
658 void BIO_vfree(BIO *a);\r
659 int BIO_read(BIO *b, void *data, int len);\r
660 int BIO_gets(BIO *bp, char *buf, int size);\r
661 int BIO_write(BIO *b, const void *data, int len);\r
662 int BIO_puts(BIO *bp, const char *buf);\r
663 int BIO_indent(BIO *b, int indent, int max);\r
664 long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg);\r
665 long BIO_callback_ctrl(BIO *b, int cmd,\r
666                        void (*fp) (struct bio_st *, int, const char *, int,\r
667                                    long, long));\r
668 char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg);\r
669 long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg);\r
670 BIO *BIO_push(BIO *b, BIO *append);\r
671 BIO *BIO_pop(BIO *b);\r
672 void BIO_free_all(BIO *a);\r
673 BIO *BIO_find_type(BIO *b, int bio_type);\r
674 BIO *BIO_next(BIO *b);\r
675 BIO *BIO_get_retry_BIO(BIO *bio, int *reason);\r
676 int BIO_get_retry_reason(BIO *bio);\r
677 BIO *BIO_dup_chain(BIO *in);\r
678 \r
679 int BIO_nread0(BIO *bio, char **buf);\r
680 int BIO_nread(BIO *bio, char **buf, int num);\r
681 int BIO_nwrite0(BIO *bio, char **buf);\r
682 int BIO_nwrite(BIO *bio, char **buf, int num);\r
683 \r
684 long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi,\r
685                         long argl, long ret);\r
686 \r
687 BIO_METHOD *BIO_s_mem(void);\r
688 BIO *BIO_new_mem_buf(void *buf, int len);\r
689 BIO_METHOD *BIO_s_socket(void);\r
690 BIO_METHOD *BIO_s_connect(void);\r
691 BIO_METHOD *BIO_s_accept(void);\r
692 BIO_METHOD *BIO_s_fd(void);\r
693 # ifndef OPENSSL_SYS_OS2\r
694 BIO_METHOD *BIO_s_log(void);\r
695 # endif\r
696 BIO_METHOD *BIO_s_bio(void);\r
697 BIO_METHOD *BIO_s_null(void);\r
698 BIO_METHOD *BIO_f_null(void);\r
699 BIO_METHOD *BIO_f_buffer(void);\r
700 # ifdef OPENSSL_SYS_VMS\r
701 BIO_METHOD *BIO_f_linebuffer(void);\r
702 # endif\r
703 BIO_METHOD *BIO_f_nbio_test(void);\r
704 # ifndef OPENSSL_NO_DGRAM\r
705 BIO_METHOD *BIO_s_datagram(void);\r
706 #  ifndef OPENSSL_NO_SCTP\r
707 BIO_METHOD *BIO_s_datagram_sctp(void);\r
708 #  endif\r
709 # endif\r
710 \r
711 /* BIO_METHOD *BIO_f_ber(void); */\r
712 \r
713 int BIO_sock_should_retry(int i);\r
714 int BIO_sock_non_fatal_error(int error);\r
715 int BIO_dgram_non_fatal_error(int error);\r
716 \r
717 int BIO_fd_should_retry(int i);\r
718 int BIO_fd_non_fatal_error(int error);\r
719 int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u),\r
720                 void *u, const char *s, int len);\r
721 int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u),\r
722                        void *u, const char *s, int len, int indent);\r
723 int BIO_dump(BIO *b, const char *bytes, int len);\r
724 int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent);\r
725 # ifndef OPENSSL_NO_FP_API\r
726 int BIO_dump_fp(FILE *fp, const char *s, int len);\r
727 int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent);\r
728 # endif\r
729 int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data,\r
730                    int datalen);\r
731 \r
732 struct hostent *BIO_gethostbyname(const char *name);\r
733 /*-\r
734  * We might want a thread-safe interface too:\r
735  * struct hostent *BIO_gethostbyname_r(const char *name,\r
736  *     struct hostent *result, void *buffer, size_t buflen);\r
737  * or something similar (caller allocates a struct hostent,\r
738  * pointed to by "result", and additional buffer space for the various\r
739  * substructures; if the buffer does not suffice, NULL is returned\r
740  * and an appropriate error code is set).\r
741  */\r
742 int BIO_sock_error(int sock);\r
743 int BIO_socket_ioctl(int fd, long type, void *arg);\r
744 int BIO_socket_nbio(int fd, int mode);\r
745 int BIO_get_port(const char *str, unsigned short *port_ptr);\r
746 int BIO_get_host_ip(const char *str, unsigned char *ip);\r
747 int BIO_get_accept_socket(char *host_port, int mode);\r
748 int BIO_accept(int sock, char **ip_port);\r
749 int BIO_sock_init(void);\r
750 void BIO_sock_cleanup(void);\r
751 int BIO_set_tcp_ndelay(int sock, int turn_on);\r
752 \r
753 BIO *BIO_new_socket(int sock, int close_flag);\r
754 BIO *BIO_new_dgram(int fd, int close_flag);\r
755 # ifndef OPENSSL_NO_SCTP\r
756 BIO *BIO_new_dgram_sctp(int fd, int close_flag);\r
757 int BIO_dgram_is_sctp(BIO *bio);\r
758 int BIO_dgram_sctp_notification_cb(BIO *b,\r
759                                    void (*handle_notifications) (BIO *bio,\r
760                                                                  void\r
761                                                                  *context,\r
762                                                                  void *buf),\r
763                                    void *context);\r
764 int BIO_dgram_sctp_wait_for_dry(BIO *b);\r
765 int BIO_dgram_sctp_msg_waiting(BIO *b);\r
766 # endif\r
767 BIO *BIO_new_fd(int fd, int close_flag);\r
768 BIO *BIO_new_connect(const char *host_port);\r
769 BIO *BIO_new_accept(const char *host_port);\r
770 \r
771 int BIO_new_bio_pair(BIO **bio1, size_t writebuf1,\r
772                      BIO **bio2, size_t writebuf2);\r
773 /*\r
774  * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints.\r
775  * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default\r
776  * value.\r
777  */\r
778 \r
779 void BIO_copy_next_retry(BIO *b);\r
780 \r
781 /*\r
782  * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);\r
783  */\r
784 \r
785 # ifdef __GNUC__\r
786 #  define __bio_h__attr__ __attribute__\r
787 # else\r
788 #  define __bio_h__attr__(x)\r
789 # endif\r
790 int BIO_printf(BIO *bio, const char *format, ...)\r
791 __bio_h__attr__((__format__(__printf__, 2, 3)));\r
792 int BIO_vprintf(BIO *bio, const char *format, va_list args)\r
793 __bio_h__attr__((__format__(__printf__, 2, 0)));\r
794 int BIO_snprintf(char *buf, size_t n, const char *format, ...)\r
795 __bio_h__attr__((__format__(__printf__, 3, 4)));\r
796 int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args)\r
797 __bio_h__attr__((__format__(__printf__, 3, 0)));\r
798 # undef __bio_h__attr__\r
799 \r
800 /* BEGIN ERROR CODES */\r
801 /*\r
802  * The following lines are auto generated by the script mkerr.pl. Any changes\r
803  * made after this point may be overwritten when the script is next run.\r
804  */\r
805 void ERR_load_BIO_strings(void);\r
806 \r
807 /* Error codes for the BIO functions. */\r
808 \r
809 /* Function codes. */\r
810 # define BIO_F_ACPT_STATE                                 100\r
811 # define BIO_F_BIO_ACCEPT                                 101\r
812 # define BIO_F_BIO_BER_GET_HEADER                         102\r
813 # define BIO_F_BIO_CALLBACK_CTRL                          131\r
814 # define BIO_F_BIO_CTRL                                   103\r
815 # define BIO_F_BIO_GETHOSTBYNAME                          120\r
816 # define BIO_F_BIO_GETS                                   104\r
817 # define BIO_F_BIO_GET_ACCEPT_SOCKET                      105\r
818 # define BIO_F_BIO_GET_HOST_IP                            106\r
819 # define BIO_F_BIO_GET_PORT                               107\r
820 # define BIO_F_BIO_MAKE_PAIR                              121\r
821 # define BIO_F_BIO_NEW                                    108\r
822 # define BIO_F_BIO_NEW_FILE                               109\r
823 # define BIO_F_BIO_NEW_MEM_BUF                            126\r
824 # define BIO_F_BIO_NREAD                                  123\r
825 # define BIO_F_BIO_NREAD0                                 124\r
826 # define BIO_F_BIO_NWRITE                                 125\r
827 # define BIO_F_BIO_NWRITE0                                122\r
828 # define BIO_F_BIO_PUTS                                   110\r
829 # define BIO_F_BIO_READ                                   111\r
830 # define BIO_F_BIO_SOCK_INIT                              112\r
831 # define BIO_F_BIO_WRITE                                  113\r
832 # define BIO_F_BUFFER_CTRL                                114\r
833 # define BIO_F_CONN_CTRL                                  127\r
834 # define BIO_F_CONN_STATE                                 115\r
835 # define BIO_F_DGRAM_SCTP_READ                            132\r
836 # define BIO_F_DGRAM_SCTP_WRITE                           133\r
837 # define BIO_F_FILE_CTRL                                  116\r
838 # define BIO_F_FILE_READ                                  130\r
839 # define BIO_F_LINEBUFFER_CTRL                            129\r
840 # define BIO_F_MEM_READ                                   128\r
841 # define BIO_F_MEM_WRITE                                  117\r
842 # define BIO_F_SSL_NEW                                    118\r
843 # define BIO_F_WSASTARTUP                                 119\r
844 \r
845 /* Reason codes. */\r
846 # define BIO_R_ACCEPT_ERROR                               100\r
847 # define BIO_R_BAD_FOPEN_MODE                             101\r
848 # define BIO_R_BAD_HOSTNAME_LOOKUP                        102\r
849 # define BIO_R_BROKEN_PIPE                                124\r
850 # define BIO_R_CONNECT_ERROR                              103\r
851 # define BIO_R_EOF_ON_MEMORY_BIO                          127\r
852 # define BIO_R_ERROR_SETTING_NBIO                         104\r
853 # define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPTED_SOCKET      105\r
854 # define BIO_R_ERROR_SETTING_NBIO_ON_ACCEPT_SOCKET        106\r
855 # define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET          107\r
856 # define BIO_R_INVALID_ARGUMENT                           125\r
857 # define BIO_R_INVALID_IP_ADDRESS                         108\r
858 # define BIO_R_IN_USE                                     123\r
859 # define BIO_R_KEEPALIVE                                  109\r
860 # define BIO_R_NBIO_CONNECT_ERROR                         110\r
861 # define BIO_R_NO_ACCEPT_PORT_SPECIFIED                   111\r
862 # define BIO_R_NO_HOSTNAME_SPECIFIED                      112\r
863 # define BIO_R_NO_PORT_DEFINED                            113\r
864 # define BIO_R_NO_PORT_SPECIFIED                          114\r
865 # define BIO_R_NO_SUCH_FILE                               128\r
866 # define BIO_R_NULL_PARAMETER                             115\r
867 # define BIO_R_TAG_MISMATCH                               116\r
868 # define BIO_R_UNABLE_TO_BIND_SOCKET                      117\r
869 # define BIO_R_UNABLE_TO_CREATE_SOCKET                    118\r
870 # define BIO_R_UNABLE_TO_LISTEN_SOCKET                    119\r
871 # define BIO_R_UNINITIALIZED                              120\r
872 # define BIO_R_UNSUPPORTED_METHOD                         121\r
873 # define BIO_R_WRITE_TO_READ_ONLY_BIO                     126\r
874 # define BIO_R_WSASTARTUP                                 122\r
875 \r
876 #ifdef  __cplusplus\r
877 }\r
878 #endif\r
879 #endif\r