diff options
Diffstat (limited to 'libpathod')
-rw-r--r-- | libpathod/language.py | 5 | ||||
-rw-r--r-- | libpathod/pathoc.py | 23 | ||||
-rw-r--r-- | libpathod/pathod.py | 4 |
3 files changed, 20 insertions, 12 deletions
diff --git a/libpathod/language.py b/libpathod/language.py index 4c1a4977..286a1a8e 100644 --- a/libpathod/language.py +++ b/libpathod/language.py @@ -765,11 +765,12 @@ class _Message(object): def resolve(self, settings, request_host): tokens = self.tokens[:] if not self.raw: - if self.body and not utils.get_header("Content-Length", self.headers): + if not utils.get_header("Content-Length", self.headers): + length = 0 if not self.body else len(self.body.value.get_generator(settings)) tokens.append( Header( ValueLiteral("Content-Length"), - ValueLiteral(str(len(self.body.value.get_generator(settings)))), + ValueLiteral(str(length)), ) ) if request_host: diff --git a/libpathod/pathoc.py b/libpathod/pathoc.py index 32707899..c926f15f 100644 --- a/libpathod/pathoc.py +++ b/libpathod/pathoc.py @@ -15,9 +15,15 @@ class Response: def __repr__(self): return "Response(%s - %s)"%(self.status_code, self.msg) +SSLVERSIONS = { + 1: tcp.TLSv1_METHOD, + 2: tcp.SSLv2_METHOD, + 3: tcp.SSLv3_METHOD, + 4: tcp.SSLv23_METHOD, +} class Pathoc(tcp.TCPClient): - def __init__(self, host, port, ssl=None, sni=None, clientcert=None): + def __init__(self, host, port, ssl=None, sni=None, sslversion=1, clientcert=None): tcp.TCPClient.__init__(self, host, port) self.settings = dict( staticdir = os.getcwd(), @@ -25,20 +31,21 @@ class Pathoc(tcp.TCPClient): ) self.ssl, self.sni = ssl, sni self.clientcert = clientcert + self.sslversion = SSLVERSIONS[sslversion] - def http_connect(self, connect_to, wfile, rfile): - wfile.write( + def http_connect(self, connect_to): + self.wfile.write( 'CONNECT %s:%s HTTP/1.1\r\n'%tuple(connect_to) + '\r\n' ) - wfile.flush() - l = rfile.readline() + self.wfile.flush() + l = self.rfile.readline() if not l: raise PathocError("Proxy CONNECT failed") parsed = http.parse_response_line(l) if not parsed[1] == 200: raise PathocError("Proxy CONNECT failed: %s - %s"%(parsed[1], parsed[2])) - headers = http.read_headers(rfile) + headers = http.read_headers(self.rfile) def connect(self, connect_to=None): """ @@ -47,10 +54,10 @@ class Pathoc(tcp.TCPClient): """ tcp.TCPClient.connect(self) if connect_to: - self.http_connect(connect_to, self.wfile, self.rfile) + self.http_connect(connect_to) if self.ssl: try: - self.convert_to_ssl(sni=self.sni, cert=self.clientcert) + self.convert_to_ssl(sni=self.sni, cert=self.clientcert, method=self.sslversion) except tcp.NetLibError, v: raise PathocError(str(v)) diff --git a/libpathod/pathod.py b/libpathod/pathod.py index 5b8627a3..39de1b7b 100644 --- a/libpathod/pathod.py +++ b/libpathod/pathod.py @@ -123,8 +123,8 @@ class PathodHandler(tcp.BaseHandler): ) try: - content = http.read_http_body_request( - self.rfile, self.wfile, headers, httpversion, None + content = http.read_http_body( + self.rfile, headers, None, True ) except http.HttpError, s: s = str(s) |