X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=transports%2Fstratum_http.py;h=f60b3209890b27b118099f526828aee30a5c33e0;hb=6acbe2b434894de08ec5a79d5e414c9d62dd50b2;hp=5a3fe1d418055fa050913c67ec16d41443419a5e;hpb=f73c44e47158e4d8ad137c8f111519a472d3c798;p=electrum-server.git diff --git a/transports/stratum_http.py b/transports/stratum_http.py index 5a3fe1d..f60b320 100644 --- a/transports/stratum_http.py +++ b/transports/stratum_http.py @@ -49,7 +49,7 @@ from the processor point of view: """ -from processor import random_string +from processor import random_string, print_log def get_version(request): @@ -153,7 +153,15 @@ class StratumJSONRPCDispatcher(SimpleXMLRPCServer.SimpleXMLRPCDispatcher): class StratumJSONRPCRequestHandler( SimpleXMLRPCServer.SimpleXMLRPCRequestHandler): - + + def do_OPTIONS(self): + self.send_response(200) + self.send_header('Allow', 'GET, POST, OPTIONS') + self.send_header('Access-Control-Allow-Origin', '*') + self.send_header('Access-Control-Allow-Headers', '*') + self.send_header('Content-Length', '0') + self.end_headers() + def do_GET(self): if not self.is_rpc_path_valid(): self.report_404() @@ -192,7 +200,7 @@ class StratumJSONRPCRequestHandler( self.end_headers() self.wfile.write(response) self.wfile.flush() - self.connection.shutdown(1) + self.shutdown_connection() def do_POST(self): @@ -241,13 +249,23 @@ class StratumJSONRPCRequestHandler( self.end_headers() self.wfile.write(response) self.wfile.flush() + self.shutdown_connection() + + def shutdown_connection(self): self.connection.shutdown(1) +class SSLRequestHandler(StratumJSONRPCRequestHandler): + def setup(self): + self.connection = self.request + self.rfile = socket._fileobject(self.request, "rb", self.rbufsize) + self.wfile = socket._fileobject(self.request, "wb", self.wbufsize) + def shutdown_connection(self): + self.connection.shutdown() -class SSLTCPServer(SocketServer.TCPServer): +class SSLTCPServer(SocketServer.TCPServer): def __init__(self, server_address, certfile, keyfile, RequestHandlerClass, bind_and_activate=True): SocketServer.BaseServer.__init__(self, server_address, RequestHandlerClass) ctx = SSL.Context(SSL.SSLv3_METHOD) @@ -259,7 +277,8 @@ class SSLTCPServer(SocketServer.TCPServer): self.server_activate() def shutdown_request(self,request): - request.shutdown() + #request.shutdown() + pass class StratumHTTPServer(SocketServer.TCPServer, StratumJSONRPCDispatcher): @@ -298,7 +317,7 @@ class StratumHTTPSSLServer(SSLTCPServer, StratumJSONRPCDispatcher): allow_reuse_address = True def __init__(self, addr, certfile, keyfile, - requestHandler=StratumJSONRPCRequestHandler, + requestHandler=SSLRequestHandler, logRequests=False, encoding=None, bind_and_activate=True, address_family=socket.AF_INET): @@ -371,11 +390,11 @@ class HttpServer(threading.Thread): if self.use_ssl: class StratumThreadedServer(ThreadingMixIn, StratumHTTPSSLServer): pass self.server = StratumThreadedServer(( self.host, self.port), self.certfile, self.keyfile) - print "HTTPS server started." + print_log( "HTTPS server started.") else: class StratumThreadedServer(ThreadingMixIn, StratumHTTPServer): pass self.server = StratumThreadedServer(( self.host, self.port)) - print "HTTP server started." + print_log( "HTTP server started.") self.server.dispatcher = self.dispatcher self.server.register_function(None, 'server.stop')