コード例 #1
0
    def __init__(self, address, *args, address_size=4, counter_size=3, meta=None, buffer_size=10, **kwargs):
        self.meta = meta
        self.address = address
        self.address_size = address_size
        self.promiscuous_address = bytes(address_size)

        self.address_scheme = attr("address", address_size, type="b")
        self.id_address_scheme = attr("sender_address", address_size, type="b")
        self.counter_scheme = attr("counter", counter_size, type=INT)

        self.orchestrator = None
        self.scheduler = None
        self.channel_id = None

        self.immediate_send = None
        self.immediate_recv = None

        self.counter = False
        self.identified = False
        self.ack = False

        self.counter_send_index = None
        self.counter_recv_index = None

        self.packet_id = None
        self.ack_request_index = None

        self.ack_await_index = None
        self.send_ack = RingBuffer(buffer_size)
        self.next_ack_id = None
        self.ack_callback = None
コード例 #2
0
    def __init__(self, address, routing_table, address_size=4, meta=None, buffer_size=10):
        super().__init__(address, address_size=address_size, meta=meta, buffer_size=buffer_size)

        self.routing_table = routing_table
        self.channel = None

        self.headers = (attr("intermediate_address", self.address_size, type="b"),
                        attr("dest_address", self.address_size, type="b"),
                        attr("origin_address", self.address_size, type="b")
                        )
コード例 #3
0
    def __init__(self,
                 address,
                 state,
                 default_data,
                 flagged_attributes,
                 i_min,
                 i_max,
                 is_consistent_callback,
                 update,
                 *args,
                 redundancy_const=1,
                 versioning=True,
                 version_id_size=2,
                 meta=None,
                 buffer_size=10,
                 **kwargs):
        super().__init__(address,
                         *args,
                         meta=meta,
                         buffer_size=buffer_size,
                         **kwargs)

        self.last_flagged_data = None

        self.state = state  # State supplied which can be modified (not reassigned)
        self.default_data = default_data  # The default packet data sent

        self.flagged_attributes = flagged_attributes  # The parts of the packet which are observed for change
        self.I_MIN = i_min / 1000
        self.I_MAX = i_max / 1000
        self.REDUNDANCY_CONST = redundancy_const

        self.is_consistent_callback = is_consistent_callback  # Callback to test data consistency
        self.update = update  # Callback to update the default data

        self.interval_length = None
        self.transmit_time = None
        self.counter = None

        self.versioning = versioning
        self.version_id_size = version_id_size
        self.version_id_scheme = attr("version_id", version_id_size, type=INT)
        self.version_id = 0

        self.interval_alarm = None
        self.transmit_alarm = None

        self.cancel_flag = threading.Event()
        self.uplink_arg = None
        self.downlink_arg = None

        self.channel = None
コード例 #4
0
    def __init__(self, target, enc_key, dec_key, *args, **kwargs):
        super().__init__(target, *args, **kwargs)

        self.target = target

        self.enc_key = enc_key
        self.dec_key = dec_key
        self.digest_mode = sha256
        # TODO: configure mac size according to digest mode
        self.mac_size = 32

        self.hmac_attr_scheme = attr("hmac", self.mac_size)
        self.encoding_scheme = None
コード例 #5
0
    def __init__(self, target, enc_key, dec_key, *args, **kwargs):
        super().__init__(target, *args, **kwargs)

        # Account for addition of initialization vector
        self.target = target
        self.enc_key = enc_key
        self.dec_key = dec_key

        self.iv_layer = max(target)

        self.encoding_scheme = None
        self.decoding_scheme = None

        self.ctr_scheme = attr("ctr", 16)
コード例 #6
0
    def init_connection(
        self,
        socket,
        channel_id,
        serializer,
        orchestrator,
        scheduler,
        *args,
        identified=False,
        ack=False,
        ack_callback=None,
        counter=False,
        channel=None,
        mode=None,
        schedule_callback=None,
        recv_buffer_size=None,
        **kwargs
    ):
        self.orchestrator = orchestrator
        self.scheduler = scheduler
        self.channel_id = channel_id

        self.counter = counter
        self.identified = identified
        self.ack = ack

        if counter:
            self.identified = True
            serializer.add_layer(headers=[self.counter_scheme])
            self.counter_send_index = {0: 0}
            self.counter_recv_index = {0: 0}

        if ack:
            self.identified = True

            self.ack_await_index = {}
            self.ack_callback = ack_callback

            ack_type_scheme = attr("ack_type", 1, type=INT)
            packet_id_scheme = attr("packet_id", 1, type=INT)
            id_await_scheme = attr("ack_await_id", 1, type=INT)

            serializer.add_layer(headers=[packet_id_scheme, ack_type_scheme, id_await_scheme])

            # Generate starting id value
            self.packet_id = int.from_bytes(os.urandom(1), "big")

        if ack | counter | identified:
            serializer.add_layer(headers=[self.id_address_scheme])

        immediate_transmit = self.scheduler.set_connection_parameters(
            socket,
            channel_id,
            *args,
            mode=mode,
            schedule_callback=schedule_callback,
            recv_buffer_size=recv_buffer_size,
            **kwargs
        )

        (self.immediate_send, self.immediate_recv) = immediate_transmit if immediate_transmit else (None, None)