Merge commit 'refs/merge-requests/6' of git://gitorious.org/electrum/electrum into...
authorThomasV <thomasv@gitorious>
Thu, 1 Dec 2011 16:41:56 +0000 (19:41 +0300)
committerThomasV <thomasv@gitorious>
Thu, 1 Dec 2011 16:41:56 +0000 (19:41 +0300)
README-IRC.txt [new file with mode: 0644]
electrum.conf.sample
server.py

diff --git a/README-IRC.txt b/README-IRC.txt
new file mode 100644 (file)
index 0000000..49650a8
--- /dev/null
@@ -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'
index 6aebfc3..c197750 100644 (file)
@@ -4,6 +4,7 @@ port = 50000
 password = secret
 banner = Welcome to Electrum!
 irc = yes
+ircname = public Electrum server
 
 [database]
 type = sqlite3
index 1ca1bc1..045ba9c 100755 (executable)
--- a/server.py
+++ b/server.py
@@ -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')
@@ -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()