aboutsummaryrefslogtreecommitdiffstats
path: root/netlib
diff options
context:
space:
mode:
authorThomas Kriechbaumer <thomas@kriechbaumer.name>2015-05-27 17:53:45 +0200
committerThomas Kriechbaumer <thomas@kriechbaumer.name>2015-05-29 15:31:22 +0200
commitd50b9be0d5dab1772f0edcbfa89542ef9425e7bf (patch)
treea8ed9c9f1bce5a76f9ee124f004127ebe2879cf5 /netlib
parent4c469fdee1b5b01a7e847a75fbbd902dc3bfbd70 (diff)
downloadmitmproxy-d50b9be0d5dab1772f0edcbfa89542ef9425e7bf.tar.gz
mitmproxy-d50b9be0d5dab1772f0edcbfa89542ef9425e7bf.tar.bz2
mitmproxy-d50b9be0d5dab1772f0edcbfa89542ef9425e7bf.zip
add generic frame parsing method
Diffstat (limited to 'netlib')
-rw-r--r--netlib/h2/frame.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/netlib/h2/frame.py b/netlib/h2/frame.py
index 179634b0..11687316 100644
--- a/netlib/h2/frame.py
+++ b/netlib/h2/frame.py
@@ -32,6 +32,23 @@ class Frame(object):
self.stream_id = stream_id
@classmethod
+ def from_file(self, fp):
+ """
+ read a HTTP/2 frame sent by a server or client
+ fp is a "file like" object that could be backed by a network
+ stream or a disk or an in memory stream reader
+ """
+ raw_header = fp.safe_read(9)
+
+ fields = struct.unpack("!HBBBL", raw_header)
+ length = (fields[0] << 8) + fields[1]
+ flags = fields[3]
+ stream_id = fields[4]
+
+ payload = fp.safe_read(length)
+ return FRAMES[fields[2]].from_bytes(length, flags, stream_id, payload)
+
+ @classmethod
def from_bytes(self, data):
fields = struct.unpack("!HBBBL", data[:9])
length = (fields[0] << 8) + fields[1]