def onConnect(self, request): """autobahn onConnect handler for when a connection has started""" track_object(self, msg="onConnect Start") self.ps = PushState(settings=self.ap_settings, request=request) # Setup ourself to handle producing the data self.transport.bufferSize = 2 * 1024 self.transport.registerProducer(self.ps, True) if self.ap_settings.hello_timeout > 0: self.setTimeout(self.ap_settings.hello_timeout)
def processHandshake(self): """Disable host port checking on nonstandard ports since some clients are buggy and don't provide it""" track_object(self, msg="processHandshake") port = self.ap_settings.port hide = port != 80 and port != 443 if not hide: return self.parent_class.processHandshake(self) old_port = self.factory.externalPort try: self.factory.externalPort = None return self.parent_class.processHandshake(self) finally: self.factory.externalPort = old_port
def onMessage(self, payload, isBinary): """autobahn onMessage processor for incoming messages""" if isBinary: self.sendClose() return track_object(self, msg="onMessage") data = None try: data = json.loads(payload.decode('utf8')) except: pass if not isinstance(data, dict): self.sendClose() return # Without a UAID, hello must be next if not self.ps.uaid: return self.process_hello(data) # Ping's get a ping reply if data == {}: return self.process_ping() # Message needs a type if "messageType" not in data: self.sendClose() return cmd = data["messageType"] # We're no longer idle, prevent early connection closure. self.resetTimeout() try: if cmd == "hello": return self.process_hello(data) elif cmd == "register": return self.process_register(data) elif cmd == "unregister": return self.process_unregister(data) elif cmd == "ack": return self.process_ack(data) else: self.sendClose() finally: # Done processing, start idle. self.resetTimeout()
def onMessage(self, payload, isBinary): """autobahn onMessage processor for incoming messages""" if isBinary: self.sendClose() return track_object(self, msg="onMessage") data = None try: data = json.loads(payload.decode("utf8")) except: pass if not isinstance(data, dict): self.sendClose() return # Without a UAID, hello must be next if not self.ps.uaid: return self.process_hello(data) # Ping's get a ping reply if data == {}: return self.process_ping() # Message needs a type if "messageType" not in data: self.sendClose() return cmd = data["messageType"] # We're no longer idle, prevent early connection closure. self.resetTimeout() try: if cmd == "hello": return self.process_hello(data) elif cmd == "register": return self.process_register(data) elif cmd == "unregister": return self.process_unregister(data) elif cmd == "ack": return self.process_ack(data) else: self.sendClose() finally: # Done processing, start idle. self.resetTimeout()