X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=transports%2Fstratum_http.py;h=8118478458c7ffbd1778e2a2013baa95f230b019;hb=3051f46df11fc6c9ebe321c9ef6d726e65310129;hp=659bae033d139d33546202bdb9b3de74eb0d22eb;hpb=561047a590b4f1546174c8dc8814d0523533aae1;p=electrum-server.git diff --git a/transports/stratum_http.py b/transports/stratum_http.py index 659bae0..8118478 100644 --- a/transports/stratum_http.py +++ b/transports/stratum_http.py @@ -22,7 +22,7 @@ import SimpleXMLRPCServer import SocketServer import socket import logging -import os +import os, time import types import traceback import sys, threading @@ -97,6 +97,11 @@ class StratumJSONRPCDispatcher(SimpleXMLRPCServer.SimpleXMLRPCDispatcher): response = fault.response() return response + 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: request = [ request ] @@ -107,13 +112,12 @@ class StratumJSONRPCDispatcher(SimpleXMLRPCServer.SimpleXMLRPCDispatcher): responses.append(result.response()) continue - session = self.dispatcher.get_session_by_address(session_id) self.dispatcher.process(session, req_entry) if req_entry['method'] == 'server.stop': return json.dumps({'result':'ok'}) - r = self.poll_session(session_id) + r = self.poll_session(session) for item in r: responses.append(json.dumps(item)) @@ -262,8 +266,7 @@ class StratumJSONRPCServer(SocketServer.TCPServer, StratumJSONRPCDispatcher): self.dispatcher.add_session(session) return session_id - def poll_session(self, session_id): - session = self.dispatcher.get_session_by_address(session_id) + def poll_session(self, session): q = session.pending_responses responses = [] while not q.empty(): @@ -288,6 +291,12 @@ class HttpSession(Session): 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