Subversion Repositories vgwhois

Rev

Rev 5 | Go to most recent revision | Details | Last modification | View Log | RSS feed

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