def handle_data(self, addr, data): (host, port) = addr self._logger.debug("{}:{}/UDP<<".format(host, port)) if self._session and self._session.is_stun_message(data): self._logger.debug("Handling using turn session") response = STUNMessage.from_bytes(data) self._session.handle_response(response) else: self._logger.debug("Emitting data, len: {}".format(len(data))) self._data_cb((host, port), data)
""" Write directly to the TURN relay :param data: :return: """ self.writeDatagram(data, self.turn_address, self.turn_port) def sendto(self, data, address): if address in self.bindings.values(): self._logger.debug("Sending to {} through relay".format(address)) self._session.send_to(data, address) else: host, port = address self._logger.debug("Sending to {} directly".format(address)) self.writeDatagram(data, QHostAddress(host), port) def handle_data(self, (host, port), data): self._logger.debug("{}:{}/UDP<<".format(host, port)) if self._session and self._session.is_stun_message(data): self._logger.debug("Handling using turn session") response = STUNMessage.from_bytes(data) self._session.handle_response(response) else: self._logger.debug("Emitting data, len: {}".format(len(data))) self._data_cb((host, port), data) def _readyRead(self): while self.hasPendingDatagrams(): data, host, port = self.readDatagram(self.pendingDatagramSize()) self.handle_data((host.toString(), int(port)), data)