Exemple #1
0
 def test_number():
     assert Component.from_segment(13) == b'!\x01\r'
     assert Component.from_byte_offset(13) == b'\x22\x01\r'
     assert Component.from_sequence_num(13) == b'%\x01\r'
     assert Component.from_version(13) == b'#\x01\r'
     timeval = 15686790223318112
     comp = Component.from_timestamp(timeval)
     assert Component.get_type(comp) == 36
     assert Component.get_value(comp) == b'\x00\x37\xbb\x0d\x76\xed\x4c\x60'
     assert Component.to_number(comp) == timeval
Exemple #2
0
 def test_meta_info():
     name = '/local/ndn/prefix/37=%00'
     meta_info = MetaInfo()
     meta_info.content_type = ContentType.BLOB
     meta_info.freshness_period = 1000
     meta_info.final_block_id = Component.from_sequence_num(2)
     data = make_data(name, meta_info, signer=DigestSha256Signer())
     assert (data ==
             b"\x06\x4e\x07\x17\x08\x05local\x08\x03ndn\x08\x06prefix\x25\x01\x00"
             b"\x14\x0c\x18\x01\x00\x19\x02\x03\xe8\x1a\x03\x25\x01\x02"
             b"\x16\x03\x1b\x01\x00"
             b"\x17 \x03\xb8,\x18\xffMw\x84\x86\xa5a\x94e\xcc\xdaQ\x15\xb7\xfb\x19\xab\x9d1lw\'\xdf\xac\x03#\xcad")
Exemple #3
0
 def test_meta_info():
     name = '/local/ndn/prefix/37=%00'
     meta_info = MetaInfo()
     meta_info.content_type = ContentType.BLOB
     meta_info.freshness_period = 1000
     meta_info.final_block_id = Component.from_sequence_num(2)
     data = make_data(name, meta_info, signer=DigestSha256Signer())
     assert (
         data ==
         b"\x06\x4e\x07\x17\x08\x05local\x08\x03ndn\x08\x06prefix\x25\x01\x00"
         b"\x14\x0c\x18\x01\x00\x19\x02\x03\xe8\x1a\x03\x3a\x01\x02"
         b"\x16\x03\x1b\x01\x00"
         b"\x17 \x0f^\xa1\x0c\xa7\xf5Fb\xf0\x9cOT\xe0FeC\x8f92\x04\x9d\xabP\x80o\'\x94\xaa={hQ"
     )
Exemple #4
0
    def test_number():
        assert Component.from_segment(13) == b'!\x01\r'
        assert Component.from_byte_offset(13) == b'\x22\x01\r'
        assert Component.from_sequence_num(13) == b'%\x01\r'
        assert Component.from_version(13) == b'#\x01\r'
        timeval = 15686790223318112
        comp = Component.from_timestamp(timeval)
        assert Component.get_type(comp) == 36
        assert Component.get_value(comp) == b'\x00\x37\xbb\x0d\x76\xed\x4c\x60'
        assert Component.to_number(comp) == timeval

        assert Component.to_str(Component.from_segment(13)) == 'seg=13'
        assert Component.to_str(Component.from_byte_offset(13)) == 'off=13'
        assert Component.to_str(Component.from_sequence_num(13)) == 'seq=13'
        assert Component.to_str(Component.from_version(13)) == 'v=13'
        assert Component.to_str(
            Component.from_timestamp(timeval)) == 't=15686790223318112'

        assert Component.from_str('seg=13') == b'!\x01\r'
        assert Component.from_str('off=13') == b'\x22\x01\r'
        assert Component.from_str('seq=13') == b'%\x01\r'
        assert Component.from_str('v=13') == b'#\x01\r'
        assert Component.from_str(
            't=15686790223318112') == b'$\x08\x007\xbb\rv\xedL`'
Exemple #5
0
    def test_meta_info():
        data = (b"\x06\x4e\x07\x17\x08\x05local\x08\x03ndn\x08\x06prefix\x25\x01\x00"
                b"\x14\x0c\x18\x01\x00\x19\x02\x03\xe8\x1a\x03\x25\x01\x02"
                b"\x16\x03\x1b\x01\x00"
                b"\x17 \x03\xb8,\x18\xffMw\x84\x86\xa5a\x94e\xcc\xdaQ\x15\xb7\xfb\x19\xab\x9d1lw\'\xdf\xac\x03#\xcad")
        name, meta_info, content, sig = parse_data(data)
        assert name == Name.from_str("/local/ndn/prefix/37=%00")
        assert meta_info.content_type == ContentType.BLOB
        assert meta_info.freshness_period == 1000
        assert meta_info.final_block_id == Component.from_sequence_num(2)
        assert sig.signature_info.signature_type == SignatureType.DIGEST_SHA256
        assert content is None

        algo = hashlib.sha256()
        for part in sig.signature_covered_part:
            algo.update(part)
        assert sig.signature_value_buf == algo.digest()
Exemple #6
0
 async def face_event(self):
     last_seq = -1
     name_prefix = Name.from_str('/localhost/nfd/faces/events')
     while True:
         if last_seq >= 0:
             name = name_prefix + [
                 Component.from_sequence_num(last_seq + 1)
             ]
             init = False
         else:
             name = name_prefix
             init = True
         logging.info("Face event notification stream %s",
                      Name.to_str(name))
         try:
             data_name, _, content = await self.app.express_interest(
                 name,
                 must_be_fresh=init,
                 can_be_prefix=init,
                 lifetime=60000)
             last_seq = Component.to_number(data_name[-1])
             timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
             if not content:
                 print('ERROR: Face event is empty')
             elif content[0] == 0x65:
                 msg = parse_response(content)
                 print('Query failed with response', msg['status_code'],
                       msg['status_text'])
             else:
                 dic = self.face_event_to_dict(content)
                 dic['seq'] = str(last_seq)
                 dic['time'] = timestamp
                 await self.emit('face event', dic)
                 self.event_list.append(dic)
         except (InterestCanceled, NetworkError):
             break
         except InterestTimeout:
             last_seq = -1
         except InterestNack as e:
             print(f'Face events nacked with reason={e.reason}')
             last_seq = -1
         except ValidationFailure:
             print('Face events failed to validate')
             last_seq = -1
         await asyncio.sleep(0.1)
Exemple #7
0
    def test_meta_info():
        data = (
            b"\x06\x4e\x07\x17\x08\x05local\x08\x03ndn\x08\x06prefix\x25\x01\x00"
            b"\x14\x0c\x18\x01\x00\x19\x02\x03\xe8\x1a\x03\x3a\x01\x02"
            b"\x16\x03\x1b\x01\x00"
            b"\x17 \x0f^\xa1\x0c\xa7\xf5Fb\xf0\x9cOT\xe0FeC\x8f92\x04\x9d\xabP\x80o\'\x94\xaa={hQ"
        )
        name, meta_info, content, sig = parse_data(data)
        assert name == Name.from_str("/local/ndn/prefix/37=%00")
        assert meta_info.content_type == ContentType.BLOB
        assert meta_info.freshness_period == 1000
        assert meta_info.final_block_id == Component.from_sequence_num(2)
        assert sig.signature_info.signature_type == SignatureType.DIGEST_SHA256
        assert content is None

        algo = hashlib.sha256()
        for part in sig.signature_covered_part:
            algo.update(part)
        assert sig.signature_value_buf == algo.digest()
Exemple #8
0
    def _prepare_data(self, file_path: str, name_at_repo) -> int:
        """
        Shard file into data packets.
        :param file_path: Local FS path to file to insert
        :param name_at_repo: Name used to store file at repo
        :return: Number of packets required to send this file
        """
        with open(file_path, 'rb') as binary_file:
            b_array = bytearray(binary_file.read())
        if len(b_array) == 0:
            logging.warning("File is empty")
            return 0

        num_packets = int((len(b_array) - 1) / MAX_BYTES_IN_DATA_PACKET + 1)
        logging.info(f'There are {num_packets} packets in total')
        seq = 0
        for i in range(0, len(b_array), MAX_BYTES_IN_DATA_PACKET):
            content = b_array[i : min(i + MAX_BYTES_IN_DATA_PACKET, len(b_array))]
            name = name_at_repo[:]
            name.append(str(seq))
            packet = self.app.prepare_data(name, content, final_block_id=Component.from_sequence_num(num_packets - 1))
            self.name_str_to_data[Name.to_str(name)] = packet
            seq += 1
        return num_packets