1 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
2 | * All rights reserved. |
3 | * |
4 | * This package is an SSL implementation written |
5 | * by Eric Young (eay@cryptsoft.com). |
6 | * The implementation was written so as to conform with Netscapes SSL. |
7 | * |
8 | * This library is free for commercial and non-commercial use as long as |
9 | * the following conditions are aheared to. The following conditions |
10 | * apply to all code found in this distribution, be it the RC4, RSA, |
11 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation |
12 | * included with this distribution is covered by the same copyright terms |
13 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). |
14 | * |
15 | * Copyright remains Eric Young's, and as such any Copyright notices in |
16 | * the code are not to be removed. |
17 | * If this package is used in a product, Eric Young should be given attribution |
18 | * as the author of the parts of the library used. |
19 | * This can be in the form of a textual message at program startup or |
20 | * in documentation (online or textual) provided with the package. |
21 | * |
22 | * Redistribution and use in source and binary forms, with or without |
23 | * modification, are permitted provided that the following conditions |
24 | * are met: |
25 | * 1. Redistributions of source code must retain the copyright |
26 | * notice, this list of conditions and the following disclaimer. |
27 | * 2. Redistributions in binary form must reproduce the above copyright |
28 | * notice, this list of conditions and the following disclaimer in the |
29 | * documentation and/or other materials provided with the distribution. |
30 | * 3. All advertising materials mentioning features or use of this software |
31 | * must display the following acknowledgement: |
32 | * "This product includes cryptographic software written by |
33 | * Eric Young (eay@cryptsoft.com)" |
34 | * The word 'cryptographic' can be left out if the rouines from the library |
35 | * being used are not cryptographic related :-). |
36 | * 4. If you include any Windows specific code (or a derivative thereof) from |
37 | * the apps directory (application code) you must include an acknowledgement: |
38 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" |
39 | * |
40 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND |
41 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
42 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
43 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
44 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
45 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
46 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
47 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
48 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
49 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
50 | * SUCH DAMAGE. |
51 | * |
52 | * The licence and distribution terms for any publically available version or |
53 | * derivative of this code cannot be changed. i.e. this code cannot simply be |
54 | * copied and put under another distribution licence |
55 | * [including the GNU Public Licence.] */ |
56 | |
57 | #ifndef OPENSSL_HEADER_BIO_H |
58 | #define |
59 | |
60 | #include <openssl/base.h> |
61 | |
62 | #include <stdio.h> // For FILE |
63 | |
64 | #include <openssl/buffer.h> |
65 | #include <openssl/err.h> // for ERR_print_errors_fp |
66 | #include <openssl/ex_data.h> |
67 | #include <openssl/stack.h> |
68 | #include <openssl/thread.h> |
69 | |
70 | #if defined(__cplusplus) |
71 | extern "C" { |
72 | #endif |
73 | |
74 | |
75 | // BIO abstracts over a file-descriptor like interface. |
76 | |
77 | |
78 | // Allocation and freeing. |
79 | |
80 | DEFINE_STACK_OF(BIO) |
81 | |
82 | // BIO_new creates a new BIO with the given method and a reference count of one. |
83 | // It returns the fresh |BIO|, or NULL on error. |
84 | OPENSSL_EXPORT BIO *BIO_new(const BIO_METHOD *method); |
85 | |
86 | // BIO_free decrements the reference count of |bio|. If the reference count |
87 | // drops to zero, it calls the destroy callback, if present, on the method and |
88 | // frees |bio| itself. It then repeats that for the next BIO in the chain, if |
89 | // any. |
90 | // |
91 | // It returns one on success or zero otherwise. |
92 | OPENSSL_EXPORT int BIO_free(BIO *bio); |
93 | |
94 | // BIO_vfree performs the same actions as |BIO_free|, but has a void return |
95 | // value. This is provided for API-compat. |
96 | // |
97 | // TODO(fork): remove. |
98 | OPENSSL_EXPORT void BIO_vfree(BIO *bio); |
99 | |
100 | // BIO_up_ref increments the reference count of |bio| and returns one. |
101 | OPENSSL_EXPORT int BIO_up_ref(BIO *bio); |
102 | |
103 | |
104 | // Basic I/O. |
105 | |
106 | // BIO_read attempts to read |len| bytes into |data|. It returns the number of |
107 | // bytes read, zero on EOF, or a negative number on error. |
108 | OPENSSL_EXPORT int BIO_read(BIO *bio, void *data, int len); |
109 | |
110 | // BIO_gets "reads a line" from |bio| and puts at most |size| bytes into |buf|. |
111 | // It returns the number of bytes read or a negative number on error. The |
112 | // phrase "reads a line" is in quotes in the previous sentence because the |
113 | // exact operation depends on the BIO's method. For example, a digest BIO will |
114 | // return the digest in response to a |BIO_gets| call. |
115 | // |
116 | // TODO(fork): audit the set of BIOs that we end up needing. If all actually |
117 | // return a line for this call, remove the warning above. |
118 | OPENSSL_EXPORT int BIO_gets(BIO *bio, char *buf, int size); |
119 | |
120 | // BIO_write writes |len| bytes from |data| to |bio|. It returns the number of |
121 | // bytes written or a negative number on error. |
122 | OPENSSL_EXPORT int BIO_write(BIO *bio, const void *data, int len); |
123 | |
124 | // BIO_write_all writes |len| bytes from |data| to |bio|, looping as necessary. |
125 | // It returns one if all bytes were successfully written and zero on error. |
126 | OPENSSL_EXPORT int BIO_write_all(BIO *bio, const void *data, size_t len); |
127 | |
128 | // BIO_puts writes a NUL terminated string from |buf| to |bio|. It returns the |
129 | // number of bytes written or a negative number on error. |
130 | OPENSSL_EXPORT int BIO_puts(BIO *bio, const char *buf); |
131 | |
132 | // BIO_flush flushes any buffered output. It returns one on success and zero |
133 | // otherwise. |
134 | OPENSSL_EXPORT int BIO_flush(BIO *bio); |
135 | |
136 | |
137 | // Low-level control functions. |
138 | // |
139 | // These are generic functions for sending control requests to a BIO. In |
140 | // general one should use the wrapper functions like |BIO_get_close|. |
141 | |
142 | // BIO_ctrl sends the control request |cmd| to |bio|. The |cmd| argument should |
143 | // be one of the |BIO_C_*| values. |
144 | OPENSSL_EXPORT long BIO_ctrl(BIO *bio, int cmd, long larg, void *parg); |
145 | |
146 | // BIO_ptr_ctrl acts like |BIO_ctrl| but passes the address of a |void*| |
147 | // pointer as |parg| and returns the value that is written to it, or NULL if |
148 | // the control request returns <= 0. |
149 | OPENSSL_EXPORT char *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); |
150 | |
151 | // BIO_int_ctrl acts like |BIO_ctrl| but passes the address of a copy of |iarg| |
152 | // as |parg|. |
153 | OPENSSL_EXPORT long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); |
154 | |
155 | // BIO_reset resets |bio| to its initial state, the precise meaning of which |
156 | // depends on the concrete type of |bio|. It returns one on success and zero |
157 | // otherwise. |
158 | OPENSSL_EXPORT int BIO_reset(BIO *bio); |
159 | |
160 | // BIO_eof returns non-zero when |bio| has reached end-of-file. The precise |
161 | // meaning of which depends on the concrete type of |bio|. Note that in the |
162 | // case of BIO_pair this always returns non-zero. |
163 | OPENSSL_EXPORT int BIO_eof(BIO *bio); |
164 | |
165 | // BIO_set_flags ORs |flags| with |bio->flags|. |
166 | OPENSSL_EXPORT void BIO_set_flags(BIO *bio, int flags); |
167 | |
168 | // BIO_test_flags returns |bio->flags| AND |flags|. |
169 | OPENSSL_EXPORT int BIO_test_flags(const BIO *bio, int flags); |
170 | |
171 | // BIO_should_read returns non-zero if |bio| encountered a temporary error |
172 | // while reading (i.e. EAGAIN), indicating that the caller should retry the |
173 | // read. |
174 | OPENSSL_EXPORT int BIO_should_read(const BIO *bio); |
175 | |
176 | // BIO_should_write returns non-zero if |bio| encountered a temporary error |
177 | // while writing (i.e. EAGAIN), indicating that the caller should retry the |
178 | // write. |
179 | OPENSSL_EXPORT int BIO_should_write(const BIO *bio); |
180 | |
181 | // BIO_should_retry returns non-zero if the reason that caused a failed I/O |
182 | // operation is temporary and thus the operation should be retried. Otherwise, |
183 | // it was a permanent error and it returns zero. |
184 | OPENSSL_EXPORT int BIO_should_retry(const BIO *bio); |
185 | |
186 | // BIO_should_io_special returns non-zero if |bio| encountered a temporary |
187 | // error while performing a special I/O operation, indicating that the caller |
188 | // should retry. The operation that caused the error is returned by |
189 | // |BIO_get_retry_reason|. |
190 | OPENSSL_EXPORT int BIO_should_io_special(const BIO *bio); |
191 | |
192 | // BIO_RR_CONNECT indicates that a connect would have blocked |
193 | #define BIO_RR_CONNECT 0x02 |
194 | |
195 | // BIO_RR_ACCEPT indicates that an accept would have blocked |
196 | #define BIO_RR_ACCEPT 0x03 |
197 | |
198 | // BIO_get_retry_reason returns the special I/O operation that needs to be |
199 | // retried. The return value is one of the |BIO_RR_*| values. |
200 | OPENSSL_EXPORT int BIO_get_retry_reason(const BIO *bio); |
201 | |
202 | // BIO_clear_flags ANDs |bio->flags| with the bitwise-complement of |flags|. |
203 | OPENSSL_EXPORT void BIO_clear_flags(BIO *bio, int flags); |
204 | |
205 | // BIO_set_retry_read sets the |BIO_FLAGS_READ| and |BIO_FLAGS_SHOULD_RETRY| |
206 | // flags on |bio|. |
207 | OPENSSL_EXPORT void BIO_set_retry_read(BIO *bio); |
208 | |
209 | // BIO_set_retry_write sets the |BIO_FLAGS_WRITE| and |BIO_FLAGS_SHOULD_RETRY| |
210 | // flags on |bio|. |
211 | OPENSSL_EXPORT void BIO_set_retry_write(BIO *bio); |
212 | |
213 | // BIO_get_retry_flags gets the |BIO_FLAGS_READ|, |BIO_FLAGS_WRITE|, |
214 | // |BIO_FLAGS_IO_SPECIAL| and |BIO_FLAGS_SHOULD_RETRY| flags from |bio|. |
215 | OPENSSL_EXPORT int BIO_get_retry_flags(BIO *bio); |
216 | |
217 | // BIO_clear_retry_flags clears the |BIO_FLAGS_READ|, |BIO_FLAGS_WRITE|, |
218 | // |BIO_FLAGS_IO_SPECIAL| and |BIO_FLAGS_SHOULD_RETRY| flags from |bio|. |
219 | OPENSSL_EXPORT void BIO_clear_retry_flags(BIO *bio); |
220 | |
221 | // BIO_method_type returns the type of |bio|, which is one of the |BIO_TYPE_*| |
222 | // values. |
223 | OPENSSL_EXPORT int BIO_method_type(const BIO *bio); |
224 | |
225 | // These are passed to the BIO callback |
226 | #define BIO_CB_FREE 0x01 |
227 | #define BIO_CB_READ 0x02 |
228 | #define BIO_CB_WRITE 0x03 |
229 | #define BIO_CB_PUTS 0x04 |
230 | #define BIO_CB_GETS 0x05 |
231 | #define BIO_CB_CTRL 0x06 |
232 | |
233 | // The callback is called before and after the underling operation, |
234 | // The BIO_CB_RETURN flag indicates if it is after the call |
235 | #define BIO_CB_RETURN 0x80 |
236 | |
237 | // bio_info_cb is the type of a callback function that can be called for most |
238 | // BIO operations. The |event| argument is one of |BIO_CB_*| and can be ORed |
239 | // with |BIO_CB_RETURN| if the callback is being made after the operation in |
240 | // question. In that case, |return_value| will contain the return value from |
241 | // the operation. |
242 | typedef long (*bio_info_cb)(BIO *bio, int event, const char *parg, int cmd, |
243 | long larg, long return_value); |
244 | |
245 | // BIO_callback_ctrl allows the callback function to be manipulated. The |cmd| |
246 | // arg will generally be |BIO_CTRL_SET_CALLBACK| but arbitrary command values |
247 | // can be interpreted by the |BIO|. |
248 | OPENSSL_EXPORT long BIO_callback_ctrl(BIO *bio, int cmd, bio_info_cb fp); |
249 | |
250 | // BIO_pending returns the number of bytes pending to be read. |
251 | OPENSSL_EXPORT size_t BIO_pending(const BIO *bio); |
252 | |
253 | // BIO_ctrl_pending calls |BIO_pending| and exists only for compatibility with |
254 | // OpenSSL. |
255 | OPENSSL_EXPORT size_t BIO_ctrl_pending(const BIO *bio); |
256 | |
257 | // BIO_wpending returns the number of bytes pending to be written. |
258 | OPENSSL_EXPORT size_t BIO_wpending(const BIO *bio); |
259 | |
260 | // BIO_set_close sets the close flag for |bio|. The meaning of which depends on |
261 | // the type of |bio| but, for example, a memory BIO interprets the close flag |
262 | // as meaning that it owns its buffer. It returns one on success and zero |
263 | // otherwise. |
264 | OPENSSL_EXPORT int BIO_set_close(BIO *bio, int close_flag); |
265 | |
266 | // BIO_number_read returns the number of bytes that have been read from |
267 | // |bio|. |
268 | OPENSSL_EXPORT size_t BIO_number_read(const BIO *bio); |
269 | |
270 | // BIO_number_written returns the number of bytes that have been written to |
271 | // |bio|. |
272 | OPENSSL_EXPORT size_t BIO_number_written(const BIO *bio); |
273 | |
274 | |
275 | // Managing chains of BIOs. |
276 | // |
277 | // BIOs can be put into chains where the output of one is used as the input of |
278 | // the next etc. The most common case is a buffering BIO, which accepts and |
279 | // buffers writes until flushed into the next BIO in the chain. |
280 | |
281 | // BIO_push adds |appended_bio| to the end of the chain with |bio| at the head. |
282 | // It returns |bio|. Note that |appended_bio| may be the head of a chain itself |
283 | // and thus this function can be used to join two chains. |
284 | // |
285 | // BIO_push takes ownership of the caller's reference to |appended_bio|. |
286 | OPENSSL_EXPORT BIO *BIO_push(BIO *bio, BIO *appended_bio); |
287 | |
288 | // BIO_pop removes |bio| from the head of a chain and returns the next BIO in |
289 | // the chain, or NULL if there is no next BIO. |
290 | // |
291 | // The caller takes ownership of the chain's reference to |bio|. |
292 | OPENSSL_EXPORT BIO *BIO_pop(BIO *bio); |
293 | |
294 | // BIO_next returns the next BIO in the chain after |bio|, or NULL if there is |
295 | // no such BIO. |
296 | OPENSSL_EXPORT BIO *BIO_next(BIO *bio); |
297 | |
298 | // BIO_free_all calls |BIO_free|. |
299 | // |
300 | // TODO(fork): update callers and remove. |
301 | OPENSSL_EXPORT void BIO_free_all(BIO *bio); |
302 | |
303 | // BIO_find_type walks a chain of BIOs and returns the first that matches |
304 | // |type|, which is one of the |BIO_TYPE_*| values. |
305 | OPENSSL_EXPORT BIO *BIO_find_type(BIO *bio, int type); |
306 | |
307 | // BIO_copy_next_retry sets the retry flags and |retry_reason| of |bio| from |
308 | // the next BIO in the chain. |
309 | OPENSSL_EXPORT void BIO_copy_next_retry(BIO *bio); |
310 | |
311 | |
312 | // Printf functions. |
313 | |
314 | // BIO_printf behaves like |printf| but outputs to |bio| rather than a |FILE|. |
315 | // It returns the number of bytes written or a negative number on error. |
316 | OPENSSL_EXPORT int BIO_printf(BIO *bio, const char *format, ...) |
317 | OPENSSL_PRINTF_FORMAT_FUNC(2, 3); |
318 | |
319 | |
320 | // Utility functions. |
321 | |
322 | // BIO_indent prints min(|indent|, |max_indent|) spaces. It returns one on |
323 | // success and zero otherwise. |
324 | OPENSSL_EXPORT int BIO_indent(BIO *bio, unsigned indent, unsigned max_indent); |
325 | |
326 | // BIO_hexdump writes a hex dump of |data| to |bio|. Each line will be indented |
327 | // by |indent| spaces. |
328 | OPENSSL_EXPORT int BIO_hexdump(BIO *bio, const uint8_t *data, size_t len, |
329 | unsigned indent); |
330 | |
331 | // ERR_print_errors prints the current contents of the error stack to |bio| |
332 | // using human readable strings where possible. |
333 | OPENSSL_EXPORT void ERR_print_errors(BIO *bio); |
334 | |
335 | // BIO_read_asn1 reads a single ASN.1 object from |bio|. If successful it sets |
336 | // |*out| to be an allocated buffer (that should be freed with |OPENSSL_free|), |
337 | // |*out_size| to the length, in bytes, of that buffer and returns one. |
338 | // Otherwise it returns zero. |
339 | // |
340 | // If the length of the object is greater than |max_len| or 2^32 then the |
341 | // function will fail. Long-form tags are not supported. If the length of the |
342 | // object is indefinite the full contents of |bio| are read, unless it would be |
343 | // greater than |max_len|, in which case the function fails. |
344 | // |
345 | // If the function fails then some unknown amount of data may have been read |
346 | // from |bio|. |
347 | OPENSSL_EXPORT int BIO_read_asn1(BIO *bio, uint8_t **out, size_t *out_len, |
348 | size_t max_len); |
349 | |
350 | |
351 | // Memory BIOs. |
352 | // |
353 | // Memory BIOs can be used as a read-only source (with |BIO_new_mem_buf|) or a |
354 | // writable sink (with |BIO_new|, |BIO_s_mem| and |BIO_mem_contents|). Data |
355 | // written to a writable, memory BIO can be recalled by reading from it. |
356 | // |
357 | // Calling |BIO_reset| on a read-only BIO resets it to the original contents. |
358 | // On a writable BIO, it clears any data. |
359 | // |
360 | // If the close flag is set to |BIO_NOCLOSE| (not the default) then the |
361 | // underlying |BUF_MEM| will not be freed when the |BIO| is freed. |
362 | // |
363 | // Memory BIOs support |BIO_gets| and |BIO_puts|. |
364 | // |
365 | // |BIO_ctrl_pending| returns the number of bytes currently stored. |
366 | |
367 | // BIO_NOCLOSE and |BIO_CLOSE| can be used as symbolic arguments when a "close |
368 | // flag" is passed to a BIO function. |
369 | #define BIO_NOCLOSE 0 |
370 | #define BIO_CLOSE 1 |
371 | |
372 | // BIO_s_mem returns a |BIO_METHOD| that uses a in-memory buffer. |
373 | OPENSSL_EXPORT const BIO_METHOD *BIO_s_mem(void); |
374 | |
375 | // BIO_new_mem_buf creates read-only BIO that reads from |len| bytes at |buf|. |
376 | // It does not take ownership of |buf|. It returns the BIO or NULL on error. |
377 | // |
378 | // If |len| is negative, then |buf| is treated as a NUL-terminated string, but |
379 | // don't depend on this in new code. |
380 | OPENSSL_EXPORT BIO *BIO_new_mem_buf(const void *buf, int len); |
381 | |
382 | // BIO_mem_contents sets |*out_contents| to point to the current contents of |
383 | // |bio| and |*out_len| to contain the length of that data. It returns one on |
384 | // success and zero otherwise. |
385 | OPENSSL_EXPORT int BIO_mem_contents(const BIO *bio, |
386 | const uint8_t **out_contents, |
387 | size_t *out_len); |
388 | |
389 | // BIO_get_mem_data sets |*contents| to point to the current contents of |bio| |
390 | // and returns the length of the data. |
391 | // |
392 | // WARNING: don't use this, use |BIO_mem_contents|. A return value of zero from |
393 | // this function can mean either that it failed or that the memory buffer is |
394 | // empty. |
395 | OPENSSL_EXPORT long BIO_get_mem_data(BIO *bio, char **contents); |
396 | |
397 | // BIO_get_mem_ptr sets |*out| to a BUF_MEM containing the current contents of |
398 | // |bio|. It returns one on success or zero on error. |
399 | OPENSSL_EXPORT int BIO_get_mem_ptr(BIO *bio, BUF_MEM **out); |
400 | |
401 | // BIO_set_mem_buf sets |b| as the contents of |bio|. If |take_ownership| is |
402 | // non-zero, then |b| will be freed when |bio| is closed. Returns one on |
403 | // success or zero otherwise. |
404 | OPENSSL_EXPORT int BIO_set_mem_buf(BIO *bio, BUF_MEM *b, int take_ownership); |
405 | |
406 | // BIO_set_mem_eof_return sets the value that will be returned from reading |
407 | // |bio| when empty. If |eof_value| is zero then an empty memory BIO will |
408 | // return EOF (that is it will return zero and |BIO_should_retry| will be |
409 | // false). If |eof_value| is non zero then it will return |eof_value| when it |
410 | // is empty and it will set the read retry flag (that is |BIO_read_retry| is |
411 | // true). To avoid ambiguity with a normal positive return value, |eof_value| |
412 | // should be set to a negative value, typically -1. |
413 | // |
414 | // For a read-only BIO, the default is zero (EOF). For a writable BIO, the |
415 | // default is -1 so that additional data can be written once exhausted. |
416 | OPENSSL_EXPORT int BIO_set_mem_eof_return(BIO *bio, int eof_value); |
417 | |
418 | |
419 | // File descriptor BIOs. |
420 | // |
421 | // File descriptor BIOs are wrappers around the system's |read| and |write| |
422 | // functions. If the close flag is set then then |close| is called on the |
423 | // underlying file descriptor when the BIO is freed. |
424 | // |
425 | // |BIO_reset| attempts to seek the file pointer to the start of file using |
426 | // |lseek|. |
427 | |
428 | // BIO_s_fd returns a |BIO_METHOD| for file descriptor fds. |
429 | OPENSSL_EXPORT const BIO_METHOD *BIO_s_fd(void); |
430 | |
431 | // BIO_new_fd creates a new file descriptor BIO wrapping |fd|. If |close_flag| |
432 | // is non-zero, then |fd| will be closed when the BIO is. |
433 | OPENSSL_EXPORT BIO *BIO_new_fd(int fd, int close_flag); |
434 | |
435 | // BIO_set_fd sets the file descriptor of |bio| to |fd|. If |close_flag| is |
436 | // non-zero then |fd| will be closed when |bio| is. It returns one on success |
437 | // or zero on error. |
438 | // |
439 | // This function may also be used with socket BIOs (see |BIO_s_socket| and |
440 | // |BIO_new_socket|). |
441 | OPENSSL_EXPORT int BIO_set_fd(BIO *bio, int fd, int close_flag); |
442 | |
443 | // BIO_get_fd returns the file descriptor currently in use by |bio| or -1 if |
444 | // |bio| does not wrap a file descriptor. If there is a file descriptor and |
445 | // |out_fd| is not NULL, it also sets |*out_fd| to the file descriptor. |
446 | // |
447 | // This function may also be used with socket BIOs (see |BIO_s_socket| and |
448 | // |BIO_new_socket|). |
449 | OPENSSL_EXPORT int BIO_get_fd(BIO *bio, int *out_fd); |
450 | |
451 | |
452 | // File BIOs. |
453 | // |
454 | // File BIOs are wrappers around a C |FILE| object. |
455 | // |
456 | // |BIO_flush| on a file BIO calls |fflush| on the wrapped stream. |
457 | // |
458 | // |BIO_reset| attempts to seek the file pointer to the start of file using |
459 | // |fseek|. |
460 | // |
461 | // Setting the close flag causes |fclose| to be called on the stream when the |
462 | // BIO is freed. |
463 | |
464 | // BIO_s_file returns a BIO_METHOD that wraps a |FILE|. |
465 | OPENSSL_EXPORT const BIO_METHOD *BIO_s_file(void); |
466 | |
467 | // BIO_new_file creates a file BIO by opening |filename| with the given mode. |
468 | // See the |fopen| manual page for details of the mode argument. |
469 | OPENSSL_EXPORT BIO *BIO_new_file(const char *filename, const char *mode); |
470 | |
471 | // BIO_new_fp creates a new file BIO that wraps the given |FILE|. If |
472 | // |close_flag| is |BIO_CLOSE|, then |fclose| will be called on |stream| when |
473 | // the BIO is closed. |
474 | OPENSSL_EXPORT BIO *BIO_new_fp(FILE *stream, int close_flag); |
475 | |
476 | // BIO_get_fp sets |*out_file| to the current |FILE| for |bio|. It returns one |
477 | // on success and zero otherwise. |
478 | OPENSSL_EXPORT int BIO_get_fp(BIO *bio, FILE **out_file); |
479 | |
480 | // BIO_set_fp sets the |FILE| for |bio|. If |close_flag| is |BIO_CLOSE| then |
481 | // |fclose| will be called on |file| when |bio| is closed. It returns one on |
482 | // success and zero otherwise. |
483 | OPENSSL_EXPORT int BIO_set_fp(BIO *bio, FILE *file, int close_flag); |
484 | |
485 | // BIO_read_filename opens |filename| for reading and sets the result as the |
486 | // |FILE| for |bio|. It returns one on success and zero otherwise. The |FILE| |
487 | // will be closed when |bio| is freed. |
488 | OPENSSL_EXPORT int BIO_read_filename(BIO *bio, const char *filename); |
489 | |
490 | // BIO_write_filename opens |filename| for writing and sets the result as the |
491 | // |FILE| for |bio|. It returns one on success and zero otherwise. The |FILE| |
492 | // will be closed when |bio| is freed. |
493 | OPENSSL_EXPORT int BIO_write_filename(BIO *bio, const char *filename); |
494 | |
495 | // BIO_append_filename opens |filename| for appending and sets the result as |
496 | // the |FILE| for |bio|. It returns one on success and zero otherwise. The |
497 | // |FILE| will be closed when |bio| is freed. |
498 | OPENSSL_EXPORT int BIO_append_filename(BIO *bio, const char *filename); |
499 | |
500 | // BIO_rw_filename opens |filename| for reading and writing and sets the result |
501 | // as the |FILE| for |bio|. It returns one on success and zero otherwise. The |
502 | // |FILE| will be closed when |bio| is freed. |
503 | OPENSSL_EXPORT int BIO_rw_filename(BIO *bio, const char *filename); |
504 | |
505 | |
506 | // Socket BIOs. |
507 | // |
508 | // Socket BIOs behave like file descriptor BIOs but, on Windows systems, wrap |
509 | // the system's |recv| and |send| functions instead of |read| and |write|. On |
510 | // Windows, file descriptors are provided by C runtime and are not |
511 | // interchangeable with sockets. |
512 | // |
513 | // Socket BIOs may be used with |BIO_set_fd| and |BIO_get_fd|. |
514 | // |
515 | // TODO(davidben): Add separate APIs and fix the internals to use |SOCKET|s |
516 | // around rather than rely on int casts. |
517 | |
518 | OPENSSL_EXPORT const BIO_METHOD *BIO_s_socket(void); |
519 | |
520 | // BIO_new_socket allocates and initialises a fresh BIO which will read and |
521 | // write to the socket |fd|. If |close_flag| is |BIO_CLOSE| then closing the |
522 | // BIO will close |fd|. It returns the fresh |BIO| or NULL on error. |
523 | OPENSSL_EXPORT BIO *BIO_new_socket(int fd, int close_flag); |
524 | |
525 | |
526 | // Connect BIOs. |
527 | // |
528 | // A connection BIO creates a network connection and transfers data over the |
529 | // resulting socket. |
530 | |
531 | OPENSSL_EXPORT const BIO_METHOD *BIO_s_connect(void); |
532 | |
533 | // BIO_new_connect returns a BIO that connects to the given hostname and port. |
534 | // The |host_and_optional_port| argument should be of the form |
535 | // "www.example.com" or "www.example.com:443". If the port is omitted, it must |
536 | // be provided with |BIO_set_conn_port|. |
537 | // |
538 | // It returns the new BIO on success, or NULL on error. |
539 | OPENSSL_EXPORT BIO *BIO_new_connect(const char *host_and_optional_port); |
540 | |
541 | // BIO_set_conn_hostname sets |host_and_optional_port| as the hostname and |
542 | // optional port that |bio| will connect to. If the port is omitted, it must be |
543 | // provided with |BIO_set_conn_port|. |
544 | // |
545 | // It returns one on success and zero otherwise. |
546 | OPENSSL_EXPORT int BIO_set_conn_hostname(BIO *bio, |
547 | const char *host_and_optional_port); |
548 | |
549 | // BIO_set_conn_port sets |port_str| as the port or service name that |bio| |
550 | // will connect to. It returns one on success and zero otherwise. |
551 | OPENSSL_EXPORT int BIO_set_conn_port(BIO *bio, const char *port_str); |
552 | |
553 | // BIO_set_conn_int_port sets |*port| as the port that |bio| will connect to. |
554 | // It returns one on success and zero otherwise. |
555 | OPENSSL_EXPORT int BIO_set_conn_int_port(BIO *bio, const int *port); |
556 | |
557 | // BIO_set_nbio sets whether |bio| will use non-blocking I/O operations. It |
558 | // returns one on success and zero otherwise. |
559 | OPENSSL_EXPORT int BIO_set_nbio(BIO *bio, int on); |
560 | |
561 | // BIO_do_connect connects |bio| if it has not been connected yet. It returns |
562 | // one on success and <= 0 otherwise. |
563 | OPENSSL_EXPORT int BIO_do_connect(BIO *bio); |
564 | |
565 | |
566 | // Datagram BIOs. |
567 | // |
568 | // TODO(fork): not implemented. |
569 | |
570 | #define BIO_CTRL_DGRAM_QUERY_MTU 40 // as kernel for current MTU |
571 | |
572 | #define BIO_CTRL_DGRAM_SET_MTU 42 /* set cached value for MTU. want to use |
573 | this if asking the kernel fails */ |
574 | |
575 | #define BIO_CTRL_DGRAM_MTU_EXCEEDED 43 /* check whether the MTU was exceed in |
576 | the previous write operation. */ |
577 | |
578 | // BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT is unsupported as it is unused by consumers |
579 | // and depends on |timeval|, which is not 2038-clean on all platforms. |
580 | |
581 | #define BIO_CTRL_DGRAM_GET_PEER 46 |
582 | |
583 | #define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 |
584 | |
585 | |
586 | // BIO Pairs. |
587 | // |
588 | // BIO pairs provide a "loopback" like system: a pair of BIOs where data |
589 | // written to one can be read from the other and vice versa. |
590 | |
591 | // BIO_new_bio_pair sets |*out1| and |*out2| to two freshly created BIOs where |
592 | // data written to one can be read from the other and vice versa. The |
593 | // |writebuf1| argument gives the size of the buffer used in |*out1| and |
594 | // |writebuf2| for |*out2|. It returns one on success and zero on error. |
595 | OPENSSL_EXPORT int BIO_new_bio_pair(BIO **out1, size_t writebuf1, BIO **out2, |
596 | size_t writebuf2); |
597 | |
598 | // BIO_ctrl_get_read_request returns the number of bytes that the other side of |
599 | // |bio| tried (unsuccessfully) to read. |
600 | OPENSSL_EXPORT size_t BIO_ctrl_get_read_request(BIO *bio); |
601 | |
602 | // BIO_ctrl_get_write_guarantee returns the number of bytes that |bio| (which |
603 | // must have been returned by |BIO_new_bio_pair|) will accept on the next |
604 | // |BIO_write| call. |
605 | OPENSSL_EXPORT size_t BIO_ctrl_get_write_guarantee(BIO *bio); |
606 | |
607 | // BIO_shutdown_wr marks |bio| as closed, from the point of view of the other |
608 | // side of the pair. Future |BIO_write| calls on |bio| will fail. It returns |
609 | // one on success and zero otherwise. |
610 | OPENSSL_EXPORT int BIO_shutdown_wr(BIO *bio); |
611 | |
612 | |
613 | // Custom BIOs. |
614 | // |
615 | // Consumers can create custom |BIO|s by filling in a |BIO_METHOD| and using |
616 | // low-level control functions to set state. |
617 | |
618 | // BIO_get_new_index returns a new "type" value for a custom |BIO|. |
619 | OPENSSL_EXPORT int BIO_get_new_index(void); |
620 | |
621 | // BIO_meth_new returns a newly-allocated |BIO_METHOD| or NULL on allocation |
622 | // error. The |type| specifies the type that will be returned by |
623 | // |BIO_method_type|. If this is unnecessary, this value may be zero. The |name| |
624 | // parameter is vestigial and may be NULL. |
625 | // |
626 | // Use the |BIO_meth_set_*| functions below to initialize the |BIO_METHOD|. The |
627 | // function implementations may use |BIO_set_data| and |BIO_get_data| to add |
628 | // method-specific state to associated |BIO|s. Additionally, |BIO_set_init| must |
629 | // be called after an associated |BIO| is fully initialized. State set via |
630 | // |BIO_set_data| may be released by configuring a destructor with |
631 | // |BIO_meth_set_destroy|. |
632 | OPENSSL_EXPORT BIO_METHOD *BIO_meth_new(int type, const char *name); |
633 | |
634 | // BIO_meth_free releases memory associated with |method|. |
635 | OPENSSL_EXPORT void BIO_meth_free(BIO_METHOD *method); |
636 | |
637 | // BIO_meth_set_create sets a function to be called on |BIO_new| for |method| |
638 | // and returns one. The function should return one on success and zero on |
639 | // error. |
640 | OPENSSL_EXPORT int BIO_meth_set_create(BIO_METHOD *method, |
641 | int (*create)(BIO *)); |
642 | |
643 | // BIO_meth_set_destroy sets a function to release data associated with a |BIO| |
644 | // and returns one. The function's return value is ignored. |
645 | OPENSSL_EXPORT int BIO_meth_set_destroy(BIO_METHOD *method, |
646 | int (*destroy)(BIO *)); |
647 | |
648 | // BIO_meth_set_write sets the implementation of |BIO_write| for |method| and |
649 | // returns one. |BIO_METHOD|s which implement |BIO_write| should also implement |
650 | // |BIO_CTRL_FLUSH|. (See |BIO_meth_set_ctrl|.) |
651 | OPENSSL_EXPORT int BIO_meth_set_write(BIO_METHOD *method, |
652 | int (*write)(BIO *, const char *, int)); |
653 | |
654 | // BIO_meth_set_read sets the implementation of |BIO_read| for |method| and |
655 | // returns one. |
656 | OPENSSL_EXPORT int BIO_meth_set_read(BIO_METHOD *method, |
657 | int (*read)(BIO *, char *, int)); |
658 | |
659 | // BIO_meth_set_gets sets the implementation of |BIO_gets| for |method| and |
660 | // returns one. |
661 | OPENSSL_EXPORT int BIO_meth_set_gets(BIO_METHOD *method, |
662 | int (*gets)(BIO *, char *, int)); |
663 | |
664 | // BIO_meth_set_ctrl sets the implementation of |BIO_ctrl| for |method| and |
665 | // returns one. |
666 | OPENSSL_EXPORT int BIO_meth_set_ctrl(BIO_METHOD *method, |
667 | long (*ctrl)(BIO *, int, long, void *)); |
668 | |
669 | // BIO_set_data sets custom data on |bio|. It may be retried with |
670 | // |BIO_get_data|. |
671 | OPENSSL_EXPORT void BIO_set_data(BIO *bio, void *ptr); |
672 | |
673 | // BIO_get_data returns custom data on |bio| set by |BIO_get_data|. |
674 | OPENSSL_EXPORT void *BIO_get_data(BIO *bio); |
675 | |
676 | // BIO_set_init sets whether |bio| has been fully initialized. Until fully |
677 | // initialized, |BIO_read| and |BIO_write| will fail. |
678 | OPENSSL_EXPORT void BIO_set_init(BIO *bio, int init); |
679 | |
680 | // BIO_get_init returns whether |bio| has been fully initialized. |
681 | OPENSSL_EXPORT int BIO_get_init(BIO *bio); |
682 | |
683 | // These are values of the |cmd| argument to |BIO_ctrl|. |
684 | |
685 | // BIO_CTRL_RESET implements |BIO_reset|. The arguments are unused. |
686 | #define BIO_CTRL_RESET 1 |
687 | |
688 | // BIO_CTRL_EOF implements |BIO_eof|. The arguments are unused. |
689 | #define BIO_CTRL_EOF 2 |
690 | |
691 | // BIO_CTRL_INFO is a legacy command that returns information specific to the |
692 | // type of |BIO|. It is not safe to call generically and should not be |
693 | // implemented in new |BIO| types. |
694 | #define BIO_CTRL_INFO 3 |
695 | |
696 | // BIO_CTRL_GET_CLOSE returns the close flag set by |BIO_CTRL_SET_CLOSE|. The |
697 | // arguments are unused. |
698 | #define BIO_CTRL_GET_CLOSE 8 |
699 | |
700 | // BIO_CTRL_SET_CLOSE implements |BIO_set_close|. The |larg| argument is the |
701 | // close flag. |
702 | #define BIO_CTRL_SET_CLOSE 9 |
703 | |
704 | // BIO_CTRL_PENDING implements |BIO_pending|. The arguments are unused. |
705 | #define BIO_CTRL_PENDING 10 |
706 | |
707 | // BIO_CTRL_FLUSH implements |BIO_flush|. The arguments are unused. |
708 | #define BIO_CTRL_FLUSH 11 |
709 | |
710 | // BIO_CTRL_WPENDING implements |BIO_wpending|. The arguments are unused. |
711 | #define BIO_CTRL_WPENDING 13 |
712 | |
713 | // BIO_CTRL_SET_CALLBACK sets an informational callback of type |
714 | // int cb(BIO *bio, int state, int ret) |
715 | #define BIO_CTRL_SET_CALLBACK 14 |
716 | |
717 | // BIO_CTRL_GET_CALLBACK returns the callback set by |BIO_CTRL_SET_CALLBACK|. |
718 | #define BIO_CTRL_GET_CALLBACK 15 |
719 | |
720 | // The following are never used, but are defined to aid porting existing code. |
721 | #define BIO_CTRL_SET 4 |
722 | #define BIO_CTRL_GET 5 |
723 | #define BIO_CTRL_PUSH 6 |
724 | #define BIO_CTRL_POP 7 |
725 | #define BIO_CTRL_DUP 12 |
726 | #define BIO_CTRL_SET_FILENAME 30 |
727 | |
728 | |
729 | // Deprecated functions. |
730 | |
731 | // BIO_f_base64 returns a filter |BIO| that base64-encodes data written into |
732 | // it, and decodes data read from it. |BIO_gets| is not supported. Call |
733 | // |BIO_flush| when done writing, to signal that no more data are to be |
734 | // encoded. The flag |BIO_FLAGS_BASE64_NO_NL| may be set to encode all the data |
735 | // on one line. |
736 | // |
737 | // Use |EVP_EncodeBlock| and |EVP_DecodeBase64| instead. |
738 | OPENSSL_EXPORT const BIO_METHOD *BIO_f_base64(void); |
739 | |
740 | OPENSSL_EXPORT void BIO_set_retry_special(BIO *bio); |
741 | |
742 | // BIO_set_write_buffer_size returns zero. |
743 | OPENSSL_EXPORT int BIO_set_write_buffer_size(BIO *bio, int buffer_size); |
744 | |
745 | // BIO_set_shutdown sets a method-specific "shutdown" bit on |bio|. |
746 | OPENSSL_EXPORT void BIO_set_shutdown(BIO *bio, int shutdown); |
747 | |
748 | // BIO_get_shutdown returns the method-specific "shutdown" bit. |
749 | OPENSSL_EXPORT int BIO_get_shutdown(BIO *bio); |
750 | |
751 | // BIO_meth_set_puts returns one. |BIO_puts| is implemented with |BIO_write| in |
752 | // BoringSSL. |
753 | OPENSSL_EXPORT int BIO_meth_set_puts(BIO_METHOD *method, |
754 | int (*puts)(BIO *, const char *)); |
755 | |
756 | |
757 | // Private functions |
758 | |
759 | #define BIO_FLAGS_READ 0x01 |
760 | #define BIO_FLAGS_WRITE 0x02 |
761 | #define BIO_FLAGS_IO_SPECIAL 0x04 |
762 | #define BIO_FLAGS_RWS (BIO_FLAGS_READ | BIO_FLAGS_WRITE | BIO_FLAGS_IO_SPECIAL) |
763 | #define BIO_FLAGS_SHOULD_RETRY 0x08 |
764 | #define BIO_FLAGS_BASE64_NO_NL 0x100 |
765 | // BIO_FLAGS_MEM_RDONLY is used with memory BIOs. It means we shouldn't free up |
766 | // or change the data in any way. |
767 | #define BIO_FLAGS_MEM_RDONLY 0x200 |
768 | |
769 | // These are the 'types' of BIOs |
770 | #define BIO_TYPE_NONE 0 |
771 | #define BIO_TYPE_MEM (1 | 0x0400) |
772 | #define BIO_TYPE_FILE (2 | 0x0400) |
773 | #define BIO_TYPE_FD (4 | 0x0400 | 0x0100) |
774 | #define BIO_TYPE_SOCKET (5 | 0x0400 | 0x0100) |
775 | #define BIO_TYPE_NULL (6 | 0x0400) |
776 | #define BIO_TYPE_SSL (7 | 0x0200) |
777 | #define BIO_TYPE_MD (8 | 0x0200) // passive filter |
778 | #define BIO_TYPE_BUFFER (9 | 0x0200) // filter |
779 | #define BIO_TYPE_CIPHER (10 | 0x0200) // filter |
780 | #define BIO_TYPE_BASE64 (11 | 0x0200) // filter |
781 | #define BIO_TYPE_CONNECT (12 | 0x0400 | 0x0100) // socket - connect |
782 | #define BIO_TYPE_ACCEPT (13 | 0x0400 | 0x0100) // socket for accept |
783 | #define BIO_TYPE_PROXY_CLIENT (14 | 0x0200) // client proxy BIO |
784 | #define BIO_TYPE_PROXY_SERVER (15 | 0x0200) // server proxy BIO |
785 | #define BIO_TYPE_NBIO_TEST (16 | 0x0200) // server proxy BIO |
786 | #define BIO_TYPE_NULL_FILTER (17 | 0x0200) |
787 | #define BIO_TYPE_BER (18 | 0x0200) // BER -> bin filter |
788 | #define BIO_TYPE_BIO (19 | 0x0400) // (half a) BIO pair |
789 | #define BIO_TYPE_LINEBUFFER (20 | 0x0200) // filter |
790 | #define BIO_TYPE_DGRAM (21 | 0x0400 | 0x0100) |
791 | #define BIO_TYPE_ASN1 (22 | 0x0200) // filter |
792 | #define BIO_TYPE_COMP (23 | 0x0200) // filter |
793 | |
794 | // BIO_TYPE_DESCRIPTOR denotes that the |BIO| responds to the |BIO_C_SET_FD| |
795 | // (|BIO_set_fd|) and |BIO_C_GET_FD| (|BIO_get_fd|) control hooks. |
796 | #define BIO_TYPE_DESCRIPTOR 0x0100 // socket, fd, connect or accept |
797 | #define BIO_TYPE_FILTER 0x0200 |
798 | #define BIO_TYPE_SOURCE_SINK 0x0400 |
799 | |
800 | // BIO_TYPE_START is the first user-allocated |BIO| type. No pre-defined type, |
801 | // flag bits aside, may exceed this value. |
802 | #define BIO_TYPE_START 128 |
803 | |
804 | struct bio_method_st { |
805 | int type; |
806 | const char *name; |
807 | int (*bwrite)(BIO *, const char *, int); |
808 | int (*bread)(BIO *, char *, int); |
809 | // TODO(fork): remove bputs. |
810 | int (*bputs)(BIO *, const char *); |
811 | int (*bgets)(BIO *, char *, int); |
812 | long (*ctrl)(BIO *, int, long, void *); |
813 | int (*create)(BIO *); |
814 | int (*destroy)(BIO *); |
815 | long (*callback_ctrl)(BIO *, int, bio_info_cb); |
816 | }; |
817 | |
818 | struct bio_st { |
819 | const BIO_METHOD *method; |
820 | |
821 | // init is non-zero if this |BIO| has been initialised. |
822 | int init; |
823 | // shutdown is often used by specific |BIO_METHOD|s to determine whether |
824 | // they own some underlying resource. This flag can often by controlled by |
825 | // |BIO_set_close|. For example, whether an fd BIO closes the underlying fd |
826 | // when it, itself, is closed. |
827 | int shutdown; |
828 | int flags; |
829 | int retry_reason; |
830 | // num is a BIO-specific value. For example, in fd BIOs it's used to store a |
831 | // file descriptor. |
832 | int num; |
833 | CRYPTO_refcount_t references; |
834 | void *ptr; |
835 | // next_bio points to the next |BIO| in a chain. This |BIO| owns a reference |
836 | // to |next_bio|. |
837 | BIO *next_bio; // used by filter BIOs |
838 | size_t num_read, num_write; |
839 | }; |
840 | |
841 | #define BIO_C_SET_CONNECT 100 |
842 | #define BIO_C_DO_STATE_MACHINE 101 |
843 | #define BIO_C_SET_NBIO 102 |
844 | #define BIO_C_SET_PROXY_PARAM 103 |
845 | #define BIO_C_SET_FD 104 |
846 | #define BIO_C_GET_FD 105 |
847 | #define BIO_C_SET_FILE_PTR 106 |
848 | #define BIO_C_GET_FILE_PTR 107 |
849 | #define BIO_C_SET_FILENAME 108 |
850 | #define BIO_C_SET_SSL 109 |
851 | #define BIO_C_GET_SSL 110 |
852 | #define BIO_C_SET_MD 111 |
853 | #define BIO_C_GET_MD 112 |
854 | #define BIO_C_GET_CIPHER_STATUS 113 |
855 | #define BIO_C_SET_BUF_MEM 114 |
856 | #define BIO_C_GET_BUF_MEM_PTR 115 |
857 | #define BIO_C_GET_BUFF_NUM_LINES 116 |
858 | #define BIO_C_SET_BUFF_SIZE 117 |
859 | #define BIO_C_SET_ACCEPT 118 |
860 | #define BIO_C_SSL_MODE 119 |
861 | #define BIO_C_GET_MD_CTX 120 |
862 | #define BIO_C_GET_PROXY_PARAM 121 |
863 | #define BIO_C_SET_BUFF_READ_DATA 122 // data to read first |
864 | #define BIO_C_GET_ACCEPT 124 |
865 | #define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 |
866 | #define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 |
867 | #define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 |
868 | #define BIO_C_FILE_SEEK 128 |
869 | #define BIO_C_GET_CIPHER_CTX 129 |
870 | #define BIO_C_SET_BUF_MEM_EOF_RETURN 130 // return end of input value |
871 | #define BIO_C_SET_BIND_MODE 131 |
872 | #define BIO_C_GET_BIND_MODE 132 |
873 | #define BIO_C_FILE_TELL 133 |
874 | #define BIO_C_GET_SOCKS 134 |
875 | #define BIO_C_SET_SOCKS 135 |
876 | |
877 | #define BIO_C_SET_WRITE_BUF_SIZE 136 // for BIO_s_bio |
878 | #define BIO_C_GET_WRITE_BUF_SIZE 137 |
879 | #define BIO_C_GET_WRITE_GUARANTEE 140 |
880 | #define BIO_C_GET_READ_REQUEST 141 |
881 | #define BIO_C_SHUTDOWN_WR 142 |
882 | #define BIO_C_NREAD0 143 |
883 | #define BIO_C_NREAD 144 |
884 | #define BIO_C_NWRITE0 145 |
885 | #define BIO_C_NWRITE 146 |
886 | #define BIO_C_RESET_READ_REQUEST 147 |
887 | #define BIO_C_SET_MD_CTX 148 |
888 | |
889 | #define BIO_C_SET_PREFIX 149 |
890 | #define BIO_C_GET_PREFIX 150 |
891 | #define BIO_C_SET_SUFFIX 151 |
892 | #define BIO_C_GET_SUFFIX 152 |
893 | |
894 | #define BIO_C_SET_EX_ARG 153 |
895 | #define BIO_C_GET_EX_ARG 154 |
896 | |
897 | |
898 | #if defined(__cplusplus) |
899 | } // extern C |
900 | |
901 | extern "C++" { |
902 | |
903 | BSSL_NAMESPACE_BEGIN |
904 | |
905 | BORINGSSL_MAKE_DELETER(BIO, BIO_free) |
906 | BORINGSSL_MAKE_UP_REF(BIO, BIO_up_ref) |
907 | BORINGSSL_MAKE_DELETER(BIO_METHOD, BIO_meth_free) |
908 | |
909 | BSSL_NAMESPACE_END |
910 | |
911 | } // extern C++ |
912 | |
913 | #endif |
914 | |
915 | #define BIO_R_BAD_FOPEN_MODE 100 |
916 | #define BIO_R_BROKEN_PIPE 101 |
917 | #define BIO_R_CONNECT_ERROR 102 |
918 | #define BIO_R_ERROR_SETTING_NBIO 103 |
919 | #define BIO_R_INVALID_ARGUMENT 104 |
920 | #define BIO_R_IN_USE 105 |
921 | #define BIO_R_KEEPALIVE 106 |
922 | #define BIO_R_NBIO_CONNECT_ERROR 107 |
923 | #define BIO_R_NO_HOSTNAME_SPECIFIED 108 |
924 | #define BIO_R_NO_PORT_SPECIFIED 109 |
925 | #define BIO_R_NO_SUCH_FILE 110 |
926 | #define BIO_R_NULL_PARAMETER 111 |
927 | #define BIO_R_SYS_LIB 112 |
928 | #define BIO_R_UNABLE_TO_CREATE_SOCKET 113 |
929 | #define BIO_R_UNINITIALIZED 114 |
930 | #define BIO_R_UNSUPPORTED_METHOD 115 |
931 | #define BIO_R_WRITE_TO_READ_ONLY_BIO 116 |
932 | |
933 | #endif // OPENSSL_HEADER_BIO_H |
934 | |