<?php

//    session_start();
    
$page_from $_SERVER['PHP_SELF'];
    if(
$_REQUEST['source'] == 'yes')
    {
        
show_source(__FILE__);
        exit();
    }
    include (
"include/conexion.php");
    include (
"include/funciones.php");
    
$error 0;
    
$devel false;
    if (
$devel == true)
    {
        exit;
    }    
    
// CÓDIGO UTILIZADO PARA QUE EL SCRIPT SOLO SE EJECUTE UNA VEZ Y NO HAYA DOBLE EJECUCIÓN.
// ESTE PROCEDIMIENTO LO VAMOS A MANTENER HASTA TANTO MEJOREMOS EL CÓDIGO Y PERMITAMOS ACTUALIZACIÓN
// SIMULTANEA DE DATOS O BIEN FORKS DE PROCESOS.-

    
$strSysName $_REQUEST['identity'];
    
$strSysUpTime $_REQUEST['uptime'];
    
$strSysContact $_REQUEST['contact'];
    
$strSysDescr $_REQUEST['gral_dsc'];
    
$strSysLocation $_REQUEST['location'];
    
$strSysServices $_REQUEST['services'];
    
$scrver $_REQUEST['scrver'];
    
$unixtimestampcpe $_REQUEST['unitimestampcpe'];
    
    


    
// Opens a connection to a MySQL server
    
$connection=mysql_connect ($db_host$db_username$db_password);
    if (!
$connection) {
        die(
'Not connected : ' mysql_error());
    }
    
// Set the active MySQL database
    
$db_selected mysql_select_db($db_name$connection);
    if (!
$db_selected) {
      die (
'Can\'t use db : ' mysql_error());
    }

    
// time() retorna la cantidad de segundos desde 1970 - conocido como tiempo epoch
    
$now time();
    
// aqui yo utilizo una función creada particularmente para nosotros ya que nuestro sistema está desarrollado con lenguaje Clarion
    // y este guarda la fecha en formato LONG y por compatibilidad entre sistemas.-
    
    
$fecha ALL_SQLToClaDate(ALL_ObtenerHoy("dia"),ALL_ObtenerHoy("mes"),ALL_ObtenerHoy("ano"));
    
$hora date("H:i:s");

/*
    FUNCIONAMIENTO DEL ALGORITMO:
    TODO EL FUNCIONAMIENTO SE BASA SOBRE UN SISTEMA DE RED RUTEADA, NO ENMASCARADA.
    ESTO ES IMPORTANTE YA QUE:
    EL CPE HACE UN GET/POST SOBRE ESTA URL.
    EL WEBSERVICE TOMA EL $_SERVER['REMOTE_ADDR'] PARA VER SI SE ENCUENTRA DADO DE ALTA EL EQUIPO EN LA BASE DE DATO DEL SISTEMA
    SI EL EQUIPO SE ENCUENTRA DADO DE ALTA EN EL SISTEMA, ENTONCES TOMA LOS DATOS DE LA TABLA Y CONTINUA
    SI EL EQUIPO NO SE ENCUENTRA DADO DE ALTA EN EL SISTEMA, ENTONCES, PRIMERO DAMOS DE ALTA EL EQUIPO EN LA TABLA (ON-THE-FLY) Y CONTINUA
    (CONTINUA): LUEGO DE LA VERIFICACIÓN ANTERIOR, EL SISTEMA PROCEDE A INGRESAR LAS STATS EN LA TABLA

*/
    
$defaultIP "192.168.1.20";
    
$remoteIP $_SERVER['REMOTE_ADDR'];
    
$Cla_remoteIP ALL_IPv4ToCla($remoteIP);
    if(
$remoteIP == $defaultIP)
    {
        
// SI SE ESTÁ ACTUALIZANDO DESDE UN EQUIPO CON LA IP POR DEFECTO, ENTONCES
        // SALGO DEL WEBSERVICES SIN HACER NADA HASTA TANTO SE ACTUALICE CON LA IP REAL.
        // TO DO: VER SI CONVIENE ENVIAR UN MAIL A ADMINISTRADOR PARA HACER NOTAR ESTA ACCIÓN.-
        
exit();
    }
    
    
    
// VERIFICO SI EXISTE EL EQUIPO
    //mysql_query("START TRANSACTION READ WRITE");
//    mysql_query("LOCK TABLES tbl_Equipos WRITE, tbl_MACsEquipos READ, tbl_OperationMode READ;");
    
mysql_query("LOCK TABLES tbl_Equipos WRITE, tbl_OperationMode READ;");
    
$query "SELECT *, count(*) AS CANTEQUIPO FROM tbl_Equipos WHERE " .
                
"IPV4ADDRESS='" $Cla_remoteIP "' AND " .
                
"IDENTITY='" $strSysName "'";
    
$result mysql_query($query);
    if(!
$result)
    {
        echo 
'1-Invalid query: ' mysql_error();
        
mysql_query("UNLOCK TABLES;");
        exit();
    }
    else
    {
        while(
$row = @mysql_fetch_assoc($result))
        {
            if (
$row['CANTEQUIPO'] == 1)
            {
                
// EL EQUIPO EXISTE, POR LO TANTO DEBO TOMAR TODOS LOS DATOS DE AQUÍ Y CONTINUAR
                
$strID_Equipo $row['ID'];
                
$strID_OPERATIONMODE $row['ID_OPERATIONMODE'];
                
mysql_query("UNLOCK TABLES;");
            }
            else
            {
                
// EL EQUIPO NO EXISTE, POR LO TANTO DEBO DE INGRESARLO A LA BASE DE DATOS ANTES DE PODER CONTINUAR
                // COMO PUEDEN OCURRIR MUCHAS CONSULTAS O INSERTS CONCURRENTES, POR LAS DUDAS TENGO CUIDADO LOCKING LA BASE 
                
$query10 "SELECT MAX(ID) AS ID FROM tbl_Equipos";
                
$result10 mysql_query($query10);
                if(!
$result10)
                {
                    echo 
'2-Invalid query: ' mysql_error();
                    
mysql_query("UNLOCK TABLES;");
                    exit();
                }
                else
                {
                    while(
$row10 = @mysql_fetch_assoc($result10))
                    {
                        
$maxID $row10['ID']+1;
                    }
                    
$queryInsert =     "INSERT INTO tbl_Equipos SET " .
                                    
'ID=' $maxID ', ' .
                                    
'TIPOEQUIPO="' "DIST" '", ' .
                                    
'IDENTITY="' $strSysName '", ' .
                                    
'OBSERVACION="' "AGREGADO AUTOMATICAMENTE" '", ' .
                                    
'ID_OPERATIONMODE=' "99" ', ' .
                                    
'ID_CHANNELOPERATIONMODE=' "99" ', ' .
                                    
'ID_AGAINSTTOID_EQUIPO=' "0" ', ' .
                                    
'IPV4ADDRESS="' $Cla_remoteIP '", ' .
                                    
'LATITUD="' "-32.946856" '", ' .
                                    
'LONGITUD="' "-60.636143" '", ' .
                                    
'ESTADO="' "Activo" '", ' .
                                    
'LAST_ID_EQUIPO="' "0" '", ' .
                                    
'LAST_NRORENGLON_EQUIPO="' "0" '", ' .
                                    
'LAST_UNIXTIMESTAMP=' "0" ' ';                            
                    
$result11 mysql_query($queryInsert);
                    if(!
$result11)
                    {
                        
mysql_query("UNLOCK TABLES;");
                        exit();
                    }
                    else
                    {
                        
mysql_query("UNLOCK TABLES;");
                        
$strID_Equipo $maxID;
                        
$strID_OPERATIONMODE 99;
                        
                    }
//elseif(!$result11)
                
}//elseif(!$result10)
            
}//elseif ($row['CANTEQUIPO'] == 1)
        
}//while($row = @mysql_fetch_assoc($result))
    
}//else
//    mysql_query("LOCK TABLES tbl_MACsEquipos WRITE, tbl_Equipos READ, tbl_OperationMode READ;");
    
mysql_query("LOCK TABLES tbl_Equipos READ, tbl_OperationMode READ;");
    
// CON EL ID_OPERATIONMODE PUEDO OBTENER EL CODIGOTIPOHS
    
$query "SELECT * FROM tbl_OperationMode WHERE ID='" $strID_OPERATIONMODE "'";
    
$result mysql_query($query);
    if(!
$result)
    {
        echo 
'3-Invalid query: ' mysql_error();
        
mysql_query("UNLOCK TABLES;");
        exit();
    }
    else
    {                            
        while(
$row = @mysql_fetch_assoc($result))
        {
            
$strCODITOTIPOHS $row['CODIGOTIPOHS'];
        }
    }
//if(!$result)


    // AHORA VALIDAMOS LA MAC EN EL SISTEMA
    /*
    FUNCIONAMIENTO DEL ALGORITMO:
    EL WEBSERVICE TOMA EL $_REQUEST['if_mac'] PARA VER SI SE ENCUENTRA DADO DE ALTA EL EQUIPO EN LA BASE DE DATO DEL SISTEMA
    SI EL EQUIPO SE ENCUENTRA DADO DE ALTA EN EL SISTEMA, ENTONCES TOMA LOS DATOS DE LA TABLA Y CONTINUA
    SI EL EQUIPO NO SE ENCUENTRA DADO DE ALTA EN EL SISTEMA, ENTONCES, PRIMERO DAMOS DE ALTA EL EQUIPO EN LA TABLA (ON-THE-FLY) Y CONTINUA
    (CONTINUA): LUEGO DE LA VERIFICACIÓN ANTERIOR, EL SISTEMA PROCEDE A INGRESAR LAS STATS EN LA TABLA                    
    */
/*
    $ifName = array();
    $ifName[0] = "lo";
    $ifName[1] = "wifi0";
    $ifName[2] = "";
    //$ifName[3] = "br0";
    

    $strIFACE_MACADDRESS = $_REQUEST['if_mac'];    
    $strIFACE_NAME = $_REQUEST['if_name'];

    if(!in_array($strIFACE_NAME,$ifName))
    {
        // SOLO DOY DE ALTA LA MAC EN CASO DE QUE LA INTERFACE NO ESTÉ DENTRO DEL ARRAY ARRIBA MENCIONADO
        
        // OBTENGO EL ID_EQUIPO DATA LA MAC ADDRESS EN $_REQUEST
//                            mysql_query("START TRANSACTION READ WRITE");
        
        $query2 =     "SELECT count(*) AS CANTMAC FROM tbl_MACsEquipos WHERE " .
                    "ID='" . trim($strID_Equipo) . "' AND " .
                    "IF_NAME='" . trim($strIFACE_NAME) . "' AND " .
                    "MACADDRESS='" . trim($strIFACE_MACADDRESS) . "'";
        $result2 = mysql_query($query2);
        if (!$result2) {
            echo '4-Invalid query: ' . mysql_error();
            mysql_query("UNLOCK TABLES;");
            //mysql_query("ROLLBACK");
            exit();
        }
        else
        {
            while ($row2 = @mysql_fetch_assoc($result2))
            {
                if ($row2['CANTMAC'] == 1)
                {
                    // EL EQUIPO EXISTE, POR LO TANTO DEBO TOMAR TODOS LOS DATOS DE AQUÍ Y CONTINUAR
                    //$strID_Equipo = $row['ID'];
                    //$strID_OPERATIONMODE = $row['ID_OPERATIONMODE'];
                    mysql_query("UNLOCK TABLES;");
                }
                else
                {
                    // EL EQUIPO NO EXISTE, POR LO TANTO DEBO DE INGRESARLO A LA BASE DE DATOS ANTES DE PODER CONTINUAR
                    // COMO PUEDEN OCURRIR MUCHAS CONSULTAS O INSERTS CONCURRENTES, POR LAS DUDAS TENGO CUIDADO LOCKING LA BASE 
                    //mysql_query("START TRANSACTION");
                    $query10 =     "SELECT MAX(NRORENGLON) AS NRORENGLON FROM tbl_MACsEquipos WHERE " .
                                "ID='" . $strID_Equipo . "'";
                    $result10 = mysql_query($query10);
                    if(!$result10)
                    {
                        //die('Invalid query: ' . mysql_error());
                        echo '5-Invalid query: ' . mysql_error();
                        mysql_query("UNLOCK TABLES;");
                        //mysql_query("ROLLBACK");
                        exit();
                    }
                    else
                    {
                        while($row10 = @mysql_fetch_assoc($result10))
                        {
                            if($row10['NRORENGLON'] == NULL)
                            {
                                $maxID = 1;
                            }
                            else
                            {
                                $maxID = $row10['NRORENGLON']+1;
                            }
                        }
                        $queryInsert =     "INSERT INTO tbl_MACsEquipos SET " .
                                        "ID='" . $strID_Equipo . "', " .
                                        "NRORENGLON='" . $maxID . "', " .
                                        "IF_NAME='" . $strIFACE_NAME . "', " .
                                        "MACADDRESS='" . $strIFACE_MACADDRESS . "'";                        
                        $result11 = mysql_query($queryInsert);
                        if(!$result11)
                        {
                            //mysql_query("ROLLBACK");
                            mysql_query("UNLOCK TABLES;");
                            exit();
                        }else
                        {
                            //mysql_query("COMMIT");
                            mysql_query("UNLOCK TABLES;");
                        }
                    }//elseif(!$result10)
                }//elseif ($row2['CANTMAC'] == 1)
            }//while ($row2 = @mysql_fetch_assoc($result2))
        }//if (!$result2)

    }//if(!in_array($strIFACE_NAME,$ifName))                        
    
*/    
    
$ifName = array();
    
$ifName[0] = "lo";
    
$ifName[1] = "wifi0";
    
$ifName[2] = "";
//    $ifName[3] = "br0";
    

    
$strIFACE_MACADDRESS $_REQUEST['if_mac'];    
    
$strIFACE_NAME $_REQUEST['if_name'];

    if(!
in_array($strIFACE_NAME,$ifName))
    {
    

        
// OBTENGO EL ÚLTIMO NRO DE RENGLÓN PARA UN STATS_EQUIPO
//        mysql_query("START TRANSACTION READ WRITE");
        //tbl_Equipos WRITE, tbl_MACsEquipos WRITE, tbl_OperationMode READ
        
mysql_query("LOCK TABLES tbl_DetEquiposSNMPStats WRITE, tbl_Equipos READ, tbl_MACsEquipos READ, tbl_OperationMode READ ;");
//        mysql_query("LOCK TABLES tbl_DetEquiposSNMPStats WRITE;");
        
$query2 "SELECT MAX(NRORENGLON) AS NRORENGLON FROM tbl_DetEquiposSNMPStats WHERE ID_EQUIPO=" $strID_Equipo;
        
$result2 mysql_query($query2);
        if (!
$result2) {
            echo 
'6-Invalid query: ' mysql_error();
            
//mysql_query("ROLLBACK");
            
mysql_query("UNLOCK TABLES");
            exit();
        }
        else
        {
            while (
$row2 = @mysql_fetch_assoc($result2))
            {
                
$nextNroRenglon1 $row2['NRORENGLON'] + 1;
            }
            
            
$query2 "SELECT * FROM tbl_Equipos WHERE ID=" $strID_Equipo;
            
$result2 mysql_query($query2);
            if (!
$result2) {
                echo 
'7-Invalid query: ' mysql_error();
                
//mysql_query("ROLLBACK");
                
mysql_query("UNLOCK TABLES");
                exit();
            }
            else
            {
                while (
$row2 = @mysql_fetch_assoc($result2))
                {
                    
$nextNroRenglon2 $row2['LAST_NRORENGLON_EQUIPO'] + 1;
                }
                if(
$nextNroRenglon1 $nextNroRenglon2)
                {
                    
$nextNroRenglon $nextNroRenglon1;
                }
                else
                {
                    
$nextNroRenglon $nextNroRenglon2;
                }
        
            
                if(!
$scrver)
                {
                    
$scrver=0;
                }
                if(!
$unixtimestampcpe)
                {
                    
$unixtimestampcpe $now;
                };
            
                
$sqlstr 'INSERT INTO tbl_DetEquiposSNMPStats SET ';
                
$sqlstr .= 'ID_EQUIPO=' $strID_Equipo ', ';
                
$sqlstr .= 'NRORENGLON=' $nextNroRenglon ', ';
                
$sqlstr .= 'FECHA="' $fecha '", ';
                
$sqlstr .= 'HORA="' $hora '", ';
                
$sqlstr .= 'CODIGOTIPOHS=' $strCODITOTIPOHS ', ';
                
$sqlstr .= 'IDENTITY="' $strSysName '", ';
                
$sqlstr .= 'UPTIME="' $strSysUpTime '", ';
                
$sqlstr .= 'CONTACT="' $strSysContact '", ';
                
$sqlstr .= 'DESCRIPTION_GRAL="' $strSysDescr '", ';
                
$sqlstr .= 'LOCATION="' $strSysLocation '", ';
                
$sqlstr .= 'SERVICES="' $strSysServices '", ';
            
                
$rx_bytes $_REQUEST['rx_bits'];
                
$tx_bytes $_REQUEST['tx_bits'];
                
$rx_bits $rx_bytes;
                
$tx_bits $tx_bytes;
            
                
$strIFACE_NAME $_REQUEST['if_name'];
                
$sqlstr .= 'IFACE_NAME="' $strIFACE_NAME '", ';
                
$strIFACE_TYPE $_REQUEST['if_type'];
                
$sqlstr .= 'IFACE_TYPE="' $strIFACE_TYPE '", ';
                
$strIFACE_MTU $_REQUEST['if_mtu'];
                
$sqlstr .= 'IFACE_MTU="' $strIFACE_MTU '", ';
                
$strIFACE_SPEED $_REQUEST['if_speed'];
                
$sqlstr .= 'IFACE_SPEED="' $strIFACE_SPEED '", ';
                
$strIFACE_MACADDRESS $_REQUEST['if_mac'];
                
$sqlstr .= 'IFACE_MACADDRESS="' $strIFACE_MACADDRESS '", ';
                
$strIFACE_ADMIN_STATUS $_REQUEST['if_admin_status'];
                
$sqlstr .= 'IFACE_ADMIN_STATUS="' $strIFACE_ADMIN_STATUS '", ';
                
$strIFACE_OPER_STATUS $_REQUEST['if_oper_status'];
                
$sqlstr .= 'IFACE_OPER_STATUS="' $strIFACE_OPER_STATUS '", ';
                
$strIFACE_LAST_CHANGE $_REQUEST['if_last_change'];
                
$sqlstr .= 'IFACE_LAST_CHANGE="' $strIFACE_LAST_CHANGE '", ';
                
$strIFACE_IN_OCTECTS $rx_bits;
                
$sqlstr .= 'IFACE_IN_OCTECTS="' $strIFACE_IN_OCTECTS '", ';
                
$strIFACE_OUT_OCTETS $tx_bits;
                
$sqlstr .= 'IFACE_OUT_OCTETS="' $strIFACE_OUT_OCTETS '", ';
                
$strIFACE_IN_UCAST_PKTS_OCTETS $_REQUEST['rx_ucast_packets'];
                
$sqlstr .= 'IFACE_IN_UCAST_PKTS_OCTETS="' $strIFACE_IN_UCAST_PKTS_OCTETS '", ';
                
$strIFACE_OUT_UCAST_PKTS_OCTETS $_REQUEST['tx_ucast_packets'];
                
$sqlstr .= 'IFACE_OUT_UCAST_PKTS_OCTETS="' $strIFACE_OUT_UCAST_PKTS_OCTETS '", ';
                
$strIFACE_IN_NUCAST_PKTS_OCTETS $_REQUEST['rx_nucast_packets'];
                
$sqlstr .= 'IFACE_IN_NUCAST_PKTS_OCTETS="' $strIFACE_IN_NUCAST_PKTS_OCTETS '", ';
                
$strIFACE_OUT_NUCAST_PKTS_OCTETS $_REQUEST['tx_nucast_packets'];
                
$sqlstr .= 'IFACE_OUT_NUCAST_PKTS_OCTETS="' $strIFACE_OUT_NUCAST_PKTS_OCTETS '", ';
                
$strIFACE_IN_DISCARDS $_REQUEST['rx_discard_packets'];
                
$sqlstr .= 'IFACE_IN_DISCARDS="' $strIFACE_IN_DISCARDS '", ';
                
$strIFACE_OUT_DISCARD $_REQUEST['tx_discard_packets'];
                
$sqlstr .= 'IFACE_OUT_DISCARDS="' $strIFACE_OUT_DISCARD '", ';
                
$strIFACE_IN_ERRORS $_REQUEST['rx_error_packets'];
                
$sqlstr .= 'IFACE_IN_ERRORS="' $strIFACE_IN_ERRORS '", ';
                
$strIFACE_OUT_ERRORS $_REQUEST['tx_error_packets'];
                
$sqlstr .= 'IFACE_OUT_ERRORS="' $strIFACE_OUT_ERRORS '", ';
                
$strIFACE_IN_UNKNOWN_PROTOS 0;
                
$sqlstr .= 'IFACE_IN_UNKNOWN_PROTOS="' $strIFACE_IN_UNKNOWN_PROTOS '", ';
                
$sqlstr .= 'IPV4ADDRESS="' $Cla_remoteIP '", ';
                
$sqlstr .= 'UNIXTIMESTAMPCPE="' $unixtimestampcpe '", ';
                
$sqlstr .= 'SCRVER="' $scrver '", ';
                
$sqlstr .= 'UNIXTIMESTAMP="' $now '"';
            
//    echo $sqlstr;
            //    echo "<br>";
                
$insertstat mysql_query($sqlstr);
                if (!
$insertstat) {
                    echo 
'8-Invalid query: ' mysql_error();
                    
//mysql_query("ROLLBACK");
                    
mysql_query("UNLOCK TABLES");
                    exit();
                }else
                {
                    
mysql_query("UNLOCK TABLES");
                }
            }
//elseif (!$result2)
        
}//elseif (!$result2)
    
}//if(!in_array($strIFACE_NAME,$ifName))