summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/Proxy.py39
-rw-r--r--src/lib/SSLServer.py4
2 files changed, 40 insertions, 3 deletions
diff --git a/src/lib/Proxy.py b/src/lib/Proxy.py
index 864756f49..de2941a3c 100644
--- a/src/lib/Proxy.py
+++ b/src/lib/Proxy.py
@@ -94,6 +94,45 @@ class XMLRPCTransport(xmlrpclib.Transport):
https._setup(http)
return https
+ def request(self, host, handler, request_body, verbose=0):
+ '''send request to server and return response'''
+ h = self.make_connection(host)
+ self.send_request(h, handler, request_body)
+ self.send_host(h, host)
+ self.send_user_agent(h)
+ self.send_content(h, request_body)
+
+ errcode, errmsg, headers = h.getreply()
+ msglen = int(headers.dict['content-length'])
+
+ if errcode != 200:
+ raise ProtocolError(host + handler, errcode, errmsg, headers)
+
+ self.verbose = verbose
+
+ return self._get_response(h.getfile(), msglen)
+
+ def _get_response(self, fd, length):
+ # read response from input file/socket, and parse it
+ recvd = 0
+
+ p, u = self.getparser()
+
+ while recvd < length:
+ rlen = min(length - recvd, 1024)
+ response = fd.read(rlen)
+ recvd += len(response)
+ if not response:
+ break
+ if self.verbose:
+ print "body:", repr(response), len(response)
+ p.feed(response)
+
+ fd.close()
+ p.close()
+
+ return u.close()
+
def ComponentProxy (url, user=None, password=None, key=None, cert=None, ca=None):
"""Constructs proxies to components.
diff --git a/src/lib/SSLServer.py b/src/lib/SSLServer.py
index c29f0233b..a3840f71f 100644
--- a/src/lib/SSLServer.py
+++ b/src/lib/SSLServer.py
@@ -191,9 +191,7 @@ class XMLRPCRequestHandler (SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
self.wfile.flush()
self.wfile.close()
self.rfile.close()
- #self.connection.unwrap()
- self.connection.shutdown(1)
-
+ self.connection.unwrap()
class XMLRPCServer (SocketServer.ThreadingMixIn, SSLServer,
XMLRPCDispatcher, object):