From dc1603822bcaa0b0a7fd1443576bda0399a3ce07 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 29 Mar 2012 21:10:19 +0400 Subject: [PATCH] port numbers --- modules/irc/__init__.py | 46 ++++++++++++++++++++++++++++++++++------------ server.py | 24 +++++++++++++----------- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/modules/irc/__init__.py b/modules/irc/__init__.py index 908089a..41c468e 100644 --- a/modules/irc/__init__.py +++ b/modules/irc/__init__.py @@ -1,6 +1,4 @@ -#################################################################### - -import threading, socket, traceback, time +import threading, socket, traceback, time, sys def random_string(N): import random, string @@ -16,22 +14,43 @@ class ServerProcessor(Processor): self.peers = {} self.banner = config.get('server','banner') self.host = config.get('server','host') - self.nick = config.get('server','ircname') - self.irc = config.get('server','irc') == 'yes' + + self.native_port = config.get('server','native_port') + self.stratum_tcp_port = config.get('server','stratum_tcp_port') + self.stratum_http_port = config.get('server','stratum_http_port') + + self.irc = config.get('server', 'irc') == 'yes' + self.nick = config.get('server', 'irc_nick') + if not self.nick: self.nick = random_string(10) + def get_peers(self): return self.peers.values() + + def getname(self): + s = '' + if self.native_port: + s+= 'n' + self.native_port + ' ' + if self.stratum_tcp_port: + s += 's' + self.stratum_tcp_port + ' ' + if self.stratum_http_port: + s += 'h' + self.stratum_http_port + ' ' + return s + + def run(self): if not self.irc: return - NICK = 'E_'+random_string(10) + + ircname = self.getname() + while not self.shared.stopped(): try: s = socket.socket() s.connect(('irc.freenode.net', 6667)) - s.send('USER electrum 0 * :'+self.host+' '+self.nick+'\n') - s.send('NICK '+NICK+'\n') + s.send('USER electrum 0 * :' + self.host + ' ' + ircname + '\n') + s.send('NICK E_' + self.nick + '\n') s.send('JOIN #electrum\n') sf = s.makefile('r', 0) t = 0 @@ -53,7 +72,8 @@ class ServerProcessor(Processor): ip = socket.gethostbyname(ip) name = line[k+6] host = line[k+9] - self.peers[name] = (ip,host) + ports = line[k+10:] + self.peers[name] = (ip, host, ports) if time.time() - t > 5*60: self.push_response({'method':'server.peers', 'result':[self.get_peers()]}) s.send('NAMES #electrum\n') @@ -69,17 +89,19 @@ class ServerProcessor(Processor): def process(self, request): method = request['method'] - - result = '' + params = request['params'] + result = None if method == 'server.banner': result = self.banner.replace('\\n','\n') elif method == 'server.peers.subscribe': result = self.get_peers() + elif method == 'server.version': + print "version", params else: print "unknown method", request if result!='': - response = { 'id':request['id'], 'method':method, 'params':request['params'], 'result':result } + response = { 'id':request['id'], 'method':method, 'params':params, 'result':result } self.push_response(response) diff --git a/server.py b/server.py index be66cdd..6feb636 100755 --- a/server.py +++ b/server.py @@ -23,10 +23,12 @@ config = ConfigParser.ConfigParser() config.add_section('server') config.set('server','banner', 'Welcome to Electrum!') config.set('server', 'host', 'localhost') -config.set('server', 'port', '50000') +config.set('server', 'native_port', '50000') +config.set('server', 'stratum_tcp_port', '50001') +config.set('server', 'stratum_http_port', '8081') config.set('server', 'password', '') config.set('server', 'irc', 'yes') -config.set('server', 'ircname', 'Electrum server') +config.set('server', 'irc_nick', '') config.add_section('database') config.set('database', 'type', 'psycopg2') config.set('database', 'database', 'abe') @@ -48,6 +50,11 @@ except: password = config.get('server','password') host = config.get('server','host') use_libbitcoin = False +native_port = config.get('server','native_port') +stratum_tcp_port = config.get('server','stratum_tcp_port') +stratum_http_port = config.get('server','stratum_http_port') +# NativeServer cannot be used with libbitcoin +if use_libbitcoin: native_port = None from processor import Dispatcher @@ -86,15 +93,10 @@ if __name__ == '__main__': dispatcher.register('server', sb) # Create various transports we need - transports = [ - TcpServer(dispatcher, host, 50001), - HttpServer(dispatcher, host, 8081), - ] - - # NativeServer cannot be used with libbitcoin - if not use_libbitcoin: - transports.append( NativeServer(shared, abe, sb, config.get('server','banner'), host, 50000) ) - + transports = [] + if native_port: transports.append( NativeServer(shared, abe, sb, config.get('server','banner'), host, int(native_port)) ) + if stratum_tcp_port: transports.append( TcpServer(dispatcher, host, int(stratum_tcp_port)) ) + if stratum_http_port: transports.append( HttpServer(dispatcher, host, int(stratum_http_port)) ) for server in transports: server.start() -- 1.7.1