|
@ -1,4 +1,4 @@ |
|
|
import select, time, electrum, Queue |
|
|
import select, time, electrum, queue |
|
|
from electrum import Connection, Interface, SimpleConfig |
|
|
from electrum import Connection, Interface, SimpleConfig |
|
|
from electrum.network import filter_protocol, parse_servers |
|
|
from electrum.network import filter_protocol, parse_servers |
|
|
from collections import defaultdict |
|
|
from collections import defaultdict |
|
@ -8,7 +8,7 @@ def get_interfaces(servers, timeout=10): |
|
|
'''Returns a map of servers to connected interfaces. If any |
|
|
'''Returns a map of servers to connected interfaces. If any |
|
|
connections fail or timeout, they will be missing from the map. |
|
|
connections fail or timeout, they will be missing from the map. |
|
|
''' |
|
|
''' |
|
|
socket_queue = Queue.Queue() |
|
|
socket_queue = queue.Queue() |
|
|
config = SimpleConfig() |
|
|
config = SimpleConfig() |
|
|
connecting = {} |
|
|
connecting = {} |
|
|
for server in servers: |
|
|
for server in servers: |
|
@ -20,7 +20,7 @@ def get_interfaces(servers, timeout=10): |
|
|
while time.time() < timeout and count < len(servers): |
|
|
while time.time() < timeout and count < len(servers): |
|
|
try: |
|
|
try: |
|
|
server, socket = socket_queue.get(True, 0.3) |
|
|
server, socket = socket_queue.get(True, 0.3) |
|
|
except Queue.Empty: |
|
|
except queue.Empty: |
|
|
continue |
|
|
continue |
|
|
if socket: |
|
|
if socket: |
|
|
interfaces[server] = Interface(server, socket) |
|
|
interfaces[server] = Interface(server, socket) |
|
@ -47,10 +47,10 @@ def wait_on_interfaces(interfaces, timeout=10): |
|
|
def get_peers(): |
|
|
def get_peers(): |
|
|
peers = [] |
|
|
peers = [] |
|
|
# 1. get connected interfaces |
|
|
# 1. get connected interfaces |
|
|
server = 'ecdsa.net:110:s' |
|
|
server = 'h.1209k.com:50002:s' |
|
|
interfaces = get_interfaces([server]) |
|
|
interfaces = get_interfaces([server]) |
|
|
if not interfaces: |
|
|
if not interfaces: |
|
|
print "No connection to", server |
|
|
print("No connection to", server) |
|
|
return [] |
|
|
return [] |
|
|
# 2. get list of peers |
|
|
# 2. get list of peers |
|
|
interface = interfaces[server] |
|
|
interface = interfaces[server] |
|
@ -60,21 +60,23 @@ def get_peers(): |
|
|
response = responses[0][1] # One response, (req, response) tuple |
|
|
response = responses[0][1] # One response, (req, response) tuple |
|
|
peers = parse_servers(response.get('result')) |
|
|
peers = parse_servers(response.get('result')) |
|
|
peers = filter_protocol(peers,'s') |
|
|
peers = filter_protocol(peers,'s') |
|
|
|
|
|
#print(response) |
|
|
return peers |
|
|
return peers |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def send_request(peers, method, params): |
|
|
def send_request(peers, method, params): |
|
|
print "Contacting %d servers"%len(peers) |
|
|
print("Contacting %d servers"%len(peers)) |
|
|
interfaces = get_interfaces(peers) |
|
|
interfaces = get_interfaces(peers) |
|
|
print "%d servers could be reached" % len(interfaces) |
|
|
print("%d servers could be reached" % len(interfaces)) |
|
|
for peer in peers: |
|
|
for peer in peers: |
|
|
if not peer in interfaces: |
|
|
if not peer in interfaces: |
|
|
print "Connection failed:", peer |
|
|
print("Connection failed:", peer) |
|
|
for msg_id, i in enumerate(interfaces.values()): |
|
|
for msg_id, i in enumerate(interfaces.values()): |
|
|
i.queue_request(method, params, msg_id) |
|
|
i.queue_request(method, params, msg_id) |
|
|
responses = wait_on_interfaces(interfaces) |
|
|
responses = wait_on_interfaces(interfaces) |
|
|
for peer in interfaces: |
|
|
for peer in interfaces: |
|
|
if not peer in responses: |
|
|
if not peer in responses: |
|
|
print peer, "did not answer" |
|
|
print(peer, "did not answer") |
|
|
results = dict(zip(responses.keys(), [t[0][1].get('result') for t in responses.values()])) |
|
|
results = dict(zip(responses.keys(), [t[0][1].get('result') for t in responses.values()])) |
|
|
print "%d answers"%len(results) |
|
|
print("%d answers"%len(results)) |
|
|
return results |
|
|
return results |
|
|