adding report_ config fields for different host and port settings on IRC for NAT...
[electrum-server.git] / backends / irc / __init__.py
index bd981a3..46ec921 100644 (file)
@@ -15,10 +15,27 @@ class IrcThread(threading.Thread):
         self.daemon = True
         self.stratum_tcp_port = config.get('server','stratum_tcp_port')
         self.stratum_http_port = config.get('server','stratum_http_port')
+        self.stratum_tcp_ssl_port = config.get('server','stratum_tcp_ssl_port')
+        self.stratum_http_ssl_port = config.get('server','stratum_http_ssl_port')
+        self.report_stratum_tcp_port = config.get('server','report_stratum_tcp_port')
+        self.report_stratum_http_port = config.get('server','report_stratum_http_port')
+        self.report_stratum_tcp_ssl_port = config.get('server','report_stratum_tcp_ssl_port')
+        self.report_stratum_http_ssl_port = config.get('server','report_stratum_http_ssl_port')
         self.peers = {}
         self.host = config.get('server','host')
+        self.report_host = config.get('server','report_host')
         self.nick = config.get('server', 'irc_nick')
+       if self.report_stratum_tcp_port: self.stratum_tcp_port = self.report_stratum_tcp_port
+       if self.report_stratum_http_port: self.stratum_http_port = self.report_stratum_http_port
+       if self.report_stratum_tcp_ssl_port: self.stratum_tcp_ssl_port = self.report_stratum_tcp_ssl_port
+       if self.report_stratum_http_ssl_port: self.stratum_http_ssl_port = self.report_stratum_http_ssl_port
+       if self.report_host: self.host = self.report_host
         if not self.nick: self.nick = random_string(10)
+        self.prepend = 'E_'
+        if config.get('server', 'coin') == 'litecoin':
+            self.prepend = 'EL_'
+        self.pruning = config.get('server', 'backend') == 'leveldb'
+        self.nick = self.prepend + self.nick
 
     def get_peers(self):
         return self.peers.values()
@@ -26,10 +43,15 @@ class IrcThread(threading.Thread):
 
     def getname(self):
         s = 'v' + VERSION + ' '
+        if self.pruning: s += 'p '
         if self.stratum_tcp_port:
             s += 't' + self.stratum_tcp_port + ' ' 
         if self.stratum_http_port:
             s += 'h' + self.stratum_http_port + ' '
+        if self.stratum_tcp_port:
+            s += 's' + self.stratum_tcp_ssl_port + ' ' 
+        if self.stratum_http_port:
+            s += 'g' + self.stratum_http_ssl_port + ' '
         return s
 
 
@@ -40,8 +62,13 @@ class IrcThread(threading.Thread):
             try:
                 s = socket.socket()
                 s.connect(('irc.freenode.net', 6667))
+            except:
+                time.sleep(10)
+                continue
+
+            try:
                 s.send('USER electrum 0 * :' + self.host + ' ' + ircname + '\n')
-                s.send('NICK EL_' + self.nick + '\n')
+                s.send('NICK ' + self.nick + '\n')
                 s.send('JOIN #electrum\n')
                 sf = s.makefile('r', 0)
                 t = 0
@@ -55,7 +82,7 @@ class IrcThread(threading.Thread):
                     elif '353' in line: # answer to /names
                         k = line.index('353')
                         for item in line[k+1:]:
-                            if item[0:2] == 'EL_':
+                            if item.startswith(self.prepend):
                                 s.send('WHO %s\n'%item)
                     elif '352' in line: # answer to /who
                         # warning: this is a horrible hack which apparently works
@@ -134,7 +161,7 @@ class ServerProcessor(Processor):
 
         elif method == 'server.stop':
             self.shared.stop()
-            result = 'ok'
+            result = 'stopping, please wait until all threads terminate.'
 
         elif method == 'server.info':
             result = map(lambda s: { "time":s.time,