Update from 1.0.0-stable.
[openssl.git] / crypto / bio / bio.h
index 07333cf0b32e7b55efda90e2e9d719aaaa4b2f65..ab5d5c0923d144aebf8391d9a6eb9412434debf9 100644 (file)
@@ -95,6 +95,8 @@ extern "C" {
 #define BIO_TYPE_BIO           (19|0x0400)             /* (half a) BIO pair */
 #define BIO_TYPE_LINEBUFFER    (20|0x0200)             /* filter */
 #define BIO_TYPE_DGRAM         (21|0x0400|0x0100)
+#define BIO_TYPE_ASN1          (22|0x0200)             /* filter */
+#define BIO_TYPE_COMP          (23|0x0200)             /* filter */
 
 #define BIO_TYPE_DESCRIPTOR    0x0100  /* socket, fd, connect or accept */
 #define BIO_TYPE_FILTER                0x0200
@@ -129,8 +131,8 @@ extern "C" {
 /* dgram BIO stuff */
 #define BIO_CTRL_DGRAM_CONNECT       31  /* BIO dgram special */
 #define BIO_CTRL_DGRAM_SET_CONNECTED 32  /* allow for an externally
-                                                                                 * connected socket to be
-                                                                                 * passed in */ 
+                                         * connected socket to be
+                                         * passed in */ 
 #define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33 /* setsockopt, essentially */
 #define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34 /* getsockopt, essentially */
 #define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35 /* setsockopt, essentially */
@@ -146,17 +148,19 @@ extern "C" {
 #define BIO_CTRL_DGRAM_QUERY_MTU          40 /* as kernel for current MTU */
 #define BIO_CTRL_DGRAM_GET_MTU            41 /* get cached value for MTU */
 #define BIO_CTRL_DGRAM_SET_MTU            42 /* set cached value for
-                                                                                         * MTU. want to use this
-                                              * if asking the kernel
-                                              * fails */
+                                             * MTU. want to use this
+                                             * if asking the kernel
+                                             * fails */
 
 #define BIO_CTRL_DGRAM_MTU_EXCEEDED       43 /* check whether the MTU
-                                                                                         * was exceed in the
-                                                                                         * previous write
-                                                                                         * operation */
+                                             * was exceed in the
+                                             * previous write
+                                             * operation */
 
 #define BIO_CTRL_DGRAM_SET_PEER           44 /* Destination for the data */
 
+#define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT   45 /* Next DTLS handshake timeout to
+                                                                                         * adjust socket timeouts */
 
 /* modifiers */
 #define BIO_FP_READ            0x02
@@ -196,28 +200,32 @@ extern "C" {
  */
 #define BIO_FLAGS_MEM_RDONLY   0x200
 
-#define BIO_set_flags(b,f) ((b)->flags|=(f))
-#define BIO_get_flags(b) ((b)->flags)
+typedef struct bio_st BIO;
+
+void BIO_set_flags(BIO *b, int flags);
+int  BIO_test_flags(const BIO *b, int flags);
+void BIO_clear_flags(BIO *b, int flags);
+
+#define BIO_get_flags(b) BIO_test_flags(b, ~(0x0))
 #define BIO_set_retry_special(b) \
-               ((b)->flags|=(BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY))
+               BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY))
 #define BIO_set_retry_read(b) \
-               ((b)->flags|=(BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
+               BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY))
 #define BIO_set_retry_write(b) \
-               ((b)->flags|=(BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))
+               BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY))
 
 /* These are normally used internally in BIOs */
-#define BIO_clear_flags(b,f) ((b)->flags&= ~(f))
 #define BIO_clear_retry_flags(b) \
-               ((b)->flags&= ~(BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
+               BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
 #define BIO_get_retry_flags(b) \
-               ((b)->flags&(BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
+               BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY))
 
 /* These should be used by the application to tell why we should retry */
-#define BIO_should_read(a)             ((a)->flags & BIO_FLAGS_READ)
-#define BIO_should_write(a)            ((a)->flags & BIO_FLAGS_WRITE)
-#define BIO_should_io_special(a)       ((a)->flags & BIO_FLAGS_IO_SPECIAL)
-#define BIO_retry_type(a)              ((a)->flags & BIO_FLAGS_RWS)
-#define BIO_should_retry(a)            ((a)->flags & BIO_FLAGS_SHOULD_RETRY)
+#define BIO_should_read(a)             BIO_test_flags(a, BIO_FLAGS_READ)
+#define BIO_should_write(a)            BIO_test_flags(a, BIO_FLAGS_WRITE)
+#define BIO_should_io_special(a)       BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL)
+#define BIO_retry_type(a)              BIO_test_flags(a, BIO_FLAGS_RWS)
+#define BIO_should_retry(a)            BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY)
 
 /* The next three are used in conjunction with the
  * BIO_should_io_special() condition.  After this returns true,
@@ -246,18 +254,17 @@ extern "C" {
 #define BIO_cb_pre(a)  (!((a)&BIO_CB_RETURN))
 #define BIO_cb_post(a) ((a)&BIO_CB_RETURN)
 
-#define BIO_set_callback(b,cb)         ((b)->callback=(cb))
-#define BIO_set_callback_arg(b,arg)    ((b)->cb_arg=(char *)(arg))
-#define BIO_get_callback_arg(b)                ((b)->cb_arg)
-#define BIO_get_callback(b)            ((b)->callback)
-#define BIO_method_name(b)             ((b)->method->name)
-#define BIO_method_type(b)             ((b)->method->type)
+long (*BIO_get_callback(const BIO *b)) (struct bio_st *,int,const char *,int, long,long);
+void BIO_set_callback(BIO *b, 
+       long (*callback)(struct bio_st *,int,const char *,int, long,long));
+char *BIO_get_callback_arg(const BIO *b);
+void BIO_set_callback_arg(BIO *b, char *arg);
 
-typedef struct bio_st BIO;
+const char * BIO_method_name(const BIO *b);
+int BIO_method_type(const BIO *b);
 
 typedef void bio_info_cb(struct bio_st *, int, const char *, int, long, long);
 
-#ifndef OPENSSL_SYS_WIN16
 typedef struct bio_method_st
        {
        int type;
@@ -271,21 +278,6 @@ typedef struct bio_method_st
        int (*destroy)(BIO *);
         long (*callback_ctrl)(BIO *, int, bio_info_cb *);
        } BIO_METHOD;
-#else
-typedef struct bio_method_st
-       {
-       int type;
-       const char *name;
-       int (_far *bwrite)();
-       int (_far *bread)();
-       int (_far *bputs)();
-       int (_far *bgets)();
-       long (_far *ctrl)();
-       int (_far *create)();
-       int (_far *destroy)();
-       long (_far *callback_ctrl)();
-       } BIO_METHOD;
-#endif
 
 struct bio_st
        {
@@ -326,6 +318,9 @@ typedef struct bio_f_buffer_ctx_struct
        int obuf_off;           /* write/read offset */
        } BIO_F_BUFFER_CTX;
 
+/* Prefix and suffix callback in ASN1 BIO */
+typedef int asn1_ps_func(BIO *b, unsigned char **pbuf, int *plen, void *parg);
+
 /* connect BIO stuff */
 #define BIO_CONN_S_BEFORE              1
 #define BIO_CONN_S_GET_IP              2
@@ -386,7 +381,15 @@ typedef struct bio_f_buffer_ctx_struct
 #define BIO_C_NWRITE0                          145
 #define BIO_C_NWRITE                           146
 #define BIO_C_RESET_READ_REQUEST               147
+#define BIO_C_SET_MD_CTX                       148
+
+#define BIO_C_SET_PREFIX                       149
+#define BIO_C_GET_PREFIX                       150
+#define BIO_C_SET_SUFFIX                       151
+#define BIO_C_GET_SUFFIX                       152
 
+#define BIO_C_SET_EX_ARG                       153
+#define BIO_C_GET_EX_ARG                       154
 
 #define BIO_set_app_data(s,arg)                BIO_set_ex_data(s,0,arg)
 #define BIO_get_app_data(s)            BIO_get_ex_data(s,0)
@@ -548,22 +551,21 @@ int BIO_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
 unsigned long BIO_number_read(BIO *bio);
 unsigned long BIO_number_written(BIO *bio);
 
+/* For BIO_f_asn1() */
+int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix,
+                                       asn1_ps_func *prefix_free);
+int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix,
+                                       asn1_ps_func **pprefix_free);
+int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix,
+                                       asn1_ps_func *suffix_free);
+int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix,
+                                       asn1_ps_func **psuffix_free);
+
 # ifndef OPENSSL_NO_FP_API
-#  if defined(OPENSSL_SYS_WIN16) && defined(_WINDLL)
-BIO_METHOD *BIO_s_file_internal(void);
-BIO *BIO_new_file_internal(char *filename, char *mode);
-BIO *BIO_new_fp_internal(FILE *stream, int close_flag);
-#    define BIO_s_file BIO_s_file_internal
-#    define BIO_new_file       BIO_new_file_internal
-#    define BIO_new_fp BIO_new_fp_internal
-#  else /* FP_API */
 BIO_METHOD *BIO_s_file(void );
 BIO *BIO_new_file(const char *filename, const char *mode);
 BIO *BIO_new_fp(FILE *stream, int close_flag);
-#    define BIO_s_file_internal                BIO_s_file
-#    define BIO_new_file_internal      BIO_new_file
-#    define BIO_new_fp_internal                BIO_s_file
-#  endif /* FP_API */
+# define BIO_s_file_internal   BIO_s_file
 # endif
 BIO *  BIO_new(BIO_METHOD *type);
 int    BIO_set(BIO *a,BIO_METHOD *type);
@@ -592,13 +594,8 @@ int BIO_nread(BIO *bio, char **buf, int num);
 int BIO_nwrite0(BIO *bio, char **buf);
 int BIO_nwrite(BIO *bio, char **buf, int num);
 
-#ifndef OPENSSL_SYS_WIN16
 long BIO_debug_callback(BIO *bio,int cmd,const char *argp,int argi,
        long argl,long ret);
-#else
-long _far _loadds BIO_debug_callback(BIO *bio,int cmd,const char *argp,int argi,
-       long argl,long ret);
-#endif
 
 BIO_METHOD *BIO_s_mem(void);
 BIO *BIO_new_mem_buf(void *buf, int len);