Example #1
0
    def recv_request(self) -> Tuple[IncomingPacketBundle, Replier]:
        """
        Receive incoming messages

        :return: The incoming packet data and a replier object
        """
        data, sender = self.listen_socket.recvfrom(65536)

        # Create the message-ID
        message_counter = increase_message_counter()
        message_id = '#{:06X}'.format(message_counter)

        logger.log(DEBUG_PACKETS, "{message_id}: Received message from {client_addr} port {port} on {interface}".format(
            message_id=message_id,
            client_addr=sender[0],
            port=sender[1],
            interface=self.interface_name))

        interface_id_option = InterfaceIdOption(interface_id=self.interface_id)

        packet_bundle = IncomingPacketBundle(message_id=message_id,
                                             data=data,
                                             source_address=IPv6Address(sender[0].split('%')[0]),
                                             link_address=self.global_address,
                                             interface_index=self.interface_index,
                                             received_over_multicast=self.listen_address.is_multicast,
                                             received_over_tcp=False,
                                             marks=self.marks,
                                             relay_options=[interface_id_option])

        replier = UDPReplier(self.reply_socket)

        return packet_bundle, replier
Example #2
0
    def packet_from_buffer(self):
        """
        Create a packet and replier from the data in the buffer

        :return: The incoming packet data and a replier object
        """

        # Copy the message and remove it from the buffer
        message_length = unpack_from('!H', self.buffer)[0]
        data = self.buffer[2:2 + message_length]
        self.buffer = self.buffer[2 + message_length:]

        # Create the message-ID
        message_counter = increase_message_counter()
        message_id = '#{:06X}'.format(message_counter)

        logger.log(DEBUG_PACKETS, "{message_id}: Received message from {client_addr} port {port}".format(
            message_id=message_id,
            client_addr=str(self.client_address),
            port=self.client_port))

        interface_id_option = InterfaceIdOption(interface_id=self.interface_id)

        packet_bundle = IncomingPacketBundle(message_id=message_id,
                                             data=data,
                                             source_address=self.client_address,
                                             link_address=self.global_address,
                                             interface_index=self.interface_index,
                                             received_over_multicast=False,
                                             received_over_tcp=True,
                                             marks=self.marks,
                                             relay_options=[interface_id_option])

        # Create a replier
        replier = TCPReplier(self.connected_socket, self.write_lock)

        return packet_bundle, replier
Example #3
0
    def recv_request(self) -> Tuple[IncomingPacketBundle, Replier]:
        """
        Receive incoming messages

        :return: The incoming packet data and a replier object
        """
        data, sender = self.listen_socket.recvfrom(65536)

        # Create the message-ID
        message_counter = increase_message_counter()
        message_id = "#{:06X}".format(message_counter)

        logger.log(
            DEBUG_PACKETS,
            "{message_id}: Received message from {client_addr} port {port} on {interface}".format(
                message_id=message_id, client_addr=sender[0], port=sender[1], interface=self.interface_name
            ),
        )

        interface_id_option = InterfaceIdOption(interface_id=self.interface_id)

        packet_bundle = IncomingPacketBundle(
            message_id=message_id,
            data=data,
            source_address=IPv6Address(sender[0].split("%")[0]),
            link_address=self.global_address,
            interface_index=self.interface_index,
            received_over_multicast=self.listen_address.is_multicast,
            received_over_tcp=False,
            marks=self.marks,
            relay_options=[interface_id_option],
        )

        replier = UDPReplier(self.reply_socket)

        return packet_bundle, replier