+# Levanta una variable del archivo AFINSTAL.CONF
+sub getConfVar {
+ $CONFIGFILE = shift(@_);
+ my $linenumber = shift(@_);
+ open(CONFIGFILE) or die "No se pudo abrir el archivo $CONFIGFILE";
+ do { $line = <CONFIGFILE> } until $. == $linenumber;
+ close(CONFIGFILE);
+ chop($line);
+ ($confvar = $line) =~ s/^.*= (.*)/$1/;
+ return $confvar;
+}
+
+# Agrega un log entry al logfile del antifraude.pl
+sub logEntry {
+ my $logentry = shift(@_);
+ my $consoleout = shift(@_);
+ my $log = "$CONFDATA{logdir}/$CONFDATA{logfile}";
+ # Fetch date and Format it
+ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
+ $year += 1900; $year = sprintf("%02d", $year % 100); ++$mon;
+ $user = getlogin || "Unidentified";
+ $commonstring = "[$mday/$mon/$year $hour:$min:$sec|$user|antifraude]";
+ # Append to log
+ open(LOGFILE,">>$log") or die "No se pudo abrir el archivo de log";
+ seek(LOGFILE,0,2);
+ print LOGFILE "$commonstring - $logentry\n";
+ $filesize = tell(LOGFILE);
+ close(LOGFILE);
+
+ # Chequeo el logsize y su lo supero me quedo con 100 lineas
+ if ($filesize > ($CONFDATA{logsize} * 1024 * 1024))
+ {
+ open(LOGFILE,"+<$log");
+ do ($line = <LOGFILE>) until $. == 100;
+ truncate(LOGFILE,tell(LOGFILE));
+ close(LOGFILE);
+ }
+
+ if ($consoleout) { print("$logentry\n"); }
+}
+
+sub badCall {
+ my $callreg = shift(@_);
+ my $numreg = shift(@_);
+ logEntry("El siguiente registro de llamada tiene formato invalido\n$callreg",0);
+ print("Warning: El registro de llamada $numreg tiene formato invalido\n");
+
+}
+
+sub checkUmbrales {
+ local(*callfields) = $_[0];
+ my $callsfile = $_[1];
+ my $matchedUmbral = 0;
+ my $i = 0;
+
+ while (($i <= $#UMBRALES) && ($matchedUmbral == 0)) {
+ $umbral = $UMBRALES[$i];
+ chomp($umbral);
+ ($regid,$phoneline,$oridest,$type,$state) = split(';',$umbral);
+ if (($state eq 'A') && ($callfields[0] == $phoneline) &&
+ ($callfields[4] eq $type)) {
+ # Si es Saliente y coincide el Destino con el Ori/Dest del umbral
+ if (($type eq 'S') && ($callfields[5] eq $oridest)) {
+ $matchedUmbral = $regid;
+ }
+ if (($type eq 'E') && ($callfields[6] eq $oridest)) {
+ $matchedUmbral = $regid;
+ }
+ }
+ ++$i;
+ }
+
+ # Si se matcheo un umbral, grabo una alarma y aviso por consola
+ if ($matchedUmbral > 0) {
+ # Obtengo algunos datos
+ ($central = $callsfile) =~ s/^.*\.//;
+ $user = getlogin || 'Unidentified';
+
+ # Fetch date and Format it
+ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
+ $year += 1900; ++$mon;
+ $date = "$year$mon$mday";
+ $time = "$hour$min$sec";
+
+ # Preparo el registro de alarma
+ $alarmEntry = "$callfields[7];$central;$callfields[0];$callfields[1];$regid;$callfields[2];$callfields[3];$user;$date;$time";
+
+ # Grabamos el registro en el archivo de alarmas
+ $alarmlog = "$CONFDATA{datadir}/alarmas/alarmas.txt";
+ open(ALARMFILE,">>$alarmlog") or die 'No se pudo abrir el archivo de alarmas';
+ seek(ALARMFILE,0,2);
+ print ALARMFILE "$alarmEntry\n";
+ close(ALARMFILE);
+
+ # Logeo por consola y logfile que hubo una alarma
+ logEntry("Alarma: Se ha matcheado el registro procesado con el umbral nro $matchedUmbral",1);
+ }
+}
+
+# --------- MAIN CODE -------- #