diff options
Diffstat (limited to 'src/lib/libssl/bio_ssl.c')
-rw-r--r-- | src/lib/libssl/bio_ssl.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/src/lib/libssl/bio_ssl.c b/src/lib/libssl/bio_ssl.c index f62cde4e5d..d73c41adcd 100644 --- a/src/lib/libssl/bio_ssl.c +++ b/src/lib/libssl/bio_ssl.c | |||
@@ -71,6 +71,7 @@ static int ssl_puts(BIO *h,char *str); | |||
71 | static long ssl_ctrl(BIO *h,int cmd,long arg1,char *arg2); | 71 | static long ssl_ctrl(BIO *h,int cmd,long arg1,char *arg2); |
72 | static int ssl_new(BIO *h); | 72 | static int ssl_new(BIO *h); |
73 | static int ssl_free(BIO *data); | 73 | static int ssl_free(BIO *data); |
74 | static long ssl_callback_ctrl(BIO *h,int cmd,void (*fp)()); | ||
74 | typedef struct bio_ssl_st | 75 | typedef struct bio_ssl_st |
75 | { | 76 | { |
76 | SSL *ssl; /* The ssl handle :-) */ | 77 | SSL *ssl; /* The ssl handle :-) */ |
@@ -92,6 +93,7 @@ static BIO_METHOD methods_sslp= | |||
92 | ssl_ctrl, | 93 | ssl_ctrl, |
93 | ssl_new, | 94 | ssl_new, |
94 | ssl_free, | 95 | ssl_free, |
96 | ssl_callback_ctrl, | ||
95 | }; | 97 | }; |
96 | 98 | ||
97 | BIO_METHOD *BIO_f_ssl(void) | 99 | BIO_METHOD *BIO_f_ssl(void) |
@@ -444,7 +446,14 @@ static long ssl_ctrl(BIO *b, int cmd, long num, char *ptr) | |||
444 | ret=BIO_ctrl(ssl->rbio,cmd,num,ptr); | 446 | ret=BIO_ctrl(ssl->rbio,cmd,num,ptr); |
445 | break; | 447 | break; |
446 | case BIO_CTRL_SET_CALLBACK: | 448 | case BIO_CTRL_SET_CALLBACK: |
447 | SSL_set_info_callback(ssl,(void (*)())ptr); | 449 | { |
450 | #if 0 /* FIXME: Should this be used? -- Richard Levitte */ | ||
451 | BIOerr(SSL_F_SSL_CTRL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED); | ||
452 | ret = -1; | ||
453 | #else | ||
454 | ret=0; | ||
455 | #endif | ||
456 | } | ||
448 | break; | 457 | break; |
449 | case BIO_CTRL_GET_CALLBACK: | 458 | case BIO_CTRL_GET_CALLBACK: |
450 | { | 459 | { |
@@ -461,6 +470,28 @@ static long ssl_ctrl(BIO *b, int cmd, long num, char *ptr) | |||
461 | return(ret); | 470 | return(ret); |
462 | } | 471 | } |
463 | 472 | ||
473 | static long ssl_callback_ctrl(BIO *b, int cmd, void (*fp)()) | ||
474 | { | ||
475 | SSL *ssl; | ||
476 | BIO_SSL *bs; | ||
477 | long ret=1; | ||
478 | |||
479 | bs=(BIO_SSL *)b->ptr; | ||
480 | ssl=bs->ssl; | ||
481 | switch (cmd) | ||
482 | { | ||
483 | case BIO_CTRL_SET_CALLBACK: | ||
484 | { | ||
485 | SSL_set_info_callback(ssl,fp); | ||
486 | } | ||
487 | break; | ||
488 | default: | ||
489 | ret=BIO_callback_ctrl(ssl->rbio,cmd,fp); | ||
490 | break; | ||
491 | } | ||
492 | return(ret); | ||
493 | } | ||
494 | |||
464 | static int ssl_puts(BIO *bp, char *str) | 495 | static int ssl_puts(BIO *bp, char *str) |
465 | { | 496 | { |
466 | int n,ret; | 497 | int n,ret; |