aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/libmproxy/flow_format_compat.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/libmproxy/flow_format_compat.py')
-rw-r--r--mitmproxy/libmproxy/flow_format_compat.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/mitmproxy/libmproxy/flow_format_compat.py b/mitmproxy/libmproxy/flow_format_compat.py
new file mode 100644
index 00000000..a7a95af3
--- /dev/null
+++ b/mitmproxy/libmproxy/flow_format_compat.py
@@ -0,0 +1,60 @@
+"""
+This module handles the import of mitmproxy flows generated by old versions.
+"""
+from __future__ import absolute_import, print_function, division
+from . import version
+
+
+def convert_013_014(data):
+ data["request"]["first_line_format"] = data["request"].pop("form_in")
+ data["request"]["http_version"] = "HTTP/" + ".".join(str(x) for x in data["request"].pop("httpversion"))
+ data["response"]["status_code"] = data["response"].pop("code")
+ data["response"]["body"] = data["response"].pop("content")
+ data["server_conn"].pop("state")
+ data["server_conn"]["via"] = None
+ data["version"] = (0, 14)
+ return data
+
+
+def convert_014_015(data):
+ data["version"] = (0, 15)
+ return data
+
+
+def convert_015_016(data):
+ for m in ("request", "response"):
+ if "body" in data[m]:
+ data[m]["content"] = data[m].pop("body")
+ if "httpversion" in data[m]:
+ data[m]["http_version"] = data[m].pop("httpversion")
+ if "msg" in data["response"]:
+ data["response"]["reason"] = data["response"].pop("msg")
+ data["request"].pop("form_out", None)
+ data["version"] = (0, 16)
+ return data
+
+
+def convert_016_017(data):
+ data["version"] = (0, 17)
+ return data
+
+
+converters = {
+ (0, 13): convert_013_014,
+ (0, 14): convert_014_015,
+ (0, 15): convert_015_016,
+ (0, 16): convert_016_017,
+}
+
+
+def migrate_flow(flow_data):
+ while True:
+ flow_version = tuple(flow_data["version"][:2])
+ if flow_version == version.IVERSION[:2]:
+ break
+ elif flow_version in converters:
+ flow_data = converters[flow_version](flow_data)
+ else:
+ v = ".".join(str(i) for i in flow_data["version"])
+ raise ValueError("Incompatible serialized data version: {}".format(v))
+ return flow_data