fix typo
[electrum-server.git] / server.py
index dddfff3..42b6b9f 100755 (executable)
--- a/server.py
+++ b/server.py
@@ -673,6 +673,13 @@ def tcp_server_thread():
             traceback.print_exc(file=sys.stdout)
 
 
+def close_session(session_id):
+    print "lost connection", session_id
+    sessions.pop(session_id)
+    if session_id in sessions_sub_numblocks:
+        sessions_sub_numblocks.remove(session_id)
+
+
 # one thread per client. put requests in a queue.
 def tcp_client_thread(ipaddr,conn):
     """ use a persistent connection. put commands in a queue."""
@@ -689,9 +696,7 @@ def tcp_client_thread(ipaddr,conn):
         d = conn.recv(1024)
         msg += d
         if not d:
-            print "lost connection", session_id
-            sessions.pop(session_id)
-            sessions_sub_numblocks.remove(session_id)
+            close_session(session_id)
             break
 
         while True:
@@ -717,6 +722,8 @@ def tcp_client_thread(ipaddr,conn):
 def process_input_queue():
     while not stopping:
         session_id, cmd, data = input_queue.get()
+        if session_id not in sessions.keys():
+            continue
         out = None
         if cmd == 'address.subscribe':
             subscribe_to_address(session_id,data)
@@ -726,6 +733,8 @@ def process_input_queue():
             sessions[session_id]['version'] = data
         elif cmd == 'server.banner':
             out = json.dumps( { 'method':'server.banner', 'result':config.get('server','banner').replace('\\n','\n') } )
+        elif cmd == 'server.peers':
+            out = json.dumps( { 'method':'server.peers', 'result':peer_list.values() } )
         elif cmd == 'address.get_history':
             address = data
             out = json.dumps( { 'method':'address.get_history', 'address':address, 'result':store.get_history( address ) } )
@@ -744,8 +753,12 @@ def process_output_queue():
         session_id, out = output_queue.get()
         session = sessions.get(session_id)
         if session: 
-            conn = session.get('conn')
-            conn.send(out+'\n')
+            try:
+                conn = session.get('conn')
+                conn.send(out+'\n')
+            except:
+                close_session(session_id)
+