URI: 
       tMerge commit 'refs/merge-requests/6' of git://gitorious.org/electrum/electrum into merge-requests/6 - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 55d9502184bf7eeb06fb0f20117f6bb75c40331c
   DIR parent b61ec6ec7ca0a86fd05989623746909a9b322fea
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Thu,  1 Dec 2011 19:41:56 +0300
       
       Merge commit 'refs/merge-requests/6' of git://gitorious.org/electrum/electrum into merge-requests/6
       
       Diffstat:
         A server/README-IRC.txt               |      18 ++++++++++++++++++
         M server/electrum.conf.sample         |       1 +
         M server/server.py                    |      31 +++++++++++++++----------------
       
       3 files changed, 34 insertions(+), 16 deletions(-)
       ---
   DIR diff --git a/server/README-IRC.txt b/server/README-IRC.txt
       t@@ -0,0 +1,18 @@
       +IRC is used by Electrum server to find 'peers' - other Electrum servers. The current list can be seen by running:
       +
       +./server.py peers
       +
       +The following config file options are used by the IRC part of Electrum server:
       +
       +[server]
       +irc = yes
       +host = fqdn.host.name.tld
       +ircname = some short description
       +
       +'irc' is used to determine whether the IRC thread will be started or the Electrum server will run in private mode. In private mode, ./server.py peers will always return an empty list.
       +
       +'host' is a fqdn of your Electrum server. It is used both when binding the listener for incoming clien conections, and also as part of the realname field in IRC (see below).
       +
       +'ircname' is a short text that will be appended to 'host' when composing the IRC realname field:
       +
       +realname = 'host' + ' ' + 'ircname', for example 'fqdn.host.name.tld some short description'
   DIR diff --git a/server/electrum.conf.sample b/server/electrum.conf.sample
       t@@ -4,6 +4,7 @@ port = 50000
        password = secret
        banner = Welcome to Electrum!
        irc = yes
       +ircname = public Electrum server
        
        [database]
        type = sqlite3
   DIR diff --git a/server/server.py b/server/server.py
       t@@ -40,6 +40,7 @@ config.set('server', 'host', 'ecdsa.org')
        config.set('server', 'port', 50000)
        config.set('server', 'password', '')
        config.set('server', 'irc', 'yes')
       +config.set('server', 'ircname', 'Electrum server')
        config.add_section('database')
        config.set('database', 'type', 'psycopg2')
        config.set('database', 'database', 'abe')
       t@@ -443,39 +444,37 @@ def irc_thread():
                try:
                    s = socket.socket()
                    s.connect(('irc.freenode.net', 6667))
       -            s.send('USER '+config.get('server','host')+' '+NICK+' bla :'+NICK+'\n') 
       +            s.send('USER electrum 0 * :'+config.get('server','host')+' '+config.get('server','ircname')+'\n')
                    s.send('NICK '+NICK+'\n')
                    s.send('JOIN #electrum\n')
       +            sf = s.makefile('r', 0)
                    t = 0
                    while not stopping:
       -                line = s.recv(2048)
       +                line = sf.readline()
                        line = line.rstrip('\r\n')
                        line = line.split()
                        if line[0]=='PING': 
                            s.send('PONG '+line[1]+'\n')
                        elif '353' in line: # answer to /names
                            k = line.index('353')
       -                    try:
       -                        k2 = line.index('366')
       -                    except:
       -                        continue
       -                    for item in line[k+1:k2]:
       +                    for item in line[k+1:]:
                                if item[0:2] == 'E_':
       -                            s.send('USERHOST %s\n'%item)
       -                elif '302' in line: # answer to /userhost
       -                    k = line.index('302')
       -                    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)
       +                            s.send('WHO %s\n'%item)
       +                elif '352' in line: # answer to /who
       +                        # warning: this is a horrible hack which apparently works
       +                        k = line.index('352')
       +                    ip = line[k+4]
       +                    ip = socket.gethostbyname(ip)
       +                    name = line[k+6]
       +                    host = line[k+9]
       +                    peer_list[name] = (ip,host)
                        elif time.time() - t > 5*60:
                            s.send('NAMES #electrum\n')
                            t = time.time()
                except:
                    traceback.print_exc(file=sys.stdout)
                finally:
       +                sf.close()
                    s.close()