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
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")
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" )
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`'
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()
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)
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()
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