X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=transports%2Fstratum_tcp.py;h=8e28a57e5ee2ee1c4437cb37eee56a92e993d241;hb=81e3c4d66fe27ed96997a86577cd13bc52a266e1;hp=0aebc0f78edd4a77ef520bc1b26a8391b3f9b4bd;hpb=24bb4c0f2aafe0e6bd32c1ce1ba8df04fc62e58b;p=electrum-server.git diff --git a/transports/stratum_tcp.py b/transports/stratum_tcp.py index 0aebc0f..8e28a57 100644 --- a/transports/stratum_tcp.py +++ b/transports/stratum_tcp.py @@ -1,16 +1,17 @@ import json +import Queue as queue import socket import threading import time -import Queue as queue -from processor import Session, Dispatcher, timestr +from processor import Session, Dispatcher +from utils import print_log + class TcpSession(Session): def __init__(self, connection, address, use_ssl, ssl_certfile, ssl_keyfile): Session.__init__(self) - print connection, address, use_ssl if use_ssl: import ssl self._connection = ssl.wrap_socket( @@ -23,7 +24,7 @@ class TcpSession(Session): self._connection = connection self.address = address[0] - self.name = "TCP" + self.name = "TCP " if not use_ssl else "SSL " def connection(self): if self.stopped(): @@ -51,7 +52,6 @@ class TcpSession(Session): self.stop() - class TcpClientRequestor(threading.Thread): def __init__(self, dispatcher, session): @@ -94,7 +94,7 @@ class TcpClientRequestor(threading.Thread): raw_command = self.message[0:raw_buffer].strip() self.message = self.message[raw_buffer + 1:] - if raw_command == 'quit': + if raw_command == 'quit': self.session.stop() return False @@ -113,10 +113,11 @@ class TcpClientRequestor(threading.Thread): # Return an error JSON in response. self.dispatcher.push_response({"error": "syntax error", "request": raw_command}) else: - self.dispatcher.push_request(self.session,command) + self.dispatcher.push_request(self.session, command) return True + class TcpServer(threading.Thread): def __init__(self, dispatcher, host, port, use_ssl, ssl_certfile, ssl_keyfile): @@ -132,15 +133,23 @@ class TcpServer(threading.Thread): self.ssl_certfile = ssl_certfile def run(self): - print "TCP server started.", self.use_ssl + if self.use_ssl: + print_log("TCP/SSL server started.") + else: + print_log("TCP server started.") sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((self.host, self.port)) sock.listen(1) while not self.shared.stopped(): - session = TcpSession(*sock.accept(), use_ssl=self.use_ssl, ssl_certfile=self.ssl_certfile, ssl_keyfile=self.ssl_keyfile) + try: + session = TcpSession(*sock.accept(), use_ssl=self.use_ssl, ssl_certfile=self.ssl_certfile, ssl_keyfile=self.ssl_keyfile) + except BaseException, e: + error = str(e) + print_log("cannot start TCP session", error) + time.sleep(0.1) + continue self.dispatcher.add_session(session) self.dispatcher.collect_garbage() client_req = TcpClientRequestor(self.dispatcher, session) client_req.start() -