diff --git a/src/modules/ssleay/ssleay.c b/src/modules/ssleay/ssleay.c index a8c6681fef379dafce95a5e4d4c717736a3680b5..53513fe546de6127efb31cdb312120a49ded3073 100644 --- a/src/modules/ssleay/ssleay.c +++ b/src/modules/ssleay/ssleay.c @@ -5,7 +5,7 @@ \*/ #include "global.h" -RCSID("$Id: ssleay.c,v 1.5 1996/12/04 04:02:14 nisse Exp $"); +RCSID("$Id: ssleay.c,v 1.6 1996/12/04 14:37:45 nisse Exp $"); #include "types.h" #include "interpret.h" #include "svalue.h" @@ -83,32 +83,39 @@ void ssleay_connection_set_fd(INT32 args) void ssleay_connection_accept(INT32 args) { - if (SSL_accept(CON) <= 0) - { - ERR_print_errors_fp(stderr); - error("ssleay_connection->accept: failed\n"); - } pop_n_elems(args); + push_int(SSL_accept(CON)); } void ssleay_connection_read(INT32 args) { struct pike_string *s; INT32 len; - + INT32 count; + if ((args < 1) || (sp[-args].type != T_INT)) error("ssleay_connection->read: wrong type\n"); len = sp[-args].u.integer; if (len < 0) error("ssleay_connection->read: invalid argument\n"); + pop_n_elems(args); + s = begin_shared_string(len); if (len) { - s->len = SSL_read(CON, s->str, len); + count = SSL_read(CON, s->str, len); + if (count < 0) + { + free_string(end_shared_string(s)); + push_int(count); + } + else + { + s->len = count; + push_string(end_shared_string(s)); + } } - pop_n_elems(args); - push_string(end_shared_string(s)); } void ssleay_connection_write(INT32 args) @@ -122,6 +129,12 @@ void ssleay_connection_write(INT32 args) push_int(res); } +void ssleay_connection_werror(INT32 args) +{ + ERR_print_errors_fp(stderr); + pop_n_elems(args); +} + /* Methods for ssleay context objects */ static void ssleay_create(INT32 args) @@ -248,11 +261,12 @@ void init_ssleay_programs(void) start_new_program(); add_storage(sizeof(struct ssleay_connection)); - add_function("create", ssleay_connection_create, "function(int:void)",0); - add_function("accept", ssleay_connection_accept, "function(void:void)", 0); + add_function("create", ssleay_connection_create, "function(object:void)",0); + add_function("accept", ssleay_connection_accept, "function(void:int)", 0); add_function("read",ssleay_connection_read,"function(int,int|void:int|string)",0); add_function("write",ssleay_connection_write,"function(string:int)",0); add_function("set_fd",ssleay_connection_set_fd,"function(int:void)",0); + add_function("werror", ssleay_connection_werror, "function(void:void)", 0); set_init_callback(init_connection); set_exit_callback(exit_connection);