SAVI-Perl
view release on metacpan or search on metacpan
{
if (savi_h) {
savi_h->pVtbl->Terminate(savi_h);
savi_h->pVtbl->Release(savi_h);
}
}
void
new(class)
char *class
PPCODE:
{
SAVI__handle savi_h;
CISweepClassFactory2 *factory;
HRESULT status;
SV *sv;
status = DllGetClassObject((REFIID)&SOPHOS_CLASSID_SAVI, (REFIID)&SOPHOS_IID_CLASSFACTORY2, (void **)&factory);
if (SOPHOS_SUCCEEDED(status)) {
status = factory->pVtbl->CreateInstance(factory, NULL, &SOPHOS_IID_SAVI3, (void **)&savi_h);
CODE:
{
RETVAL = SOPHOS_TYPE_STRING;
}
OUTPUT:
RETVAL
void
load_data(savi_h)
SAVI::handle savi_h
PPCODE:
{
HRESULT status;
status = savi_h->pVtbl->LoadVirusData(savi_h);
if (SOPHOS_FAILED(status))
XPUSHs(sv_2mortal(newSViv(SOPHOS_CODE(status))));
}
void
version(savi_h)
SAVI::handle savi_h
PPCODE:
{
SV *sv = &PL_sv_undef;
SAVI__version savi_version;
HRESULT status;
if (savi_version = (SAVI__version)malloc(sizeof(savi_version_obj))) {
status = savi_h->pVtbl->GetVirusEngineVersion(savi_h, &(savi_version->version), savi_version->string, 128,
NULL, &(savi_version->count), NULL,
(REFIID)&SOPHOS_IID_ENUM_IDEDETAILS,
(void **)&(savi_version->ide_list));
XPUSHs(sv);
}
void
set(savi_h, param, value, type)
SAVI::handle savi_h
char *param
char *value
int type
PPCODE:
{
HRESULT status;
status = savi_h->pVtbl->SetConfigValue(savi_h, param, type, value);
if (SOPHOS_FAILED(status))
XPUSHs(sv_2mortal(newSViv(SOPHOS_CODE(status))));
}
void
get(savi_h, param, type)
SAVI::handle savi_h
char *param
int type
PPCODE:
{
HRESULT status;
char value[1024];
status = savi_h->pVtbl->GetConfigValue(savi_h, param, type, 1024, value, NULL);
if (SOPHOS_SUCCEEDED(status))
XPUSHs(sv_2mortal(newSVpv(value, strlen(value))));
else
XPUSHs(&PL_sv_undef);
XPUSHs(sv_2mortal(newSViv(SOPHOS_CODE(status))));
}
void
options(savi_h)
SAVI::handle savi_h
PPCODE:
{
CIEnumEngineConfig *options;
CIEngineConfig *option;
HRESULT status;
status = savi_h->pVtbl->GetConfigEnumerator(savi_h, (REFIID)&SOPHOS_IID_ENUM_ENGINECONFIG, (void **)&options);
if (SOPHOS_SUCCEEDED(status)) {
status = options->pVtbl->Reset(options);
}
options->pVtbl->Release(options);
}
}
void
scan(savi_h, path)
SAVI::handle savi_h
char *path
PPCODE:
{
SAVI__results results;
HRESULT status;
SV *sv;
status = savi_h->pVtbl->SweepFile(savi_h, path, (REFIID)&SOPHOS_IID_ENUM_SWEEPRESULTS, (void **)&results);
if (status == SOPHOS_S_OK) {
results->pVtbl->Release(results);
sv = sv_newmortal();
else
sv = sv_2mortal(newSViv(SOPHOS_CODE(status)));
XPUSHs(sv);
}
void
scan_fh(savi_h, fh)
SAVI::handle savi_h
FILE *fh
PPCODE:
{
SAVI__results results;
HRESULT status;
SV *sv;
status = savi_h->pVtbl->SweepHandle(savi_h, "handle", fileno(fh), (REFIID)&SOPHOS_IID_ENUM_SWEEPRESULTS, (void **)&results);
if (status == SOPHOS_S_OK) {
results->pVtbl->Release(results);
sv = sv_newmortal();
CODE:
{
RETVAL = version->count;
}
OUTPUT:
RETVAL
void
ide_list(version)
SAVI::version version
PPCODE:
{
SAVI__version__ide ide;
SV *sv;
version->ide_list->pVtbl->Reset(version->ide_list);
while (version->ide_list->pVtbl->Next(version->ide_list, 1, (void **)&ide, NULL) == SOPHOS_S_OK) {
sv = sv_newmortal();
sv_setref_pv(sv, "SAVI::version::ide", ide);
XPUSHs(sv);
SAVI::version::ide ide
CODE:
{
if (ide)
ide->pVtbl->Release(ide);
}
void
name(ide)
SAVI::version::ide ide
PPCODE:
{
char ide_name[128];
if (ide->pVtbl->GetName(ide, 128, ide_name, NULL) == SOPHOS_S_OK)
XPUSHs(sv_2mortal(newSVpv(ide_name, strlen(ide_name))));
}
void
date(ide)
SAVI::version::ide ide
PPCODE:
{
SYSTEMTIME release_date;
char buf[128];
if (ide->pVtbl->GetDate(ide, &release_date) == SOPHOS_S_OK) {
snprintf(buf, 128, "%d/%d/%d", release_date.wMonth, release_date.wDay, release_date.wYear);
buf[127] = '\0';
XPUSHs(sv_2mortal(newSVpv(buf, strlen(buf))));
}
}
CODE:
{
RETVAL = (results != 0);
}
OUTPUT:
RETVAL
void
viruses(results)
SAVI::results results
PPCODE:
{
CISweepResults *virus_info;
if (results) {
results->pVtbl->Reset(results);
while (results->pVtbl->Next(results, 1, (void **)&virus_info, NULL) == SOPHOS_S_OK) {
char virus_name[128];
if (virus_info->pVtbl->GetVirusName(virus_info, 128, virus_name, NULL) == SOPHOS_S_OK) {
( run in 1.850 second using v1.01-cache-2.11-cpan-5511b514fd6 )