SAVI-Perl

 view release on metacpan or  search on metacpan

SAVI.xs  view on Meta::CPAN

  {
    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);

SAVI.xs  view on Meta::CPAN

  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));

SAVI.xs  view on Meta::CPAN


    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);

SAVI.xs  view on Meta::CPAN

      }

      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();

SAVI.xs  view on Meta::CPAN

    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();

SAVI.xs  view on Meta::CPAN

  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.xs  view on Meta::CPAN

  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))));
    }
  }

SAVI.xs  view on Meta::CPAN

  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 0.697 second using v1.01-cache-2.11-cpan-5511b514fd6 )