X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=wrw%2Fproto.py;h=a67fa19d1a89921f8778dc6501f0500cfad5d27d;hb=b6f62b898efdc272130d3dbdd6742c5b785e7c7d;hp=3dcf0d7a31d4c4ae8ab26c90a4db68c4df193427;hpb=d76b5228df5eb50b01f4b81e6a67b8fc80bf6437;p=wrw.git diff --git a/wrw/proto.py b/wrw/proto.py index 3dcf0d7..a67fa19 100644 --- a/wrw/proto.py +++ b/wrw/proto.py @@ -1,4 +1,4 @@ -import time, calendar +import time, calendar, collections, binascii, base64 statusinfo = { 400: ("Bad Request", "Invalid HTTP request."), @@ -105,7 +105,7 @@ def urlq(url): if isinstance(url, unicode): url = url.encode("utf-8") ret = "" - invalid = "&=#?/\"'" + invalid = ";&=#?/\"'" for c in url: if c in invalid or (ord(c) <= 32) or (ord(c) >= 128): ret += "%%%02X" % ord(c) @@ -194,3 +194,22 @@ def parurl(url, pars={}, **augment): return url + "?" + qs else: return url + +# Wrap these, since binascii is a bit funky. :P +def enhex(bs): + return base64.b16encode(bs) +def unhex(es): + return base64.b16decode(es) +def enb32(bs): + return base64.b32encode(bs) +def unb32(es): + if (len(es) % 8) != 0: + es += b"=" * (8 - (len(es) % 8)) + es = es.upper() # The whole point of Base32 is that it's case-insensitive :P + return base64.b32decode(es) +def enb64(bs): + return base64.b64encode(bs) +def unb64(es): + if (len(es) % 4) != 0: + es += b"=" * (4 - (len(es) % 4)) + return base64.b64decode(es)