Added Support for OPTIONS Request
[electrum-server.git] / transports / stratum_http.py
index ef738e3..e4eb777 100644 (file)
@@ -22,7 +22,7 @@ import SimpleXMLRPCServer
 import SocketServer
 import socket
 import logging
-import os
+import os, time
 import types
 import traceback
 import sys, threading
@@ -100,6 +100,7 @@ class StratumJSONRPCDispatcher(SimpleXMLRPCServer.SimpleXMLRPCDispatcher):
         session = self.dispatcher.get_session_by_address(session_id)
         if not session:
             return 'Error: session not found'
+        session.time = time.time()
 
         responses = []
         if type(request) is not types.ListType:
@@ -111,7 +112,7 @@ class StratumJSONRPCDispatcher(SimpleXMLRPCServer.SimpleXMLRPCDispatcher):
                 responses.append(result.response())
                 continue
 
-            self.dispatcher.process(session, req_entry)
+            self.dispatcher.do_dispatch(session, req_entry)
                 
             if req_entry['method'] == 'server.stop':
                 return json.dumps({'result':'ok'})
@@ -133,7 +134,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', 'X-Request, X-Requested-With')
+               self.send_header('Content-Length', '0')
+               self.end_headers()
+            
     def do_GET(self):
         if not self.is_rpc_path_valid():
             self.report_404()
@@ -284,12 +293,18 @@ class HttpSession(Session):
         Session.__init__(self)
         self.pending_responses = Queue.Queue()
         self.address = session_id
-        self.name = "HTTP session"
+        self.name = "HTTP"
 
     def send_response(self, response):
         raw_response = json.dumps(response)
         self.pending_responses.put(response)
 
+    def stopped(self):
+        with self.lock:
+            if time.time() - self.time > 60:
+                self._stopped = True
+            return self._stopped
+
 class HttpServer(threading.Thread):
     def __init__(self, dispatcher, host, port):
         self.shared = dispatcher.shared