TYPEMAP
char * T_PV
unsigned char * T_PV
const char * T_PV
AV * T_AVREF
SSH2 * O_SESSION
SSH2_CHANNEL * O_CHANNEL
SSH2_LISTENER * O_LISTENER
SSH2_SFTP * O_SFTP
SSH2_FILE * O_FILE
SSH2_DIR * O_DIR
SSH2_PUBLICKEY* O_PUBLICKEY
OUTPUT
T_PV
sv_setpv((SV*)$arg, $var);
T_AVREF
$arg = newRV((SV*)$var);
O_SESSION
sv_setref_pv($arg, "Net::SSH2", (void *)$var);
O_CHANNEL
{
GV* gv = (GV*)newSVrv($arg, "Net::SSH2::Channel");
IO* io = (IO*)newSV(0);
const char* name = form("_GEN_%ld", (long)net_ch_gensym++);
SvUPGRADE((SV*)gv, SVt_PVGV);
SvUPGRADE((SV*)io, SVt_PVIO);
SvIVX(gv) = PTR2IV($var);
gv_init(gv, gv_stashpv("Net::SSH2::Channel", 0/*create*/),
name, strlen(name), 0/*multi*/);
GvIOp(gv) = io;
sv_magic((SV*)io, newRV((SV*)gv), PERL_MAGIC_tiedscalar, Nullch, 0);
}
O_LISTENER
sv_setref_pv($arg, "Net::SSH2::Listener", (void *)$var);
O_SFTP
sv_setref_pv($arg, "Net::SSH2::SFTP", (void *)$var);
O_FILE
{
GV* gv = (GV*)newSVrv($arg, "Net::SSH2::File");
IO* io = (IO*)newSV(0);
const char* name = form("_GEN_%ld", (long)net_fi_gensym++);
SvUPGRADE((SV*)gv, SVt_PVGV);
SvUPGRADE((SV*)io, SVt_PVIO);
SvIVX(gv) = PTR2IV($var);
gv_init(gv, gv_stashpv("Net::SSH2::File", 0/*create*/),
name, strlen(name), 0/*multi*/);
GvIOp(gv) = io;
sv_magic((SV*)io, newRV((SV*)gv), PERL_MAGIC_tiedscalar, Nullch, 0);
}
O_DIR
sv_setref_pv($arg, "Net::SSH2::Dir", (void *)$var);
O_PUBLICKEY
sv_setref_pv($arg, "Net::SSH2::PublicKey", (void *)$var);
INPUT
T_PV
$var = ($type)SvPV_nolen($arg)
T_AVREF
if(SvROK($arg) && SvTYPE(SvRV($arg)) == SVt_PVAV)
$var = (AV*)SvRV($arg);
else
croak(\"$var is not an array reference\");
O_SESSION
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid session object\");
O_CHANNEL
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVGV))
$var = ($type)SvIVX((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid channel object\");
O_LISTENER
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid listener object\");
O_SFTP
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid SFTP object\");
O_FILE
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVGV))
$var = ($type)SvIVX((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid SFTP file object\");
O_DIR
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid SFTP directory object\");
O_PUBLICKEY
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid public key object\");