URI: 
       tMake proxies work - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 8e54d5c4d49e2a5319311fffcb109b6360d6340d
   DIR parent d4d93b39285856209b4bd0e3500868e6b936f9a6
  HTML Author: Johann Bauer <bauerj@bauerj.eu>
       Date:   Sat, 25 Feb 2017 13:36:24 +0100
       
       Make proxies work
       
       Diffstat:
         M gui/qt/__init__.py                  |       2 +-
         M gui/qt/network_dialog.py            |       6 +++---
         M lib/network.py                      |      11 +++++++----
         M lib/paymentrequest.py               |       2 +-
       
       4 files changed, 12 insertions(+), 9 deletions(-)
       ---
   DIR diff --git a/gui/qt/__init__.py b/gui/qt/__init__.py
       t@@ -52,7 +52,7 @@ try:
        except Exception as e:
            print(e)
            print("Error: Could not find icons file.")
       -    print("Please run 'pyrcc4 icons.qrc -o gui/qt/icons_rc.py', and reinstall Electrum")
       +    print("Please run 'pyrcc4 icons.qrc -o gui/qt/icons_rc.py -py3', and reinstall Electrum")
            sys.exit(1)
        
        from .util import *   # * needed for plugins
   DIR diff --git a/gui/qt/network_dialog.py b/gui/qt/network_dialog.py
       t@@ -497,12 +497,12 @@ class TorDetector(QThread):
            @staticmethod
            def is_tor_port(port):
                try:
       -            s = socket._socketobject(socket.AF_INET, socket.SOCK_STREAM)
       +            s = (socket._socketobject if hasattr(socket, "_socketobject") else socket.socket)(socket.AF_INET, socket.SOCK_STREAM)
                    s.settimeout(0.1)
                    s.connect(("127.0.0.1", port))
                    # Tor responds uniquely to HTTP-like requests
       -            s.send("GET\n")
       -            if "Tor is not an HTTP Proxy" in s.recv(1024):
       +            s.send(b"GET\n")
       +            if b"Tor is not an HTTP Proxy" in s.recv(1024):
                        return True
                except socket.error:
                    pass
   DIR diff --git a/lib/network.py b/lib/network.py
       t@@ -40,7 +40,7 @@ import threading
        import socket
        import json
        
       -from . import socks
       +import socks
        from . import util
        from . import bitcoin
        from .bitcoin import *
       t@@ -443,13 +443,16 @@ class Network(util.DaemonThread):
                                          # socks.py seems to want either None or a non-empty string
                                          username=(proxy.get("user", "") or None),
                                          password=(proxy.get("password", "") or None))
       +            # Store these somewhere so we can un-monkey-patch
       +            if not hasattr(socket, "_socketobject"):
       +                socket._socketobject = socket.socket
       +                socket._getaddrinfo = socket.getaddrinfo
                    socket.socket = socks.socksocket
                    # prevent dns leaks, see http://stackoverflow.com/questions/13184205/dns-over-proxy
                    socket.getaddrinfo = lambda *args: [(socket.AF_INET, socket.SOCK_STREAM, 6, '', (args[0], args[1]))]
                else:
       -            if six.PY2:
       -                socket.socket = socket._socketobject
       -                socket.getaddrinfo = socket._socket.getaddrinfo
       +            socket.socket = socket._socketobject
       +            socket.getaddrinfo = socket._getaddrinfo
        
            def start_network(self, protocol, proxy):
                assert not self.interface and not self.interfaces
   DIR diff --git a/lib/paymentrequest.py b/lib/paymentrequest.py
       t@@ -42,7 +42,7 @@ from six.moves import urllib_parse
        
        
        try:
       -    from . import paymentrequest_pb2_py3 as pb2
       +    from . import paymentrequest_pb2 as pb2
        except ImportError:
            sys.exit("Error: could not find paymentrequest_pb2.py. Create it with 'protoc --proto_path=lib/ --python_out=lib/ lib/paymentrequest.proto'")