Change the Windows building scripts to enable DSO_WIN32.
[openssl.git] / ssl / bio_ssl.c
index aa296996e665254e5ce094367caf0e1897b812d2..d85555a7e697056411fd792e5dfc820be06cca21 100644 (file)
 #include <openssl/err.h>
 #include <openssl/ssl.h>
 
-static int ssl_write(BIO *h,char *buf,int num);
-static int ssl_read(BIO *h,char *buf,int size);
-static int ssl_puts(BIO *h,char *str);
-static long ssl_ctrl(BIO *h,int cmd,long arg1,char *arg2);
+static int ssl_write(BIO *h, const char *buf, int num);
+static int ssl_read(BIO *h, char *buf, int size);
+static int ssl_puts(BIO *h, const char *str);
+static long ssl_ctrl(BIO *h, int cmd, long arg1, void *arg2);
 static int ssl_new(BIO *h);
 static int ssl_free(BIO *data);
+static long ssl_callback_ctrl(BIO *h, int cmd, bio_info_cb *fp);
 typedef struct bio_ssl_st
        {
        SSL *ssl; /* The ssl handle :-) */
@@ -92,12 +93,7 @@ static BIO_METHOD methods_sslp=
        ssl_ctrl,
        ssl_new,
        ssl_free,
-       };
-
-union void_fn_to_char_u
-       {
-       char *char_p;
-       void (*fn_p)();
+       ssl_callback_ctrl,
        };
 
 BIO_METHOD *BIO_f_ssl(void)
@@ -109,7 +105,7 @@ static int ssl_new(BIO *bi)
        {
        BIO_SSL *bs;
 
-       bs=(BIO_SSL *)Malloc(sizeof(BIO_SSL));
+       bs=(BIO_SSL *)OPENSSL_malloc(sizeof(BIO_SSL));
        if (bs == NULL)
                {
                BIOerr(BIO_F_SSL_NEW,ERR_R_MALLOC_FAILURE);
@@ -137,7 +133,7 @@ static int ssl_free(BIO *a)
                a->flags=0;
                }
        if (a->ptr != NULL)
-               Free(a->ptr);
+               OPENSSL_free(a->ptr);
        return(1);
        }
        
@@ -225,7 +221,7 @@ static int ssl_read(BIO *b, char *out, int outl)
        return(ret);
        }
 
-static int ssl_write(BIO *b, char *out, int outl)
+static int ssl_write(BIO *b, const char *out, int outl)
        {
        int ret,r=0;
        int retry_reason=0;
@@ -293,7 +289,7 @@ static int ssl_write(BIO *b, char *out, int outl)
        return(ret);
        }
 
-static long ssl_ctrl(BIO *b, int cmd, long num, char *ptr)
+static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr)
        {
        SSL **sslp,*ssl;
        BIO_SSL *bs;
@@ -451,10 +447,12 @@ static long ssl_ctrl(BIO *b, int cmd, long num, char *ptr)
                break;
        case BIO_CTRL_SET_CALLBACK:
                {
-               union void_fn_to_char_u tmp_cb;
-
-               tmp_cb.char_p = ptr;
-               SSL_set_info_callback(ssl,tmp_cb.fn_p);
+#if 0 /* FIXME: Should this be used?  -- Richard Levitte */
+               BIOerr(SSL_F_SSL_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
+               ret = -1;
+#else
+               ret=0;
+#endif
                }
                break;
        case BIO_CTRL_GET_CALLBACK:
@@ -472,7 +470,29 @@ static long ssl_ctrl(BIO *b, int cmd, long num, char *ptr)
        return(ret);
        }
 
-static int ssl_puts(BIO *bp, char *str)
+static long ssl_callback_ctrl(BIO *b, int cmd, bio_info_cb *fp)
+       {
+       SSL *ssl;
+       BIO_SSL *bs;
+       long ret=1;
+
+       bs=(BIO_SSL *)b->ptr;
+       ssl=bs->ssl;
+       switch (cmd)
+               {
+       case BIO_CTRL_SET_CALLBACK:
+               {
+               SSL_set_info_callback(ssl,fp);
+               }
+               break;
+       default:
+               ret=BIO_callback_ctrl(ssl->rbio,cmd,fp);
+               break;
+               }
+       return(ret);
+       }
+
+static int ssl_puts(BIO *bp, const char *str)
        {
        int n,ret;