aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/flow.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/flow.py')
-rw-r--r--libmproxy/flow.py37
1 files changed, 21 insertions, 16 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 3d9ef722..5eac8da9 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -8,17 +8,18 @@ import Cookie
import cookielib
import os
import re
+import urlparse
+
-from netlib import odict, wsgi, tcp
+from netlib import odict, wsgi
from netlib.http.semantics import CONTENT_MISSING
import netlib.http
-
-from . import controller, protocol, tnetstring, filt, script, version
+from . import controller, tnetstring, filt, script, version
from .onboarding import app
-from .protocol import http, handle
from .proxy.config import HostMatcher
-from .proxy.connection import ClientConnection, ServerConnection
-import urlparse
+from .protocol.http_replay import RequestReplayThread
+from .protocol import Kill
+from .models import ClientConnection, ServerConnection, HTTPResponse, HTTPFlow, HTTPRequest
class AppRegistry:
@@ -788,7 +789,7 @@ class FlowMaster(controller.Master):
rflow = self.server_playback.next_flow(flow)
if not rflow:
return None
- response = http.HTTPResponse.from_state(rflow.response.get_state())
+ response = HTTPResponse.from_state(rflow.response.get_state())
response.is_replay = True
if self.refresh_server_playback:
response.refresh()
@@ -834,10 +835,10 @@ class FlowMaster(controller.Master):
sni=host,
ssl_established=True
))
- f = http.HTTPFlow(c, s)
+ f = HTTPFlow(c, s)
headers = odict.ODictCaseless()
- req = http.HTTPRequest(
+ req = HTTPRequest(
"absolute",
method,
scheme,
@@ -859,9 +860,9 @@ class FlowMaster(controller.Master):
"""
if self.server and self.server.config.mode == "reverse":
- f.request.host, f.request.port = self.server.config.mode.dst[2:]
- f.request.scheme = "https" if self.server.config.mode.dst[
- 1] else "http"
+ f.request.host = self.server.config.upstream_server.address.host
+ f.request.port = self.server.config.upstream_server.address.port
+ f.request.scheme = re.sub("^https?2", "", self.server.config.upstream_server.scheme)
f.reply = controller.DummyReply()
if f.request:
@@ -934,7 +935,7 @@ class FlowMaster(controller.Master):
f.response = None
f.error = None
self.process_new_request(f)
- rt = http.RequestReplayThread(
+ rt = RequestReplayThread(
self.server.config,
f,
self.masterq if run_scripthooks else False,
@@ -960,6 +961,10 @@ class FlowMaster(controller.Master):
self.run_script_hook("serverconnect", sc)
sc.reply()
+ def handle_serverdisconnect(self, sc):
+ self.run_script_hook("serverdisconnect", sc)
+ sc.reply()
+
def handle_error(self, f):
self.state.update_flow(f)
self.run_script_hook("error", f)
@@ -979,7 +984,7 @@ class FlowMaster(controller.Master):
)
if err:
self.add_event("Error in wsgi app. %s" % err, "error")
- f.reply(protocol.KILL)
+ f.reply(Kill)
return
if f not in self.state.flows: # don't add again on replay
self.state.add_flow(f)
@@ -996,7 +1001,7 @@ class FlowMaster(controller.Master):
if self.stream_large_bodies:
self.stream_large_bodies.run(f, False)
except netlib.http.HttpError:
- f.reply(protocol.KILL)
+ f.reply(Kill)
return
f.reply()
@@ -1089,7 +1094,7 @@ class FlowReader:
"Incompatible serialized data version: %s" % v
)
off = self.fo.tell()
- yield handle.protocols[data["type"]]["flow"].from_state(data)
+ yield HTTPFlow.from_state(data)
except ValueError as v:
# Error is due to EOF
if self.fo.tell() == off and self.fo.read() == '':