def _perform_request(self, _, request, session): request.setHeader('content-type', 'application/stratum') request.setHeader('server', settings.USER_AGENT) request.setHeader('x-session-timeout', session.sessionTimeout) request.setHeader('access-control-allow-origin', '*') # Allow access from any other domain # Update client's IP address session.transport.peer = request.getHost() # Although it isn't intuitive at all, request.getHeader reads request headers, # but request.setHeader (few lines above) writes response headers... if 'application/stratum' not in request.getHeader('content-type'): session.transport.write("%s\n" % json.dumps({ 'id': None, 'result': None, 'error': (-1, "Content-type must be 'application/stratum'. See http://stratum.bitcoin.cz for more info.", "") })) self._finish(None, request, session.transport, session.lock) return if not session.protocol: # Build a "protocol connection" proto = Protocol() proto.transport = session.transport proto.factory = self proto.connectionMade() session.protocol = proto else: proto = session.protocol # Update callback URL if presented callback_url = request.getHeader('x-callback-url') if callback_url != None: if callback_url == '': # Blank value of callback URL switches HTTP Push back to HTTP Poll session.transport.push_url = None else: session.transport.push_url = callback_url data = request.content.read() if data: counter = RequestCounter() counter.on_finish.addCallback(self._finish, request, session.transport, session.lock) proto.dataReceived(data, request_counter=counter) else: # Ping message (empty request) of HTTP Polling self._finish(None, request, session.transport, session.lock)
def _perform_request(self, _, request, session): request.setHeader('content-type', 'application/stratum') request.setHeader('server', settings.USER_AGENT) request.setHeader('x-session-timeout', session.sessionTimeout) request.setHeader('access-control-allow-origin', '*') # Allow access from any other domain # Update client's IP address session.transport.peer = request.getHost() # Although it isn't intuitive at all, request.getHeader reads request headers, # but request.setHeader (few lines above) writes response headers... if 'application/stratum' not in request.getHeader('content-type'): session.transport.write("%s\n" % json.dumps({'id': None, 'result': None, 'error': (-1, "Content-type must be 'application/stratum'. See http://stratum.bitcoin.cz for more info.", "")})) self._finish(None, request, session.transport, session.lock) return if not session.protocol: # Build a "protocol connection" proto = Protocol() proto.transport = session.transport proto.factory = self proto.connectionMade() session.protocol = proto else: proto = session.protocol # Update callback URL if presented callback_url = request.getHeader('x-callback-url') if callback_url != None: if callback_url == '': # Blank value of callback URL switches HTTP Push back to HTTP Poll session.transport.push_url = None else: session.transport.push_url = callback_url data = request.content.read() if data: counter = RequestCounter() counter.on_finish.addCallback(self._finish, request, session.transport, session.lock) proto.dataReceived(data, request_counter=counter) else: # Ping message (empty request) of HTTP Polling self._finish(None, request, session.transport, session.lock)
def connectionMade(self): WebSocketServerProtocol.connectionMade(self) Protocol.connectionMade(self)