#
# Trend Micro FileScan API via Trophie
#
use IO::Socket;
$|=1;


if ($trophie_sockname) {
    do_log(2,"Using Trophie");
    socket(\*sock, AF_UNIX, SOCK_STREAM, 0) || do_exit($REGERR, __LINE__);
    connect(\*sock, pack_sockaddr_un $trophie_sockname) || do_exit($REGERR, __LINE__);

    opendir(DIR, "$TEMPDIR/parts/") || do_exit($REGERR, __LINE__);
    my @files = grep { -f "$TEMPDIR/parts/$_" } readdir(DIR);             	
    chomp(@files);
    foreach my $file (@files) {
	if ($file =~ /^([\w\d\-.]+)$/) {
	    $file = $1;
       	} else {
	    do_log(0,"Unsafe partname $file");
	    do_exit($REGERR, __LINE__); 
	}
	# needed "\n", otherwise it won't work
	$file = "$TEMPDIR/parts/$file\n";
	
	syswrite(\*sock, $file, length($file))
	  or die "syswrite to Trophie failed: $!";
	sysread(\*sock, $output, 256)
	  or die "sysread from Trophie failed: $!";

	chomp($output);
	$output =~ s/[^\w\d\-._:\/]+//g;
	do_log(2,"Trophie: $file - $output");
	last if ($output =~ m/^1/); 
    }
#    $errval = ($? >> 8);
#    do_log(2,$output);

    close(\*sock) or die "Trophie socket close failed: $!";

    $scanner_errors = 0;

    if ($output =~ m/^1/) {
	if ($output =~ m/^1:.*$/) {
	    @virusname = ($output =~ m/^1:(.*)$/g);
	}
	do_virus();
    } elsif ($output == -1) {
	$scanner_errors &= 1;
	do_log(0,"Virus scanner failure: Trophie - UNKNOWN STATUS (error code: $output)");
    } elsif ( ($output != 1) && ($output != 0) && ($output != -1) ) {
	$scanner_errors &= 1;
	do_log(0,"Virus scanner failure: Trophie - OOOPS (error code: $output)");
    }
}
