Merge branch 'dev'
This commit is contained in:
commit
d97e351b88
4 changed files with 39 additions and 10 deletions
4
CHANGES
4
CHANGES
|
@ -1,3 +1,7 @@
|
|||
2.0.9 2014-07-06
|
||||
- Fix EWOULDBLOCK on Windows
|
||||
- Fix Unicode config problem on some platforms
|
||||
|
||||
2.0.8 2014-06-23
|
||||
- Use multiple DNS to query hostnames
|
||||
|
||||
|
|
11
README.rst
11
README.rst
|
@ -143,13 +143,10 @@ MIT
|
|||
Bugs and Issues
|
||||
---------------
|
||||
|
||||
Please visit `Issue
|
||||
Tracker <https://github.com/clowwindy/shadowsocks/issues?state=open>`__
|
||||
|
||||
Mailing list: http://groups.google.com/group/shadowsocks
|
||||
|
||||
Also see
|
||||
`Troubleshooting <https://github.com/clowwindy/shadowsocks/wiki/Troubleshooting>`__
|
||||
- `Troubleshooting <https://github.com/clowwindy/shadowsocks/wiki/Troubleshooting>`__
|
||||
- `Issue
|
||||
Tracker <https://github.com/clowwindy/shadowsocks/issues?state=open>`__
|
||||
- `Mailing list <http://groups.google.com/group/shadowsocks>`__
|
||||
|
||||
.. |PyPI version| image:: https://img.shields.io/pypi/v/shadowsocks.svg?style=flat
|
||||
:target: https://pypi.python.org/pypi/shadowsocks
|
||||
|
|
2
setup.py
2
setup.py
|
@ -6,7 +6,7 @@ with open('README.rst') as f:
|
|||
|
||||
setup(
|
||||
name="shadowsocks",
|
||||
version="2.0.8",
|
||||
version="2.0.9",
|
||||
license='MIT',
|
||||
description="A fast tunnel proxy that help you get through firewalls",
|
||||
author='clowwindy',
|
||||
|
|
|
@ -100,7 +100,7 @@ def get_config(is_local):
|
|||
logging.info('loading config from %s' % config_path)
|
||||
with open(config_path, 'rb') as f:
|
||||
try:
|
||||
config = json.load(f)
|
||||
config = json.load(f, object_hook=_decode_dict)
|
||||
except ValueError as e:
|
||||
logging.error('found an error in config.json: %s',
|
||||
e.message)
|
||||
|
@ -210,4 +210,32 @@ optional arguments:
|
|||
-v verbose mode
|
||||
|
||||
Online help: <https://github.com/clowwindy/shadowsocks>
|
||||
'''
|
||||
'''
|
||||
|
||||
|
||||
def _decode_list(data):
|
||||
rv = []
|
||||
for item in data:
|
||||
if isinstance(item, unicode):
|
||||
item = item.encode('utf-8')
|
||||
elif isinstance(item, list):
|
||||
item = _decode_list(item)
|
||||
elif isinstance(item, dict):
|
||||
item = _decode_dict(item)
|
||||
rv.append(item)
|
||||
return rv
|
||||
|
||||
|
||||
def _decode_dict(data):
|
||||
rv = {}
|
||||
for key, value in data.iteritems():
|
||||
if isinstance(key, unicode):
|
||||
key = key.encode('utf-8')
|
||||
if isinstance(value, unicode):
|
||||
value = value.encode('utf-8')
|
||||
elif isinstance(value, list):
|
||||
value = _decode_list(value)
|
||||
elif isinstance(value, dict):
|
||||
value = _decode_dict(value)
|
||||
rv[key] = value
|
||||
return rv
|
Loading…
Reference in a new issue