#include "p5SSLeay.h"

SV *new_ref(type,obj,mort)
char *type;
char *obj;
	{
	SV *ret;

	if (mort)
		ret=sv_newmortal();
	else
		ret=newSViv(0);
printf(">new_ref %d\n",type);
	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;

fprintf(stderr,"ex_new %08X %s\n",obj,argp);
	sv=sv_newmortal();
	sv_setref_pv(sv,argp,(void *)obj);
printf("%d>new_ref '%s'\n",sv,argp);
	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");
fprintf(stderr,"ex_cleanup %08X %s\n",obj,argp);
	if (data != NULL)
		SvREFCNT_dec((SV *)data);
	}

MODULE =  SSLeay        PACKAGE = SSLeay

BOOT:
	boot_bio();
	boot_cipher();
	boot_digest();
	boot_err();
	boot_ssl();
	boot_SSLeay__BN();
	boot_SSLeay__BIO();
	boot_SSLeay__Cipher();
	boot_SSLeay__MD();
	boot_SSLeay__ERR();
	boot_SSLeay__SSL();
	boot_SSLeay__X509();

