Index: http.py =================================================================== --- http.py (revision 57) +++ http.py (working copy) @@ -4,6 +4,7 @@ import cStringIO import dpkt +import gzip def parse_headers(f): """Return dict of HTTP headers parsed from a file object.""" @@ -87,9 +92,6 @@ def pack_hdr(self): return ''.join([ '%s: %s\r\n' % t for t in self.headers.iteritems() ]) def __str__(self): return '%s\r\n%s' % (self.pack_hdr(), self.body) @@ -114,6 +116,7 @@ 'BASELINE-CONTROL' )) __proto = 'HTTP' + __len = -1 def unpack(self, buf): f = cStringIO.StringIO(buf) @@ -126,7 +129,13 @@ self.uri = l[1] self.version = l[2][len(self.__proto)+1:] Message.unpack(self, f.read()) + self.__len = f.tell() + def __len__(self): + if len == -1: + return len(str(self)) + return self.__len + def __str__(self): return '%s %s %s/%s\r\n' % (self.method, self.uri, self.__proto, self.version) + Message.__str__(self) @@ -139,7 +148,8 @@ 'reason':'OK' } __proto = 'HTTP' - + __len = 0 + def unpack(self, buf): f = cStringIO.StringIO(buf) line = f.readline() @@ -150,7 +160,13 @@ self.status = l[1] self.reason = l[2] Message.unpack(self, f.read()) + self.__len = f.tell() + def __len__(self): + if len == -1: + return len(str(self)) + return self.__len + def __str__(self): return '%s/%s %s %s\r\n' % (self.__proto, self.version, self.status, self.reason) + Message.__str__(self)