aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmproxy/console/common.py10
-rw-r--r--libmproxy/flow.py2
-rw-r--r--libmproxy/proxy.py7
-rw-r--r--libmproxy/utils.py2
-rw-r--r--test/test_utils.py2
5 files changed, 17 insertions, 6 deletions
diff --git a/libmproxy/console/common.py b/libmproxy/console/common.py
index 187a755f..006303a7 100644
--- a/libmproxy/console/common.py
+++ b/libmproxy/console/common.py
@@ -144,6 +144,8 @@ def raw_format_flow(f, focus, extended, padding):
if f["resp_ctype"]:
resp.append(fcol(f["resp_ctype"], rc))
resp.append(fcol(f["resp_clen"], rc))
+ resp.append(fcol(f["resp_rate"], rc))
+
elif f["err_msg"]:
resp.append(fcol(SYMBOL_RETURN, "error"))
resp.append(
@@ -185,11 +187,17 @@ def format_flow(f, focus, extended=False, hostheader=False, padding=2):
contentdesc = "[content missing]"
else:
contentdesc = "[no content]"
+
+ delta = f.response.timestamp_end - f.response.timestamp_start
+ size = len(f.response.content) + f.response.get_header_size()
+ rate = utils.pretty_size(size / delta)
+
d.update(dict(
resp_code = f.response.code,
resp_is_replay = f.response.is_replay(),
resp_acked = f.response.reply.acked,
- resp_clen = contentdesc
+ resp_clen = contentdesc,
+ resp_rate = "{0}/s".format(rate),
))
t = f.response.headers["content-type"]
if t:
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 84836d11..24042812 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -618,7 +618,7 @@ class Response(HTTPMsg):
self.headers, self.content = headers, content
self.cert = cert
self.timestamp_start = timestamp_start or utils.timestamp()
- self.timestamp_end = max(timestamp_end or utils.timestamp(), timestamp_start)
+ self.timestamp_end = timestamp_end or utils.timestamp()
self.replay = False
def _refresh_cookie(self, c, delta):
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py
index b0c15463..75a54192 100644
--- a/libmproxy/proxy.py
+++ b/libmproxy/proxy.py
@@ -88,11 +88,13 @@ class RequestReplayThread(threading.Thread):
server = ServerConnection(self.config, r.scheme, r.host, r.port, r.host)
server.connect()
server.send(r)
+ tsstart = utils.timestamp()
httpversion, code, msg, headers, content = http.read_response(
server.rfile, r.method, self.config.body_size_limit
)
response = flow.Response(
- self.flow.request, httpversion, code, msg, headers, content, server.cert
+ self.flow.request, httpversion, code, msg, headers, content, server.cert,
+ server.rfile.first_byte_timestamp
)
self.channel.ask(response)
except (ProxyError, http.HttpError, tcp.NetLibError), v:
@@ -224,6 +226,7 @@ class ProxyHandler(tcp.BaseHandler):
request.ssl_setup_timestamp = sc.ssl_setup_timestamp
sc.rfile.reset_timestamps()
try:
+ tsstart = utils.timestamp()
httpversion, code, msg, headers, content = http.read_response(
sc.rfile,
request.method,
@@ -242,7 +245,7 @@ class ProxyHandler(tcp.BaseHandler):
response = flow.Response(
request, httpversion, code, msg, headers, content, sc.cert,
- sc.rfile.first_byte_timestamp, utils.timestamp()
+ sc.rfile.first_byte_timestamp
)
response_reply = self.channel.ask(response)
# Not replying to the server invalidates the server
diff --git a/libmproxy/utils.py b/libmproxy/utils.py
index 258626db..961c6618 100644
--- a/libmproxy/utils.py
+++ b/libmproxy/utils.py
@@ -74,7 +74,7 @@ def pretty_size(size):
suffixes = [
("B", 2**10),
("kB", 2**20),
- ("M", 2**30),
+ ("MB", 2**30),
]
for suf, lim in suffixes:
if size >= lim:
diff --git a/test/test_utils.py b/test/test_utils.py
index db6feb4d..f40e0a31 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -38,7 +38,7 @@ def test_pretty_size():
assert utils.pretty_size(100) == "100B"
assert utils.pretty_size(1024) == "1kB"
assert utils.pretty_size(1024 + (1024/2.0)) == "1.5kB"
- assert utils.pretty_size(1024*1024) == "1M"
+ assert utils.pretty_size(1024*1024) == "1MB"
def test_pkg_data():