]>
git.ipfire.org Git - ipfire.org.git/blob - download/getfile.py
8 from mimetypes
import guess_type
10 debug
= None #open("debug.log", "a")
13 # PRIO SCHEME HOSTNAME PATH
14 ( 2, "http", "mirror1.ipfire.org", "/",),
15 ( 4, "http", "mirror2.ipfire.org", "/",),
16 ( 4, "http", "mirror5.ipfire.org", "/",),
17 ( 8, "http", "www.rowie.at", "/ipfire/",),
18 ( 8, "http", "ipfire.earl-net.com", "/",),
19 ( 8, "http", "ipfire.kbarthel.de", "/",),
20 ( 8, "http", "ipfire.1l0v3u.com", "/",),
21 ( 4, "http", "hex2.sv-altikon.ch", "/ipfire/",),
22 ( 8, "http", "ipfire.wintertech.de", "/",),
26 return random
.randint(0, len(servers
)-1)
29 mimetype
= guess_type(file)[0] or "text/plain"
31 size
= os
.fstat(f
.fileno()).st_size
32 print "Status: 200 OK"
33 print "Content-Type:", mimetype
35 print "Content-Length:", size
41 def __init__(self
, scheme
="http", hostname
=None, path
=None, priority
=0):
42 self
.hostname
= hostname
46 self
.priority
= priority
49 return "%s://%s%s" % (self
.scheme
, self
.hostname
, self
.path
)
55 return "<%s.%s %s>" % (__name__
, __class__
, self
.__str
__())
58 return os
.system("ping -c1 -w1 %s &>/dev/null" % self
.hostname
)
63 f
= urllib2
.urlopen("%s" % urlparse
.urljoin(self
.url(), file))
64 except (urllib2
.HTTPError
, urllib2
.URLError
), e
:
66 debug
.write("ERR %s %s\n" % (self
.url(), e
))
75 self
.prio_servers
= []
85 for server
in self
.all():
86 for priority
in range(0, server
.priority
):
91 servers
= self
.shuffled()
92 return servers
[rnd(servers
)]
94 def add(self
, server
):
95 self
.servers
.append(server
)
97 def rem(self
, server
):
99 for host
in self
.all():
100 if not host
== server
:
106 for (priority
, scheme
, hostname
, path
) in hosts
:
107 servers
.add(Server(scheme
=scheme
, hostname
=hostname
, path
=path
, priority
=priority
))
109 file = cgi
.FieldStorage().getfirst("file")
112 server
= servers
.one()
118 url
= server
.file(file)
123 print "Status: 302 Moved Temporarily"
124 print "Location:", url
125 print "Pragma: no-cache"
129 debug
.write("OK %s\n" % url
)
133 if os
.access(file, os
.R_OK
):
136 print "Status: 404 Not Found"
137 print "Pragma: no-cache"
141 debug
.write("ERR %s wasn't found on any server" % file)