Merge commit 'refs/merge-requests/6' of git://gitorious.org/electrum/electrum into merge-requests/6

This commit is contained in:
ThomasV 2011-12-01 19:41:56 +03:00
commit 55d9502184
3 changed files with 34 additions and 16 deletions

18
server/README-IRC.txt Normal file
View File

@ -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'

View File

@ -4,6 +4,7 @@ port = 50000
password = secret
banner = Welcome to Electrum!
irc = yes
ircname = public Electrum server
[database]
type = sqlite3

View File

@ -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()