separate protocols and port numbers

This commit is contained in:
ThomasV 2012-03-29 19:11:05 +02:00
parent f0e57e036b
commit 46733d9b0f
4 changed files with 36 additions and 16 deletions

View File

@ -841,11 +841,13 @@ class ElectrumWindow(QMainWindow):
status = "Not connected" status = "Not connected"
host = wallet.host host = wallet.host
port = wallet.port port = wallet.port
protocol = wallet.protocol
else: else:
import random import random
status = "Please choose a server." status = "Please choose a server."
host = random.choice( interface.servers ) host = random.choice( interface.servers )
port = wallet.port port = wallet.port
protocol = 's'
d = QDialog(parent) d = QDialog(parent)
d.setModal(1) d.setModal(1)
@ -865,7 +867,7 @@ class ElectrumWindow(QMainWindow):
hbox = QHBoxLayout() hbox = QHBoxLayout()
host_line = QLineEdit() host_line = QLineEdit()
host_line.setText("%s:%d"% (host,port) ) host_line.setText("%s:%d:%s"% (host,port,protocol) )
hbox.addWidget(QLabel('Connect to:')) hbox.addWidget(QLabel('Connect to:'))
hbox.addWidget(host_line) hbox.addWidget(host_line)
vbox.addLayout(hbox) vbox.addLayout(hbox)
@ -875,8 +877,8 @@ class ElectrumWindow(QMainWindow):
servers_list.setHeaderLabels( [ 'Active servers'] ) servers_list.setHeaderLabels( [ 'Active servers'] )
servers_list.setMaximumHeight(150) servers_list.setMaximumHeight(150)
for item in wallet.interface.servers: for item in wallet.interface.servers:
servers_list.addTopLevelItem(QTreeWidgetItem( [ item ] )) servers_list.addTopLevelItem(QTreeWidgetItem( [ item[1] + ':' + item[0] ] ))
servers_list.connect(servers_list, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), lambda x:host_line.setText( x.text(0) + ':%d'%wallet.port )) servers_list.connect(servers_list, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), lambda x:host_line.setText( x.text(0) ))
vbox.addWidget(servers_list) vbox.addWidget(servers_list)
else: else:
hbox = QHBoxLayout() hbox = QHBoxLayout()
@ -893,11 +895,12 @@ class ElectrumWindow(QMainWindow):
try: try:
if ':' in hh: if ':' in hh:
host, port = hh.split(':') host, port, protocol = hh.split(':')
port = int(port) port = int(port)
else: else:
host = hh host = hh
port = wallet.port port = wallet.port
protocol = wallet.protocol
except: except:
QMessageBox.information(None, 'Error', 'error', 'OK') QMessageBox.information(None, 'Error', 'error', 'OK')
if parent == None: if parent == None:
@ -905,7 +908,7 @@ class ElectrumWindow(QMainWindow):
else: else:
return return
wallet.set_server(host, port) wallet.set_server(host, port, protocol)
return True return True

View File

@ -111,7 +111,7 @@ class Interface:
def start_session(self, addresses, version): def start_session(self, addresses, version):
#print "Starting new session: %s:%d"%(self.host,self.port) #print "Starting new session: %s:%d"%(self.host,self.port)
self.start() self.start()
self.send([('client.version', [version]), ('server.banner',[]), ('blockchain.numblocks.subscribe',[]), ('server.peers.subscribe',[])]) self.send([('server.version', [version]), ('server.banner',[]), ('blockchain.numblocks.subscribe',[]), ('server.peers.subscribe',[])])
self.subscribe(addresses) self.subscribe(addresses)

View File

@ -1,2 +1,2 @@
ELECTRUM_VERSION = "0.42" ELECTRUM_VERSION = "0.43"
SEED_VERSION = 4 # bump this everytime the seed generation is modified SEED_VERSION = 4 # bump this everytime the seed generation is modified

View File

@ -263,6 +263,7 @@ class Wallet:
self.host = random.choice( DEFAULT_SERVERS ) # random choice when the wallet is created self.host = random.choice( DEFAULT_SERVERS ) # random choice when the wallet is created
self.port = DEFAULT_PORT self.port = DEFAULT_PORT
self.protocol = 'n'
# not saved # not saved
self.tx_history = {} self.tx_history = {}
@ -280,10 +281,11 @@ class Wallet:
self.tx_event = threading.Event() self.tx_event = threading.Event()
def set_server(self, host, port): def set_server(self, host, port, protocol):
if host!= self.host or port!=self.port: if host!= self.host or port!=self.port or protocol!=self.protocol:
self.host = host self.host = host
self.port = port self.port = port
self.protocol = protocol
self.interface.is_connected = False # this exits the polling loop self.interface.is_connected = False # this exits the polling loop
def set_path(self, wallet_path): def set_path(self, wallet_path):
@ -530,6 +532,7 @@ class Wallet:
'fee':self.fee, 'fee':self.fee,
'host':self.host, 'host':self.host,
'port':self.port, 'port':self.port,
'protocol':self.protocol,
'seed':self.seed, 'seed':self.seed,
'addresses':self.addresses, 'addresses':self.addresses,
'change_addresses':self.change_addresses, 'change_addresses':self.change_addresses,
@ -565,6 +568,7 @@ class Wallet:
self.fee = int( d.get('fee') ) self.fee = int( d.get('fee') )
self.seed = d.get('seed') self.seed = d.get('seed')
self.host = d.get('host') self.host = d.get('host')
self.protocol = d.get('protocol','n')
self.port = d.get('port') self.port = d.get('port')
blocks = d.get('blocks') blocks = d.get('blocks')
self.addresses = d.get('addresses') self.addresses = d.get('addresses')
@ -588,7 +592,7 @@ class Wallet:
if self.remote_url: assert self.master_public_key.encode('hex') == self.get_remote_mpk() if self.remote_url: assert self.master_public_key.encode('hex') == self.get_remote_mpk()
self.file_exists = True self.file_exists = True
#self.interface = interface.start_interface(self)
@ -936,7 +940,20 @@ class Wallet:
self.receive_status_callback(addr, status) self.receive_status_callback(addr, status)
elif method == 'server.peers.subscribe': elif method == 'server.peers.subscribe':
self.interface.servers = map( lambda x:x[1], result ) servers = []
for item in result:
s = []
host = item[1]
if len(item)>2:
for v in item[2]:
if re.match("[nsh]\d+",v):
s.append((v[0],host+":"+v[1:]))
if not s:
s.append(("n",host+":50000"))
else:
s.append(("n",host+":50000"))
servers = servers + s
self.interface.servers = servers
elif method == 'blockchain.address.subscribe': elif method == 'blockchain.address.subscribe':
addr = params[-1] addr = params[-1]
@ -954,7 +971,7 @@ class Wallet:
elif method == 'blockchain.numblocks.subscribe': elif method == 'blockchain.numblocks.subscribe':
self.blocks = result self.blocks = result
elif method == 'client.version': elif method == 'server.version':
pass pass
else: else:
@ -980,14 +997,14 @@ class Wallet:
self.handle_response(response) self.handle_response(response)
def start_interface(self): def start_interface(self):
if self.port == 50000: if self.protocol == 'n':
InterfaceClass = NativeInterface InterfaceClass = NativeInterface
elif self.port == 50001: elif self.protocol == 's':
InterfaceClass = AsynchronousInterface InterfaceClass = AsynchronousInterface
elif self.port in [80, 81, 8080, 8081]: elif self.protocol == 'h':
InterfaceClass = HttpInterface InterfaceClass = HttpInterface
else: else:
print "unknown port number: %d. using native protocol."%self.port print "unknown protocol"
InterfaceClass = NativeInterface InterfaceClass = NativeInterface
self.interface = InterfaceClass(self.host, self.port) self.interface = InterfaceClass(self.host, self.port)