Added proxy options to network dialog

This commit is contained in:
bkkcoins 2012-09-19 22:29:58 +07:00
parent 1af17baafb
commit 83bb644135
4 changed files with 26 additions and 7 deletions

View File

@ -1380,6 +1380,22 @@ class ElectrumWindow(QMainWindow):
hbox.addWidget(radio2)
vbox.addLayout(hbox)
hbox = QHBoxLayout()
proxy_mode = QComboBox()
proxy_host = QLineEdit()
proxy_port = QLineEdit()
proxy_mode.addItems(['NONE', 'SOCKS4', 'SOCKS5', 'HTTP'])
proxy_mode.setCurrentIndex(proxy_mode.findText(str(interface.proxy["mode"]).upper()))
proxy_host.setText(interface.proxy["host"])
proxy_port.setText(interface.proxy["port"])
hbox.addWidget(QLabel(_('Proxy') + ':'))
hbox.addWidget(proxy_mode)
hbox.addWidget(proxy_host)
hbox.addWidget(proxy_port)
vbox.addLayout(hbox)
hbox = QHBoxLayout()
if wallet.interface.servers:
label = _('Active Servers')
@ -1413,7 +1429,8 @@ class ElectrumWindow(QMainWindow):
server = unicode( host_line.text() )
try:
wallet.set_server(server)
proxy = { u'mode':unicode(proxy_mode.currentText()).lower(), u'host':unicode(proxy_host.text()), u'port':unicode(proxy_port.text()) }
wallet.set_server(server, proxy)
except:
QMessageBox.information(None, _('Error'), 'error', _('OK'))
if parent == None:

View File

@ -29,7 +29,7 @@ DEFAULT_SERVERS = [ 'ecdsa.org:50001:t',
'uncle-enzo.info:50001:t',
'electrum.bytesized-hosting.com:50001:t'] # list of default servers
proxy_modes = ['off', 'socks4', 'socks5', 'http' ]
proxy_modes = ['none', 'socks4', 'socks5', 'http' ]
def replace_keys(obj, old_key, new_key):
if isinstance(obj, dict):
@ -192,7 +192,7 @@ class HttpStratumInterface(PollingInterface):
def send(self, messages):
import urllib2, json, time, cookielib
if self.proxy["mode"] != "off":
if self.proxy["mode"] != "none":
import socks
socks.setdefaultproxy(proxy_modes.index(self.proxy["mode"]), self.proxy["host"], int(self.proxy["port"]) )
socks.wrapmodule(urllib2)
@ -260,7 +260,7 @@ class TcpStratumInterface(Interface):
def init_socket(self):
global proxy_modes
if self.proxy["mode"] == "off":
if self.proxy["mode"] == "none":
self.s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
else:
import socks
@ -460,6 +460,7 @@ class WalletSynchronizer(threading.Thread):
if self.loop:
time.sleep(5)
# Server has been changed. Copy callback for new interface.
self.proxy = self.interface.proxy
self.init_interface()
self.start_interface()
continue

View File

@ -3,7 +3,7 @@ import os
from util import user_dir
class SimpleConfig:
default_options = {"gui": "lite", "proxy": { "mode": "off", "host":"localhost", "port":"8080" } }
default_options = {"gui": "lite", "proxy": { "mode": "none", "host":"localhost", "port":"8080" } }
def set_key(self, key, value, save = True):
self.config[key] = value

View File

@ -347,15 +347,16 @@ class Wallet:
def is_up_to_date(self):
return self.interface.responses.empty() and not self.interface.unanswered_requests
def set_server(self, server):
def set_server(self, server, proxy):
# raise an error if the format isnt correct
a,b,c = server.split(':')
b = int(b)
assert c in ['t', 'h', 'n']
# set the server
if server != self.server:
if server != self.server or proxy != self.interface.proxy:
self.server = server
self.save()
self.interface.proxy = proxy
self.interface.is_connected = False # this exits the polling loop
self.interface.poke()