Merge commit 'refs/merge-requests/1' of git://gitorious.org/electrum/electrum into...
authorThomasV <thomasv@gitorious>
Wed, 23 Nov 2011 10:57:27 +0000 (13:57 +0300)
committerThomasV <thomasv@gitorious>
Wed, 23 Nov 2011 10:57:27 +0000 (13:57 +0300)
1  2 
server.py

diff --combined server.py
index c22326a,8fce06c..b54797d
mode 100644,100755..100755
+++ b/server.py
@@@ -22,26 -22,33 +22,33 @@@ Todo
  """
  
  
 -import time, socket, operator, thread, ast, sys
 +import time, socket, operator, thread, ast, sys,re
  import psycopg2, binascii
- import bitcoinrpc
+ import bitcoin
  
  from Abe.abe import hash_to_address, decode_check_address
  from Abe.DataStore import DataStore as Datastore_class
  from Abe import DataStore, readconf, BCDataStream,  deserialize, util, base58
  
+ import ConfigParser
+ config = ConfigParser.ConfigParser()
+ # set some defaults, which will be overwritten by the config file
+ config.add_section('server')
+ config.set('server','banner', 'Welcome to Electrum!')
+ config.set('server', 'host', 'ecdsa.org')
+ config.set('server', 'port', 50000)
+ config.set('server', 'password', '')
+ config.add_section('database')
+ config.set('database', 'type', 'psycopg2')
+ config.set('database', 'database', 'abe')
  try:
      f = open('/etc/electrum.conf','r')
-     data = f.read()
+     config.readfp(f)
      f.close()
-     HOST, PORT, PASSWORD, SERVER_MESSAGE = ast.literal_eval(data)
  except:
-     print "could not read /etc/electrum.conf"
-     SERVER_MESSAGE = "Welcome to Electrum"
-     HOST = 'ecdsa.org'
-     PORT = 50000
-     PASSWORD = ''
+     print "Could not read electrum.conf. I will use the dafault values."
  
  stopping = False
  block_number = -1
@@@ -271,8 -278,8 +278,8 @@@ class MyStore(Datastore_class)
  
  
  def send_tx(tx):
-     import bitcoinrpc
-     conn = bitcoinrpc.connect_to_local()
+     import bitcoin
+     conn = bitcoin.connect_to_local()
      try:
          v = conn.importtransaction(tx)
      except:
  def listen_thread(store):
      s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-     s.bind((HOST, PORT))
+     s.bind((config.get('server','host'), config.getint('server','port')))
      s.listen(1)
      while not stopping:
          conn, addr = s.accept()
@@@ -329,7 -336,7 +336,7 @@@ def client_thread(ipaddr,conn)
              sessions[session_id] = {}
              for a in addresses:
                  sessions[session_id][a] = ''
-             out = repr( (session_id, SERVER_MESSAGE) )
+             out = repr( (session_id, config.get('server','banner')) )
              sessions_last_time[session_id] = time.time()
  
          elif cmd=='poll': 
              out = repr(h)
  
          elif cmd == 'load': 
-             if PASSWORD == data:
+             if config.get('server','password') == data:
                  out = repr( len(sessions) )
              else:
                  out = 'wrong password'
  
          elif cmd == 'stop':
              global stopping
-             if PASSWORD == data:
+             if config.get('server','password') == data:
                  stopping = True
                  out = 'ok'
              else:
@@@ -394,7 -401,7 +401,7 @@@ ds = BCDataStream.BCDataStream(
  
  def memorypool_update(store):
  
-     conn = bitcoinrpc.connect_to_local()
+     conn = bitcoin.connect_to_local()
      try:
          v = conn.getmemorypool()
      except:
  
  def clean_session_thread():
      while not stopping:
-         time.sleep(3)
+         time.sleep(30)
          t = time.time()
          for k,t0 in sessions_last_time.items():
              if t - t0 > 60:
@@@ -435,8 -442,8 +442,8 @@@ def irc_thread()
          try:
              s = socket.socket()
              s.connect(('irc.freenode.net', 6667))
 -            s.send('USER '+NICK+' '+NICK+' bla :'+NICK+'\n') 
 -            s.send('NICK '+NICK+'\n') 
 +            s.send('USER '+HOST+' '+NICK+' bla :'+NICK+'\n') 
 +            s.send('NICK '+NICK+'\n')
              s.send('JOIN #electrum\n')
              t = 0
              while not stopping:
                              s.send('USERHOST %s\n'%item)
                  elif '302' in line: # answer to /userhost
                      k = line.index('302')
 -                    name = line[k+2].split('=')[0]
 -                    host = line[k+2].split('@')[1]
 -                    peer_list[name] = host
 +                    m = re.match( "^:(.*?)=\+~(.*?)@(.*?)$", line[k+2] )
 +                    if m:
 +                        name = m.group(1)
 +                        host = m.group(2)
 +                        ip = m.group(3)
 +                        peer_list[name] = (ip,host)
                  elif time.time() - t > 5*60:
                      s.send('NAMES #electrum\n')
                      t = time.time()
@@@ -479,14 -483,14 +486,14 @@@ if __name__ == '__main__'
      if len(sys.argv)>1:
          cmd = sys.argv[1]
          if cmd == 'load':
-             request = "('load','%s')#"%PASSWORD
+             request = "('load','%s')#"%config.get('server','password')
          elif cmd == 'peers':
              request = "('peers','')#"
          elif cmd == 'stop':
-             request = "('stop','%s')#"%PASSWORD
+             request = "('stop','%s')#"%config.get('server','password')
  
          s = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
-         s.connect(( HOST, PORT))
+         s.connect((config.get('server','host'), config.getint('server','port')))
          s.send( request )
          out = ''
          while 1:
      print "starting Electrum server"
      conf = DataStore.CONFIG_DEFAULTS
      args, argv = readconf.parse_argv( [], conf)
-     args.dbtype='psycopg2'
-     args.connect_args = {"database":"abe"}
+     args.dbtype= config.get('database','type')
+     args.connect_args = {'database' : config.get('database','database') }
      store = MyStore(args)
  
      thread.start_new_thread(listen_thread, (store,))