mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-02 09:52:27 -04:00
download error - retry contents.xml download on http fail, setPandaErrorCode by http error if giving up and write pandaErrorCode to log
This commit is contained in:
parent
0949ebd92a
commit
40186e5499
@ -1,5 +1,7 @@
|
||||
from pandac.PandaModules import HashVal, Filename, PandaSystem, DocumentSpec, Ramfile
|
||||
from pandac.PandaModules import HTTPChannel
|
||||
from pandac import PandaModules
|
||||
from libpandaexpress import ConfigVariableInt
|
||||
from direct.p3d.PackageInfo import PackageInfo
|
||||
from direct.p3d.FileSpec import FileSpec
|
||||
from direct.directnotify.DirectNotifyGlobal import directNotify
|
||||
@ -153,14 +155,55 @@ class HostInfo:
|
||||
request.setCacheControl(DocumentSpec.CCNoCache)
|
||||
|
||||
self.notify.info("Downloading contents file %s" % (request))
|
||||
|
||||
rf = Ramfile()
|
||||
channel = http.makeChannel(False)
|
||||
channel.getDocument(request)
|
||||
if not channel.downloadToRam(rf):
|
||||
self.notify.warning("Unable to download %s" % (url))
|
||||
rf = None
|
||||
|
||||
statusCode = None
|
||||
statusString = ''
|
||||
for attempt in range(ConfigVariableInt('contents-xml-dl-attempts', 3)):
|
||||
if attempt > 0:
|
||||
self.notify.info("Retrying (%s)..."%(attempt,))
|
||||
rf = Ramfile()
|
||||
channel = http.makeChannel(False)
|
||||
channel.getDocument(request)
|
||||
if channel.downloadToRam(rf):
|
||||
self.notify.warning("Successfully downloaded %s" % (url,))
|
||||
break
|
||||
else:
|
||||
rf = None
|
||||
statusCode = channel.getStatusCode()
|
||||
statusString = channel.getStatusString()
|
||||
self.notify.warning("Could not contact download server at %s" % (url,))
|
||||
self.notify.warning("Status code = %s %s" % (statusCode, statusString))
|
||||
|
||||
if not rf:
|
||||
self.notify.warning("Unable to download %s" % (url,))
|
||||
try:
|
||||
# Something screwed up.
|
||||
if statusCode == HTTPChannel.SCDownloadOpenError or \
|
||||
statusCode == HTTPChannel.SCDownloadWriteError:
|
||||
launcher.setPandaErrorCode(2)
|
||||
elif statusCode == 404:
|
||||
# 404 not found
|
||||
launcher.setPandaErrorCode(5)
|
||||
elif statusCode < 100:
|
||||
# statusCode < 100 implies the connection attempt itself
|
||||
# failed. This is usually due to firewall software
|
||||
# interfering. Apparently some firewall software might
|
||||
# allow the first connection and disallow subsequent
|
||||
# connections; how strange.
|
||||
launcher.setPandaErrorCode(4)
|
||||
else:
|
||||
# There are other kinds of failures, but these will
|
||||
# generally have been caught already by the first test; so
|
||||
# if we get here there may be some bigger problem. Just
|
||||
# give the generic "big problem" message.
|
||||
launcher.setPandaErrorCode(6)
|
||||
except NameError,e:
|
||||
# no launcher
|
||||
pass
|
||||
except AttributeError, e:
|
||||
self.notify.warning("%s" % (str(e),))
|
||||
pass
|
||||
return False
|
||||
|
||||
tempFilename = Filename.temporary('', 'p3d_', '.xml')
|
||||
if rf:
|
||||
f = open(tempFilename.toOsSpecific(), 'wb')
|
||||
|
Loading…
x
Reference in New Issue
Block a user