- dopostdata= 0
-
- getstr= ""
- if GetVars:
- getstr= "?" + urllib.urlencode(GetVars)
- self.Message( "Get data:\n%s\n" % getstr )
-
- # now, attempt to make the request, starting at the first
- # server in the list
- for server in self.BOOTSERVER_CERTS:
- self.Message( "Contacting server %s." % server )
-
- certpath = self.BOOTSERVER_CERTS[server]
-
- curl= pycurl.Curl()
-
- # don't want curl sending any signals
- curl.setopt(pycurl.NOSIGNAL, 1)
-
- curl.setopt(pycurl.CONNECTTIMEOUT, ConnectTimeout)
- self.Message( "Connect timeout is %s seconds" % \
- ConnectTimeout )
-
- curl.setopt(pycurl.TIMEOUT, MaxTransferTime)
- self.Message( "Max transfer time is %s seconds" % \
- MaxTransferTime )
-
- curl.setopt(pycurl.FOLLOWLOCATION, 1)
- curl.setopt(pycurl.MAXREDIRS, 2)
-
- if self.USE_PROXY:
- curl.setopt(pycurl.PROXY, self.PROXY )
-
- if DoSSL:
- curl.setopt(pycurl.SSLVERSION, self.CURL_SSL_VERSION)
-
- url = "https://%s/%s%s" % (server,PartialPath,getstr)
- if DoCertCheck:
- curl.setopt(pycurl.CAINFO, certpath)
- curl.setopt(pycurl.SSL_VERIFYPEER, 2)
- self.Message( "Using SSL version %d and verifying peer." % \
- self.CURL_SSL_VERSION )
- else:
- curl.setopt(pycurl.SSL_VERIFYPEER, 0)
- self.Message( "Using SSL version %d" % \
- self.CURL_SSL_VERSION )
- else:
- url = "http://%s/%s%s" % (server,PartialPath,getstr)
-
- if dopostdata:
- curl.setopt(pycurl.POSTFIELDS, postdata)
-
- # setup multipart/form-data upload
- if FormData:
- curl.setopt(pycurl.HTTPPOST, FormData)
-
- curl.setopt(pycurl.URL, url)
- self.Message( "URL: %s" % url )
-
- # setup the output buffer
- buffer = StringIO()
- curl.setopt(pycurl.WRITEFUNCTION, buffer.write)
-
- try:
- self.Message( "Fetching..." )
- curl.perform()
- self.Message( "Done." )
-
- http_result= curl.getinfo(pycurl.HTTP_CODE)
- curl.close()
-
- # check the code, return the string only if it was successfull
- if http_result == self.HTTP_SUCCESS:
- self.Message( "Successfull!" )
- return buffer.getvalue()
- else:
- self.Message( "Failure, resultant http code: %d" % \
- http_result )
- return None
-
- except pycurl.error, err:
- errno, errstr= err
- self.Error( "connect to %s failed; curl error %d: '%s'\n" %
- (server,errno,errstr) )
-
- self.Error( "Unable to successfully contact any boot servers.\n" )
- return None
-
-