block_number should return -1 if we know the DB is not up to date
[electrum-server.git] / server.py
index 6e862b2..973f932 100755 (executable)
--- a/server.py
+++ b/server.py
@@ -38,7 +38,8 @@ import urllib
 
 # we need to import electrum
 sys.path.append('../client/')
-import electrum
+from wallet import Wallet
+from interface import Interface
 
 
 config = ConfigParser.ConfigParser()
@@ -324,7 +325,7 @@ class MyStore(Datastore_class):
 
 
 
-class Direct_Interface(electrum.Interface):
+class Direct_Interface(Interface):
     def __init__(self):
         pass
 
@@ -487,6 +488,8 @@ def client_thread(ipaddr,conn):
 
 def do_command(cmd, data, ipaddr):
 
+    timestr = time.strftime("[%d/%m/%Y-%H:%M:%S]")
+
     if cmd=='b':
         out = "%d"%block_number
 
@@ -501,7 +504,7 @@ def do_command(cmd, data, ipaddr):
         except:
             print "error", data
             return None
-        print time.strftime("[%d/%m/%Y-%H:%M:%S]"), "new session", ipaddr, addresses[0] if addresses else addresses, len(addresses), version
+        print timestr, "new session", ipaddr, addresses[0] if addresses else addresses, len(addresses), version
         out = new_session(version, addresses)
 
     elif cmd=='update_session':
@@ -510,7 +513,7 @@ def do_command(cmd, data, ipaddr):
         except:
             print "error"
             return None
-        print time.strftime("[%d/%m/%Y-%H:%M:%S]"), "update session", ipaddr, addresses[0] if addresses else addresses, len(addresses)
+        print timestr, "update session", ipaddr, addresses[0] if addresses else addresses, len(addresses)
         out = update_session(session_id,addresses)
 
     elif cmd == 'bccapi_login':
@@ -520,7 +523,7 @@ def do_command(cmd, data, ipaddr):
         master_public_key = k.decode('hex') # todo: sanitize. no need to decode twice...
         print master_public_key
         wallet_id = random_string(10)
-        w = electrum.Wallet( Direct_Interface() )
+        w = Wallet( Direct_Interface() )
         w.master_public_key = master_public_key.decode('hex')
         w.synchronize()
         wallets[wallet_id] = w
@@ -528,7 +531,7 @@ def do_command(cmd, data, ipaddr):
         print "wallets", wallets
 
     elif cmd == 'bccapi_getAccountInfo':
-        from electrum import int_to_hex
+        from wallet import int_to_hex
         v, wallet_id = ast.literal_eval(data)
         w = wallets.get(wallet_id)
         if w is not None:
@@ -541,7 +544,7 @@ def do_command(cmd, data, ipaddr):
             out = "error"
 
     elif cmd == 'bccapi_getAccountStatement':
-        from electrum import int_to_hex
+        from wallet import int_to_hex
         v, wallet_id = ast.literal_eval(data)
         w = wallets.get(wallet_id)
         if w is not None:
@@ -573,7 +576,7 @@ def do_command(cmd, data, ipaddr):
 
     elif cmd =='tx':
         out = send_tx(data)
-        print "sent tx:", out
+        print timestr, "sent tx:", ipaddr, out
 
     elif cmd == 'stop':
         out = cmd_stop(data)
@@ -746,9 +749,14 @@ if __name__ == '__main__':
             store.catch_up()
             memorypool_update(store)
             block_number = store.get_block_number(1)
-            dblock.release()
+        except IOError:
+            print "IOError: cannot reach bitcoind"
+            block_number = -1 
         except:
             traceback.print_exc(file=sys.stdout)
+            block_number = -1
+        finally:
+            dblock.release()
         time.sleep(10)
 
     print "server stopped"