aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/proxy.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2012-06-19 09:58:50 +1200
committerAldo Cortesi <aldo@nullcube.com>2012-06-19 09:58:50 +1200
commit1b1ccab8b7f88c9e7e6f1d5ae8d6782bc9a1ac2e (patch)
tree6f707b885e6659c3162b485c0d25ae302a4cc668 /libmproxy/proxy.py
parent7b9756f48e7a7d2a97e7a5a6b0872c5550da56da (diff)
downloadmitmproxy-1b1ccab8b7f88c9e7e6f1d5ae8d6782bc9a1ac2e.tar.gz
mitmproxy-1b1ccab8b7f88c9e7e6f1d5ae8d6782bc9a1ac2e.tar.bz2
mitmproxy-1b1ccab8b7f88c9e7e6f1d5ae8d6782bc9a1ac2e.zip
Extract protocol and tcp server implementations into netlib.
Diffstat (limited to 'libmproxy/proxy.py')
-rw-r--r--libmproxy/proxy.py29
1 files changed, 15 insertions, 14 deletions
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py
index 58ab7a58..04734fcb 100644
--- a/libmproxy/proxy.py
+++ b/libmproxy/proxy.py
@@ -15,8 +15,9 @@
import sys, os, string, socket, time
import shutil, tempfile, threading
import optparse, SocketServer
-import utils, flow, certutils, version, wsgi, netlib, protocol
from OpenSSL import SSL
+from netlib import odict, tcp, protocol
+import utils, flow, certutils, version, wsgi
class ProxyError(Exception):
@@ -56,18 +57,18 @@ class RequestReplayThread(threading.Thread):
except (ProxyError, protocol.ProtocolError), v:
err = flow.Error(self.flow.request, v.msg)
err._send(self.masterq)
- except netlib.NetLibError, v:
+ except tcp.NetLibError, v:
raise ProxyError(502, v)
-class ServerConnection(netlib.TCPClient):
+class ServerConnection(tcp.TCPClient):
def __init__(self, config, scheme, host, port):
clientcert = None
if config.clientcerts:
path = os.path.join(config.clientcerts, self.host) + ".pem"
if os.path.exists(clientcert):
clientcert = path
- netlib.TCPClient.__init__(
+ tcp.TCPClient.__init__(
self,
True if scheme == "https" else False,
host,
@@ -107,7 +108,7 @@ class ServerConnection(netlib.TCPClient):
code = int(code)
except ValueError:
raise ProxyError(502, "Invalid server response: %s."%line)
- headers = flow.ODictCaseless(protocol.read_headers(self.rfile))
+ headers = odict.ODictCaseless(protocol.read_headers(self.rfile))
if code >= 100 and code <= 199:
return self.read_response()
if request.method == "HEAD" or code == 204 or code == 304:
@@ -125,13 +126,13 @@ class ServerConnection(netlib.TCPClient):
pass
-class ProxyHandler(netlib.BaseHandler):
+class ProxyHandler(tcp.BaseHandler):
def __init__(self, config, connection, client_address, server, q):
self.mqueue = q
self.config = config
self.server_conn = None
self.proxy_connect_state = None
- netlib.BaseHandler.__init__(self, connection, client_address, server)
+ tcp.BaseHandler.__init__(self, connection, client_address, server)
def handle(self):
cc = flow.ClientConnect(self.client_address)
@@ -150,7 +151,7 @@ class ProxyHandler(netlib.BaseHandler):
if not self.server_conn:
try:
self.server_conn = ServerConnection(self.config, scheme, host, port)
- except netlib.NetLibError, v:
+ except tcp.NetLibError, v:
raise ProxyError(502, v)
def handle_request(self, cc):
@@ -243,7 +244,7 @@ class ProxyHandler(netlib.BaseHandler):
else:
scheme = "http"
method, path, httpversion = protocol.parse_init_http(line)
- headers = flow.ODictCaseless(protocol.read_headers(self.rfile))
+ headers = odict.ODictCaseless(protocol.read_headers(self.rfile))
content = protocol.read_http_body_request(
self.rfile, self.wfile, headers, httpversion, self.config.body_size_limit
)
@@ -251,7 +252,7 @@ class ProxyHandler(netlib.BaseHandler):
elif self.config.reverse_proxy:
scheme, host, port = self.config.reverse_proxy
method, path, httpversion = protocol.parse_init_http(line)
- headers = flow.ODictCaseless(protocol.read_headers(self.rfile))
+ headers = odict.ODictCaseless(protocol.read_headers(self.rfile))
content = protocol.read_http_body_request(
self.rfile, self.wfile, headers, httpversion, self.config.body_size_limit
)
@@ -278,14 +279,14 @@ class ProxyHandler(netlib.BaseHandler):
if self.proxy_connect_state:
host, port, httpversion = self.proxy_connect_state
method, path, httpversion = protocol.parse_init_http(line)
- headers = flow.ODictCaseless(protocol.read_headers(self.rfile))
+ headers = odict.ODictCaseless(protocol.read_headers(self.rfile))
content = protocol.read_http_body_request(
self.rfile, self.wfile, headers, httpversion, self.config.body_size_limit
)
return flow.Request(client_conn, httpversion, host, port, "https", method, path, headers, content)
else:
method, scheme, host, port, path, httpversion = protocol.parse_init_proxy(line)
- headers = flow.ODictCaseless(protocol.read_headers(self.rfile))
+ headers = odict.ODictCaseless(protocol.read_headers(self.rfile))
content = protocol.read_http_body_request(
self.rfile, self.wfile, headers, httpversion, self.config.body_size_limit
)
@@ -317,7 +318,7 @@ class ProxyHandler(netlib.BaseHandler):
class ProxyServerError(Exception): pass
-class ProxyServer(netlib.TCPServer):
+class ProxyServer(tcp.TCPServer):
allow_reuse_address = True
bound = True
def __init__(self, config, port, address=''):
@@ -326,7 +327,7 @@ class ProxyServer(netlib.TCPServer):
"""
self.config, self.port, self.address = config, port, address
try:
- netlib.TCPServer.__init__(self, (address, port))
+ tcp.TCPServer.__init__(self, (address, port))
except socket.error, v:
raise ProxyServerError('Error starting proxy server: ' + v.strerror)
self.masterq = None