X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;ds=sidebyside;f=hippotat;h=6aa3121c7ad68a72367930015817a9d91955e460;hb=e13eca8e1facf849a7825b815adc72ef142b7ca8;hp=97d40a781c11866869c328fa21526fe472a58413;hpb=b3e598b5ea54399982e0183a3e59835b0f82f077;p=hippotat.git diff --git a/hippotat b/hippotat index 97d40a7..6aa3121 100755 --- a/hippotat +++ b/hippotat @@ -26,6 +26,7 @@ from hippotatlib import * import twisted.web import twisted.web.client +import urllib.parse import io @@ -245,6 +246,17 @@ class Client(): clients = [ ] +def encode_url(urlstr): + # Oh, this is a disaster. We're given a URL as a `str', but the underlying + # machinery insists on having `bytes'. Assume we've been given a sensible + # URL, with escaping in all of the necessary places, except that it may + # contain non-ASCII characters: then encode as UTF-8 and squash the top- + # bit-set bytes down to percent escapes. + # + # This conses like it's going out of fashion, but it gets the job done. + return b''.join(bytes([b]) if b < 128 else '%%%02X' % b + for b in urlstr.encode('utf-8')) + def process_cfg(_opts, putative_servers, putative_clients): global clients @@ -269,7 +281,7 @@ def process_cfg(_opts, putative_servers, putative_clients): try: c.ifname = srch(cfg_get_raw, 'ifname_client') except NoOptionError: pass - try: c.url = srch(cfg.get,'url') + try: c.url = encode_url(srch(cfg.get,'url')) except NoOptionError: cfg_process_saddrs(c, ss) c.url = c.saddrs[0].url()