From c47ddaa3a025597f8706c437f792c1ad12c388ab Mon Sep 17 00:00:00 2001 From: Brad Peabody Date: Thu, 17 Jul 2014 22:43:26 -0700 Subject: basic attempt to implement streaming response, needs testing --- libmproxy/flow.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'libmproxy/flow.py') diff --git a/libmproxy/flow.py b/libmproxy/flow.py index b6b49022..5b99427a 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -706,6 +706,13 @@ class FlowMaster(controller.Master): self.process_new_request(f) return f + def handle_responseheaders(self, r): + f = self.state.add_response(r) + if f: + self.run_script_hook("responseheaders", f) + r.reply() + return f + def handle_response(self, r): f = self.state.add_response(r) if f: -- cgit v1.2.3 From 7398db80db004546070139c0c7e79bba4f92b318 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sun, 20 Jul 2014 11:17:53 +0200 Subject: simplify responseheader scripthook --- libmproxy/flow.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'libmproxy/flow.py') diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 5b99427a..55097756 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -706,11 +706,9 @@ class FlowMaster(controller.Master): self.process_new_request(f) return f - def handle_responseheaders(self, r): - f = self.state.add_response(r) - if f: - self.run_script_hook("responseheaders", f) - r.reply() + def handle_responseheaders(self, f): + self.run_script_hook("responseheaders", f) + f.reply() return f def handle_response(self, r): -- cgit v1.2.3 From 4b4a18a2e4d7cf3e8862192b68f5a2295da9acbe Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Mon, 21 Jul 2014 21:06:55 +0200 Subject: add --stream options, various fixes --- libmproxy/flow.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'libmproxy/flow.py') 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 -- cgit v1.2.3 From 4382829b7d9fde4358e12f7c9f195c7d7c854ff1 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Fri, 25 Jul 2014 18:47:48 +0200 Subject: workaround: always make sure that flow.response.reply exists --- libmproxy/flow.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libmproxy/flow.py') diff --git a/libmproxy/flow.py b/libmproxy/flow.py index 6b751bc9..fce4cd91 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -724,13 +724,14 @@ class FlowMaster(controller.Master): self.process_new_request(f) return f - def handle_responseheaders(self, 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) - f.reply() + resp.reply() return f def handle_response(self, r): -- cgit v1.2.3