diff options
| author | Thomas Kriechbaumer <thomas@kriechbaumer.name> | 2015-05-27 17:53:45 +0200 | 
|---|---|---|
| committer | Thomas Kriechbaumer <thomas@kriechbaumer.name> | 2015-05-29 15:31:22 +0200 | 
| commit | d50b9be0d5dab1772f0edcbfa89542ef9425e7bf (patch) | |
| tree | a8ed9c9f1bce5a76f9ee124f004127ebe2879cf5 /netlib/h2 | |
| parent | 4c469fdee1b5b01a7e847a75fbbd902dc3bfbd70 (diff) | |
| download | mitmproxy-d50b9be0d5dab1772f0edcbfa89542ef9425e7bf.tar.gz mitmproxy-d50b9be0d5dab1772f0edcbfa89542ef9425e7bf.tar.bz2 mitmproxy-d50b9be0d5dab1772f0edcbfa89542ef9425e7bf.zip  | |
add generic frame parsing method
Diffstat (limited to 'netlib/h2')
| -rw-r--r-- | netlib/h2/frame.py | 17 | 
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]  | 
