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 06d61af130523..0000000000000 --- 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 -  | 
