diff options
Diffstat (limited to 'crypto/openssl/perl/openssl_bio.xs')
-rw-r--r-- | crypto/openssl/perl/openssl_bio.xs | 450 |
1 files changed, 0 insertions, 450 deletions
diff --git a/crypto/openssl/perl/openssl_bio.xs b/crypto/openssl/perl/openssl_bio.xs deleted file mode 100644 index 06d61af..0000000 --- a/crypto/openssl/perl/openssl_bio.xs +++ /dev/null @@ -1,450 +0,0 @@ - -#include "openssl.h" - -static int p5_bio_ex_bio_ptr = 0; -static int p5_bio_ex_bio_callback = 0; -static int p5_bio_ex_bio_callback_data = 0; - -static long -p5_bio_callback(bio,state,parg,cmd,larg,ret) - BIO *bio; - int state; - char *parg; - int cmd; - long larg; - int ret; -{ - int i; - SV *me,*cb; - - me = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_ptr); - cb = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_callback); - if (cb != NULL) { - dSP; - - ENTER; - SAVETMPS; - - PUSHMARK(sp); - XPUSHs(sv_2mortal(newSVsv(me))); - XPUSHs(sv_2mortal(newSViv(state))); - XPUSHs(sv_2mortal(newSViv(cmd))); - if ((state == BIO_CB_READ) || (state == BIO_CB_WRITE)) - XPUSHs(sv_2mortal(newSVpv(parg,larg))); - else - XPUSHs(&sv_undef); - /* ptr one */ - XPUSHs(sv_2mortal(newSViv(larg))); - XPUSHs(sv_2mortal(newSViv(ret))); - PUTBACK; - - i = perl_call_sv(cb,G_SCALAR); - - SPAGAIN; - if (i == 1) - ret = POPi; - else - ret = 1; - PUTBACK; - FREETMPS; - LEAVE; - } - else { - croak("Internal error in p5_bio_callback"); - } - return(ret); -} - -int -boot_bio(void) -{ - p5_bio_ex_bio_ptr = BIO_get_ex_new_index(0, "OpenSSL::BIO", ex_new, NULL, ex_cleanup); - p5_bio_ex_bio_callback = BIO_get_ex_new_index(0, "bio_callback", NULL, NULL, ex_cleanup); - p5_bio_ex_bio_callback_data = BIO_get_ex_new_index(0, "bio_callback_data", NULL, NULL, ex_cleanup); - return(1); -} - -MODULE = OpenSSL::BIO PACKAGE = OpenSSL::BIO PREFIX = p5_BIO_ - -PROTOTYPES: ENABLE -VERSIONCHECK: DISABLE - -void -p5_BIO_new_buffer_ssl_connect(...) - PROTOTYPE: ;$ - PREINIT: - SSL_CTX *ctx; - BIO *bio; - SV *arg; - PPCODE: - if (items == 1) - arg = ST(0); - else if (items == 2) - arg = ST(1); - else - arg = NULL; - if ((arg == NULL) || !(sv_derived_from(arg,"OpenSSL::SSL::CTX"))) - croak("Usage: OpenSSL::BIO::new_buffer_ssl_connect(SSL_CTX)"); - else { - IV tmp = SvIV((SV *)SvRV(arg)); - ctx = (SSL_CTX *)tmp; - } - EXTEND(sp, 1); - bio = BIO_new_buffer_ssl_connect(ctx); - arg = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_ptr); - PUSHs(arg); - -void -p5_BIO_new_ssl_connect(...) - PROTOTYPE: ;$ - PREINIT: - SSL_CTX *ctx; - BIO *bio; - SV *arg; - PPCODE: - if (items == 1) - arg = ST(0); - else if (items == 2) - arg = ST(1); - else - arg = NULL; - if ((arg == NULL) || !(sv_derived_from(arg,"OpenSSL::SSL::CTX"))) - croak("Usage: OpenSSL::BIO::new_ssl_connect(SSL_CTX)"); - else { - IV tmp = SvIV((SV *)SvRV(arg)); - ctx = (SSL_CTX *)tmp; - } - EXTEND(sp,1); - bio = BIO_new_ssl_connect(ctx); - arg = (SV *)BIO_get_ex_data(bio,p5_bio_ex_bio_ptr); - PUSHs(arg); - -void -p5_BIO_new(...) - PROTOTYPE: ;$ - PREINIT: - BIO *bio; - char *type; - SV *arg; - PPCODE: - pr_name("p5_BIO_new"); - if ((items == 1) && SvPOK(ST(0))) - type = SvPV(ST(0),na); - else if ((items == 2) && SvPOK(ST(1))) - type = SvPV(ST(1),na); - else - croak("Usage: OpenSSL::BIO::new(type)"); - EXTEND(sp,1); - if (strcmp(type, "mem") == 0) - bio=BIO_new(BIO_s_mem()); - else if (strcmp(type, "socket") == 0) - bio=BIO_new(BIO_s_socket()); - else if (strcmp(type, "connect") == 0) - bio=BIO_new(BIO_s_connect()); - else if (strcmp(type, "accept") == 0) - bio=BIO_new(BIO_s_accept()); - else if (strcmp(type, "fd") == 0) - bio=BIO_new(BIO_s_fd()); - else if (strcmp(type, "file") == 0) - bio=BIO_new(BIO_s_file()); - else if (strcmp(type, "null") == 0) - bio=BIO_new(BIO_s_null()); - else if (strcmp(type, "ssl") == 0) - bio=BIO_new(BIO_f_ssl()); - else if (strcmp(type, "buffer") == 0) - bio=BIO_new(BIO_f_buffer()); - else - croak("unknown BIO type"); - arg = (SV *)BIO_get_ex_data(bio,p5_bio_ex_bio_ptr); - PUSHs(arg); - -int -p5_BIO_hostname(bio, name) - BIO *bio; - char *name; - PROTOTYPE: $$ - CODE: - RETVAL = BIO_set_conn_hostname(bio, name); - OUTPUT: - RETVAL - -int -p5_BIO_set_accept_port(bio, str) - BIO *bio; - char *str; - PROTOTYPE: $$ - CODE: - RETVAL = BIO_set_accept_port(bio, str); - OUTPUT: - RETVAL - -int -p5_BIO_do_handshake(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = BIO_do_handshake(bio); - OUTPUT: - RETVAL - -BIO * -p5_BIO_push(b, bio) - BIO *b; - BIO *bio; - PROTOTYPE: $$ - CODE: - /* This reference will be reduced when the reference is - * let go, and then when the BIO_free_all() is called - * inside the OpenSSL library by the BIO with this - * pushed into */ - bio->references++; - RETVAL = BIO_push(b, bio); - OUTPUT: - RETVAL - -void -p5_BIO_pop(b) - BIO *b - PROTOTYPE: $ - PREINIT: - BIO *bio; - char *type; - SV *arg; - PPCODE: - bio = BIO_pop(b); - if (bio != NULL) { - /* This BIO will either be one created in the - * perl library, in which case it will have a perl - * SV, otherwise it will have been created internally, - * inside OpenSSL. For the 'pushed in', it needs - * the reference count decremented. */ - arg = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_ptr); - if (arg == NULL) { - arg = new_ref("OpenSSL::BIO",(char *)bio,0); - BIO_set_ex_data(bio, p5_bio_ex_bio_ptr, (char *)arg); - PUSHs(arg); - } - else { - /* it was pushed in */ - SvREFCNT_inc(arg); - PUSHs(arg); - } - } - -int -p5_BIO_sysread(bio, in, num, ...) - BIO *bio; - SV *in; - int num; - PROTOTYPE: $$$; - PREINIT: - int i,n,olen; - int offset; - char *p; - CODE: - offset = 0; - if (!SvPOK(in)) - sv_setpvn(in, "", 0); - SvPV(in, olen); - if (items > 3) { - offset = SvIV(ST(3)); - if (offset < 0) { - if (-offset > olen) - croak("Offset outside string"); - offset+=olen; - } - } - if ((num+offset) > olen) { - SvGROW(in, num+offset+1); - p=SvPV(in, i); - memset(&(p[olen]), 0, (num+offset)-olen+1); - } - p = SvPV(in,n); - i = BIO_read(bio, p+offset, num); - RETVAL = i; - if (i <= 0) - i = 0; - SvCUR_set(in, offset+i); - OUTPUT: - RETVAL - -int -p5_BIO_syswrite(bio, in, ...) - BIO *bio; - SV *in; - PROTOTYPE: $$; - PREINIT: - char *ptr; - int len,in_len; - int offset=0; - int n; - CODE: - ptr = SvPV(in, in_len); - if (items > 2) { - len = SvOK(ST(2)) ? SvIV(ST(2)) : in_len; - if (items > 3) { - offset = SvIV(ST(3)); - if (offset < 0) { - if (-offset > in_len) - croak("Offset outside string"); - offset+=in_len; - } - else if ((offset >= in_len) && (in_len > 0)) - croak("Offset outside string"); - } - if (len >= (in_len-offset)) - len = in_len-offset; - } - else - len = in_len; - RETVAL = BIO_write(bio, ptr+offset, len); - OUTPUT: - RETVAL - -void -p5_BIO_getline(bio) - BIO *bio; - PROTOTYPE: $ - PREINIT: - int i; - char *p; - PPCODE: - pr_name("p5_BIO_gets"); - EXTEND(sp, 1); - PUSHs(sv_newmortal()); - sv_setpvn(ST(0), "", 0); - SvGROW(ST(0), 1024); - p=SvPV(ST(0), na); - i = BIO_gets(bio, p, 1024); - if (i < 0) - i = 0; - SvCUR_set(ST(0), i); - -int -p5_BIO_flush(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = BIO_flush(bio); - OUTPUT: - RETVAL - -char * -p5_BIO_type(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = bio->method->name; - OUTPUT: - RETVAL - -void -p5_BIO_next_bio(b) - BIO *b - PROTOTYPE: $ - PREINIT: - BIO *bio; - char *type; - SV *arg; - PPCODE: - bio = b->next_bio; - if (bio != NULL) { - arg = (SV *)BIO_get_ex_data(bio, p5_bio_ex_bio_ptr); - if (arg == NULL) { - arg = new_ref("OpenSSL::BIO", (char *)bio, 0); - BIO_set_ex_data(bio, p5_bio_ex_bio_ptr, (char *)arg); - bio->references++; - PUSHs(arg); - } - else { - SvREFCNT_inc(arg); - PUSHs(arg); - } - } - -int -p5_BIO_puts(bio, in) - BIO *bio; - SV *in; - PROTOTYPE: $$ - PREINIT: - char *ptr; - CODE: - ptr = SvPV(in,na); - RETVAL = BIO_puts(bio, ptr); - OUTPUT: - RETVAL - -void -p5_BIO_set_callback(bio, cb,...) - BIO *bio; - SV *cb; - PROTOTYPE: $$; - PREINIT: - SV *arg = NULL; - SV *arg2 = NULL; - CODE: - if (items > 3) - croak("Usage: OpenSSL::BIO::set_callback(bio,callback[,arg]"); - if (items == 3) { - arg2 = sv_mortalcopy(ST(2)); - SvREFCNT_inc(arg2); - BIO_set_ex_data(bio, p5_bio_ex_bio_callback_data, (char *)arg2); - } - arg = sv_mortalcopy(ST(1)); - SvREFCNT_inc(arg); - BIO_set_ex_data(bio, p5_bio_ex_bio_callback, (char *)arg); - /* printf("%08lx < bio_ptr\n",BIO_get_ex_data(bio,p5_bio_ex_bio_ptr)); */ - BIO_set_callback(bio, p5_bio_callback); - -void -p5_BIO_DESTROY(bio) - BIO *bio - PROTOTYPE: $ - PREINIT: - SV *sv; - PPCODE: - pr_name_d("p5_BIO_DESTROY",bio->references); - /* printf("p5_BIO_DESTROY <%s> %d\n",bio->method->name,bio->references); */ - BIO_set_ex_data(bio,p5_bio_ex_bio_ptr,NULL); - BIO_free_all(bio); - -int -p5_BIO_set_ssl(bio, ssl) - BIO *bio; - SSL *ssl; - PROTOTYPE: $$ - CODE: - pr_name("p5_BIO_set_ssl"); - ssl->references++; - RETVAL = BIO_set_ssl(bio, ssl, BIO_CLOSE); - OUTPUT: - RETVAL - -int -p5_BIO_number_read(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = BIO_number_read(bio); - OUTPUT: - RETVAL - -int -p5_BIO_number_written(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = BIO_number_written(bio); - OUTPUT: - RETVAL - -int -p5_BIO_references(bio) - BIO *bio; - PROTOTYPE: $ - CODE: - RETVAL = bio->references; - OUTPUT: - RETVAL - |