From ecd46459886da3a851a6e0c4ef11ab5939673a40 Mon Sep 17 00:00:00 2001 From: Stephen Altamirano Date: Sun, 17 Jul 2011 20:16:47 -0700 Subject: Adds encode counterparts to decode functions --- libmproxy/encoding.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'libmproxy/encoding.py') diff --git a/libmproxy/encoding.py b/libmproxy/encoding.py index b56c03a6..aab4141b 100644 --- a/libmproxy/encoding.py +++ b/libmproxy/encoding.py @@ -10,13 +10,21 @@ ENCODINGS = set(["identity", "gzip", "deflate"]) def decode(encoding, content): encoding_map = { - "identity": decode_identity, + "identity": identity, "gzip": decode_gzip, "deflate": decode_deflate, } - return encoding_map.get(encoding, decode_identity)(content) + return encoding_map.get(encoding, identity)(content) -def decode_identity(content): +def encode(encoding, content): + encoding_map = { + "identity": identity, + "gzip": encode_gzip, + "deflate": encode_deflate, + } + return encoding_map.get(encoding, identity)(content) + +def identity(content): """ Returns content unchanged. Identity is the default value of Accept-Encoding headers. @@ -30,9 +38,16 @@ def decode_gzip(content): except IOError: return None +def encode_gzip(content): + s = cStringIO.StringIO() + gf = gzip.GzipFile(fileobj=s, mode='wb') + gf.write(content) + gf.close() + return s.getvalue() + def decode_deflate(content): """ - Returns decompress data for DEFLATE. Some servers may respond with + Returns decompressed data for DEFLATE. Some servers may respond with compressed data without a zlib header or checksum. An undocumented feature of zlib permits the lenient decompression of data missing both values. @@ -46,3 +61,9 @@ def decode_deflate(content): return zlib.decompress(content, -15) except zlib.error: return None + +def encode_deflate(content): + """ + Returns compressed content, always including zlib header and checksum. + """ + return zlib.compress(content) -- cgit v1.2.3