openssl/perl/OpenSSL.xs

110 lines
2.2 KiB
Text
Raw Normal View History

/*
** OpenSSL.xs
*/
#include "openssl.h"
SV *
new_ref(type, obj, mort)
char *type;
char *obj;
{
SV *ret;
if (mort)
ret = sv_newmortal();
else
ret = newSViv(0);
#ifdef DEBUG
printf(">new_ref %d\n",type);
#endif
sv_setref_pv(ret, type, (void *)obj);
return(ret);
}
int
ex_new(obj, data, ad, idx, argl, argp)
char *obj;
SV *data;
CRYPTO_EX_DATA *ad;
int idx;
long argl;
char *argp;
{
SV *sv;
#ifdef DEBUG
printf("ex_new %08X %s\n",obj,argp);
#endif
sv = sv_newmortal();
sv_setref_pv(sv, argp, (void *)obj);
#ifdef DEBUG
printf("%d>new_ref '%s'\n", sv, argp);
#endif
CRYPTO_set_ex_data(ad, idx, (char *)sv);
return(1);
}
void
ex_cleanup(obj, data, ad, idx, argl, argp)
char *obj;
SV *data;
CRYPTO_EX_DATA *ad;
int idx;
long argl;
char *argp;
{
pr_name("ex_cleanup");
#ifdef DEBUG
printf("ex_cleanup %08X %s\n", obj, argp);
#endif
if (data != NULL)
SvREFCNT_dec((SV *)data);
}
MODULE = OpenSSL PACKAGE = OpenSSL
PROTOTYPES: ENABLE
BOOT:
boot_bio();
boot_cipher();
boot_digest();
boot_err();
boot_ssl();
/* */
/* The next macro is the completely correct way to call a C */
/* function that uses perl calling conventions but is not */
/* registered with perl. */
/* */
/* The second macro seems to work for this context. (We just */
/* need a mark for the called function since we don't have */
/* any local variables and what-not.) */
/* */
/* Unfortunately, we need to do this because these boot_* */
/* functions are auto-generated by xsubpp and are normally */
/* called from DyncLoader, but we're pulling them in here. */
/* */
#define FULL_callBootFunc(func) { \
dSP; \
ENTER; \
SAVETMPS; \
PUSHMARK(SP); \
func(); \
FREETMPS; \
LEAVE; \
}
#define callBootFunc(func) { \
PUSHMARK(SP); \
func(); \
}
callBootFunc(boot_OpenSSL__BN);
callBootFunc(boot_OpenSSL__BIO);
callBootFunc(boot_OpenSSL__Cipher);
callBootFunc(boot_OpenSSL__MD);
callBootFunc(boot_OpenSSL__ERR);
callBootFunc(boot_OpenSSL__SSL);
callBootFunc(boot_OpenSSL__X509);