Subversion Repositories vgwhois

Rev

Rev 5 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. #
  4. #  VGWhoIs (ViaThinkSoft Global WhoIs, a fork of generic Whois / gwhois)
  5. #  Maintenance / Developer utilities
  6. #
  7. #  (c) 2012-2019 by Daniel Marschall, ViaThinkSoft <info@daniel-marschall.de>
  8. #
  9. #  License: https://www.gnu.org/licenses/gpl-2.0.html (GPL version 2)
  10. #
  11.  
  12. # FUT: sqlinj und cmdinj beheben
  13.  
  14. function gwitc_initdb($db) {
  15.         # "CREATE TABLE IF NOT EXISTS" does not work with my version of PHP/SQLite
  16.         $stm = "CREATE TABLE IF NOT EXISTS gwi_tc_whois_ping (
  17.                 id INTEGER PRIMARY KEY,
  18.                 server TEXT UNIQUE,
  19.                 fails INTEGER,
  20.                 lastcheck INTEGER,
  21.                 lastsucc INTEGER,
  22.                 firstfail INTEGER,
  23.                 lastfail INTEGER,
  24.                 reborn INTEGER
  25.         )";
  26.         $db->exec($stm);
  27. }
  28.  
  29. function gwitc_checkage_succ($db, $server) {
  30.         $stm = "SELECT lastsucc FROM gwi_tc_whois_ping WHERE server = '$server'";
  31.         $result = $db->query($stm);
  32.         if (!$result) die("Cannot execute query.");
  33.         $row = $result->fetchArray(SQLITE3_ASSOC);
  34.         $ts = (int)$row['lastsucc'];
  35.         $now = time();
  36.  
  37.         return ($now-$ts);
  38. }
  39.  
  40. function gwitc_checkage_check($db, $server) {
  41.         $stm = "SELECT lastcheck FROM gwi_tc_whois_ping WHERE server = '$server'";
  42.         $result = $db->query($stm);
  43.         if (!$result) die("Cannot execute query.");
  44.         $row = $result->fetchArray(SQLITE3_ASSOC);
  45.         $ts = (int)$row['lastcheck'];
  46.         $now = time();
  47.  
  48.         return ($now-$ts);
  49. }
  50.  
  51. function gwitc_reborn_val($db, $server) {
  52.         $stm = "SELECT reborn FROM gwi_tc_whois_ping WHERE server = '$server'";
  53.         $result = $db->query($stm);
  54.         if (!$result) die("Cannot execute query.");
  55.         $row = $result->fetchArray(SQLITE3_ASSOC);
  56.         return (int)$row['reborn'];
  57. }
  58.  
  59. function gwitc_fail_duration($db, $server) {
  60.         $stm = "SELECT firstfail,lastsucc,lastfail FROM gwi_tc_whois_ping WHERE server = '$server'";
  61.         $result = $db->query($stm);
  62.         if (!$result) die("Cannot execute query.");
  63.         $row = $result->fetchArray(SQLITE3_ASSOC);
  64.         $lastsucc = (int)$row['lastsucc'];
  65.         $firstfail = (int)$row['firstfail'];
  66.         $lastfail = (int)$row['lastfail'];
  67.  
  68.         if ($firstfail == 0) return 0;
  69.         if ($lastsucc > $lastfail) return 0;
  70.  
  71.         return ($lastfail-max($lastsucc,$firstfail));
  72. }
  73.  
  74. function gwitc_first_fail($db, $server) {
  75.         $stm = "SELECT firstfail,lastsucc FROM gwi_tc_whois_ping WHERE server = '$server'";
  76.         $result = $db->query($stm);
  77.         if (!$result) die("Cannot execute query.");
  78.         $row = $result->fetchArray(SQLITE3_ASSOC);
  79.         $lastsucc = (int)$row['lastsucc'];
  80.         $firstfail = (int)$row['firstfail'];
  81.  
  82.         if ($firstfail == 0) return 0;
  83.  
  84.         return max($firstfail,$lastsucc);
  85. }
  86.  
  87. function gwitc_set_reborn($db, $server, $val) {
  88.         $stm = "SELECT fails,lastsucc,firstfail FROM gwi_tc_whois_ping WHERE server = '$server'";
  89.         $result = $db->query($stm);
  90.         if (!$result) die("Cannot execute query.");
  91.         $row = $result->fetchArray(SQLITE3_ASSOC);
  92.         $fails = 0; // (int)$row['fails'];
  93.         $ts = time();
  94.         $lastsucc = $ts; // (int)$row['lastsucc'];
  95.         $firstfail = 0; // (int)$row['firstfail'];
  96.         $stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', $fails, $ts, $lastsucc, $ts, $firstfail, $val)";
  97.         $ok = $db->exec($stm);
  98.         if (!$ok) die("Cannot execute query.");
  99.  
  100.         return $fails;
  101. }
  102.  
  103. function gwitc_incr_failcounter($db, $server) {
  104.         $stm = "SELECT fails,lastsucc,firstfail FROM gwi_tc_whois_ping WHERE server = '$server'";
  105.         $result = $db->query($stm);
  106.         if (!$result) die("Cannot execute query.");
  107.         $row = $result->fetchArray(SQLITE3_ASSOC);
  108.         $fails = (int)$row['fails'];
  109.         $lastsucc = (int)$row['lastsucc'];
  110.  
  111.         $fails++;
  112.         $ts = time();
  113.         $firstfail = ($fails == 1) ? $ts : (int)$row['firstfail'];
  114.         $reborn = 0; // wenn er failed ist, kann er nicht reborned sein
  115.  
  116.         $stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', $fails, $ts, $lastsucc, $ts, $firstfail, $reborn)";
  117.         $ok = $db->exec($stm);
  118.         if (!$ok) die("Cannot execute query.");
  119.  
  120.         return $fails;
  121. }
  122.  
  123. function gwitc_reset_failcounter($db, $server) {
  124.         $stm = "SELECT lastfail,reborn FROM gwi_tc_whois_ping WHERE server = '$server'";
  125.         $result = $db->query($stm);
  126.         if (!$result) die("Cannot execute query.");
  127.         $row = $result->fetchArray(SQLITE3_ASSOC);
  128.         $lastfail = (int)$row['lastfail'];
  129.         $ts = time();
  130.         $reborn = (int)$row['reborn'];
  131.  
  132.         $stm = "REPLACE INTO gwi_tc_whois_ping (server,fails,lastcheck,lastsucc,lastfail,firstfail,reborn) VALUES ('$server', 0, $ts, $ts, $lastfail, 0, $reborn)";
  133.         $ok = $db->exec($stm);
  134.         if (!$ok) die("Cannot execute query.");
  135. }
  136.  
  137. function gwitc_list_whois_servers($patternfile) {
  138.         $out = array();
  139.         $cont = file($patternfile);
  140.         foreach ($cont as &$x) {
  141.                 $x = trim($x);
  142.                 if ($x == '') continue;
  143.                 if ($x[0] == '#') continue;
  144.                 if ((preg_match('@^:whois\|(.+)\|@isU', $x.'|', $m)) || (preg_match('@whois::(.+):@isU', $x.':', $m))) {
  145.                         $out[] = $m[1];
  146.                 }
  147.         }
  148.         $out = array_unique($out);
  149.         return $out;
  150. }
  151.