diff options
-rwxr-xr-x | mirror-checker.lua | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/mirror-checker.lua b/mirror-checker.lua index 9f70bcd..8b80e3f 100755 --- a/mirror-checker.lua +++ b/mirror-checker.lua | |||
@@ -173,23 +173,42 @@ local nlst = function (u) | |||
173 | return r and table.concat(t), e | 173 | return r and table.concat(t), e |
174 | end | 174 | end |
175 | 175 | ||
176 | checkURL = function (host, URL, r) | 176 | checkURL = function (host, URL, r, retry) |
177 | if nil == r then r = 0 end | 177 | if nil == r then r = 0 end |
178 | if nil == retry then retry = 0 end | ||
178 | local check = "Checking file" | 179 | local check = "Checking file" |
179 | if 0 < r then | 180 | if 0 < r then |
180 | check = "Redirecting to" | 181 | check = "Redirecting to" |
181 | -- checkIP(host) | 182 | -- checkHost(host, host) |
183 | end | ||
184 | if 0 < retry then | ||
185 | check = "Retry " .. retry .. " " .. check | ||
182 | end | 186 | end |
183 | if 10 < r then | 187 | if 10 < r then |
184 | E("too many redirects! " .. check .. " " .. host .. " -> " .. URL) | 188 | E("too many redirects! " .. check .. " " .. host .. " -> " .. URL) |
185 | return | 189 | return |
186 | end | 190 | end |
191 | if 10 < retry then | ||
192 | E("too many retries! " .. check .. " " .. host .. " -> " .. URL) | ||
193 | return | ||
194 | end | ||
187 | local PU = url.parse(URL, defaultURL) | 195 | local PU = url.parse(URL, defaultURL) |
188 | D(" " .. PU.scheme .. " :// " .. check .. " " .. host .. " -> " .. URL) | 196 | D(" " .. PU.scheme .. " :// " .. check .. " " .. host .. " -> " .. URL) |
189 | if not testing(PU.scheme) then D("not testing " .. PU.scheme .. " " .. host .. " -> " .. URL); return end | 197 | if not testing(PU.scheme) then D("not testing " .. PU.scheme .. " " .. host .. " -> " .. URL); return end |
190 | local hd = {Host = host} | 198 | local hd = {Host = host} |
191 | local p, c, h, s = http.request{method = "HEAD", redirect = false, url = URL, headers = hd} | 199 | local p, c, h, s = http.request{method = "HEAD", redirect = false, url = URL, headers = hd} |
192 | if nil == p then E(c .. "! " .. check .. " " .. host .. " -> " .. URL) else | 200 | if nil == s then s = "" end |
201 | if nil == p then | ||
202 | E(c .. " " .. s .. "! " .. check .. " " .. host .. " -> " .. URL) | ||
203 | -- So far the only errors are "timeout", "Network is unreachable", and "closed", and I suspect "closed" is due to saturating my bandwidth. | ||
204 | -- Might be worthwhile retrying those, some number of times. | ||
205 | if ("closed" == c) or ("Network is unreachable" == c) or ("timeout" == c) then checkURL(host, URL, r, retry + 1) end | ||
206 | else | ||
207 | if ("4" == tostring(c):sub(1, 1)) or ("5" == tostring(c):sub(1, 1)) then | ||
208 | E(c .. " " .. s .. ". " .. check .. " " .. host .. " -> " .. URL) | ||
209 | else | ||
210 | I(c .. " " .. s .. ". " .. check .. " " .. host .. " -> " .. URL) | ||
211 | end | ||
193 | l = h.location | 212 | l = h.location |
194 | if nil ~= l then | 213 | if nil ~= l then |
195 | local pu = url.parse(l, defaultURL) | 214 | local pu = url.parse(l, defaultURL) |
@@ -203,7 +222,7 @@ checkURL = function (host, URL, r) | |||
203 | if testing("Protocol") and pu.scheme ~= PU.scheme then | 222 | if testing("Protocol") and pu.scheme ~= PU.scheme then |
204 | W("protocol changed during redirect! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l) | 223 | W("protocol changed during redirect! " .. check .. " " .. host .. " -> " .. URL .. " -> " .. l) |
205 | end | 224 | end |
206 | checkURL(pu.host, l, r + 1) | 225 | checkURL(pu.host, l, r + 1, retry) |
207 | end | 226 | end |
208 | end | 227 | end |
209 | end | 228 | end |