aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/flow.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-07-21 21:06:55 +0200
committerMaximilian Hils <git@maximilianhils.com>2014-07-21 21:06:55 +0200
commit4b4a18a2e4d7cf3e8862192b68f5a2295da9acbe (patch)
tree0083b563b6bea92108acb0cb348f721558eb02ba /libmproxy/flow.py
parent562ac9e721c33b05e8889d4932dede794a9746a8 (diff)
downloadmitmproxy-4b4a18a2e4d7cf3e8862192b68f5a2295da9acbe.tar.gz
mitmproxy-4b4a18a2e4d7cf3e8862192b68f5a2295da9acbe.tar.bz2
mitmproxy-4b4a18a2e4d7cf3e8862192b68f5a2295da9acbe.zip
add --stream options, various fixes
Diffstat (limited to 'libmproxy/flow.py')
-rw-r--r--libmproxy/flow.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 55097756..6b751bc9 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -145,6 +145,17 @@ class SetHeaders:
f.request.headers.add(header, value)
+class StreamLargeBodies(object):
+ def __init__(self, max_size):
+ self.max_size = max_size
+
+ def run(self, flow, is_request):
+ r = flow.request if is_request else flow.response
+ code = flow.response.code if flow.response else None
+ expected_size = netlib.http.expected_http_body_size(r.headers, is_request, flow.request.method, code)
+ if not (0 <= expected_size <= self.max_size):
+ r.stream = True
+
class ClientPlaybackState:
def __init__(self, flows, exit):
self.flows, self.exit = flows, exit
@@ -437,6 +448,7 @@ class FlowMaster(controller.Master):
self.anticache = False
self.anticomp = False
+ self.stream_large_bodies = False
self.refresh_server_playback = False
self.replacehooks = ReplaceHooks()
self.setheaders = SetHeaders()
@@ -522,6 +534,12 @@ class FlowMaster(controller.Master):
self.stickycookie_state = None
self.stickycookie_txt = None
+ def set_stream_large_bodies(self, max_size):
+ if max_size is not None:
+ self.stream_large_bodies = StreamLargeBodies(max_size)
+ else:
+ self.stream_large_bodies = False
+
def set_stickyauth(self, txt):
if txt:
flt = filt.parse(txt)
@@ -708,6 +726,10 @@ class FlowMaster(controller.Master):
def handle_responseheaders(self, f):
self.run_script_hook("responseheaders", f)
+
+ if self.stream_large_bodies:
+ self.stream_large_bodies.run(f, False)
+
f.reply()
return f