diff options
author | Maximilian Hils <git@maximilianhils.com> | 2014-07-31 22:29:13 +0200 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2014-07-31 22:29:13 +0200 |
commit | e9401a2123f416f8dd4c24bb4bbc74f297369133 (patch) | |
tree | afebf68d1091d487ef64083962992ea7b703a80e /libmproxy/flow.py | |
parent | f5fb1138fdda77ec4a3bb5493479d2f56cdb0851 (diff) | |
parent | 3e3dbee936bb71e813d50937118eebff4ba23617 (diff) | |
download | mitmproxy-e9401a2123f416f8dd4c24bb4bbc74f297369133.tar.gz mitmproxy-e9401a2123f416f8dd4c24bb4bbc74f297369133.tar.bz2 mitmproxy-e9401a2123f416f8dd4c24bb4bbc74f297369133.zip |
Merge branch 'stream'
Conflicts:
libmproxy/protocol/http.py
Diffstat (limited to 'libmproxy/flow.py')
-rw-r--r-- | libmproxy/flow.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 8ea51ce6..d4aa1805 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) @@ -701,6 +719,16 @@ class FlowMaster(controller.Master): self.process_new_request(f) return f + def handle_responseheaders(self, resp): + f = resp.flow + self.run_script_hook("responseheaders", f) + + if self.stream_large_bodies: + self.stream_large_bodies.run(f, False) + + resp.reply() + return f + def handle_response(self, r): f = self.state.add_response(r) if f: |