async def _receive(self, typ: int, data: BinaryStr): """ Pipeline when a packet is received. :param typ: the Type. :param data: the Value of the packet with TL. """ logging.debug('Packet received %s, %s' % (typ, bytes(data))) if typ == LpTypeNumber.LP_PACKET: try: nack_reason, fragment = parse_lp_packet(data, with_tl=True) except (DecodeError, TypeError, ValueError, struct.error): logging.warning('Unable to decode received packet') return data = fragment typ, _ = parse_tl_num(data) else: nack_reason = None if nack_reason is not None: try: name, _, _, _ = parse_interest(data, with_tl=True) except (DecodeError, TypeError, ValueError, struct.error): logging.warning('Unable to decode the fragment of LpPacket') return logging.debug('NetworkNack received %s, reason=%s' % (Name.to_str(name), nack_reason)) self._on_nack(name, nack_reason) else: if typ == TypeNumber.INTEREST: try: name, param, app_param, sig = parse_interest(data, with_tl=True) except (DecodeError, TypeError, ValueError, struct.error): logging.warning('Unable to decode received packet') return logging.debug('Interest received %s' % Name.to_str(name)) await self._on_interest(name, param, app_param, sig, raw_packet=data) elif typ == TypeNumber.DATA: try: name, meta_info, content, sig = parse_data(data, with_tl=True) except (DecodeError, TypeError, ValueError, struct.error): logging.warning('Unable to decode received packet') return logging.debug('Data received %s' % Name.to_str(name)) await self._on_data(name, meta_info, content, sig, raw_packet=data) else: logging.warning('Unable to decode received packet')
def test_signed_interest_2(): interest = (b'\x05\x6b\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix' b'\x02 \x40\x77\xa5\x70\x49\xd8\x38\x48\xb5\x25\xa4\x23\xab\x97\x8e\x64' b'\x80\xf9\x6d\x5c\xa3\x8a\x80\xa5\xe2\xd6\xe2\x50\xa6\x17\xbe\x4f' b'\x0a\x04\x6c\x21\x11\x66\x0c\x02\x0f\xa0' b'\x24\x00' b'\x2c\x03\x1b\x01\x00' b'\x2e \x09\x4e\x00\x9d\x74\x59\x82\x5c\xa0\x2d\xaa\xb7\xad\x60\x48\x30' b'\x39\x19\xd8\x99\x80\x25\xbe\xff\xa6\xf9\x96\x79\xd6\x5e\x9f\x62') name, params, app_params, sig = parse_interest(interest) assert name == Name.from_str("/local/ndn/prefix" "/params-sha256=4077a57049d83848b525a423ab978e6480f96d5ca38a80a5e2d6e250a617be4f") assert params.nonce == 0x6c211166 assert app_params == b'' assert sig.signature_info.signature_type == SignatureType.DIGEST_SHA256 algo = hashlib.sha256() for part in sig.digest_covered_part: algo.update(part) assert sig.digest_value_buf == algo.digest() algo = hashlib.sha256() for part in sig.signature_covered_part: algo.update(part) assert sig.signature_value_buf == algo.digest()
def test_signed_interest_1(): interest = (b'\x05\x6f\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix' b'\x02 \x8e\x6e\x36\xd7\xea\xbc\xde\x43\x75\x61\x40\xc9\x0b\xda\x09\xd5' b'\x00\xd2\xa5\x77\xf2\xf5\x33\xb5\x69\xf0\x44\x1d\xf0\xa7\xf9\xe2' b'\x0a\x04\x6c\x21\x11\x66\x0c\x02\x0f\xa0' b'\x24\x04\x01\x02\x03\x04' b'\x2c\x03\x1b\x01\x00' b'\x2e \xea\xa8\xf0\x99\x08\x63\x78\x95\x1d\xe0\x5f\xf1\xde\xbb\xc1\x18' b'\xb5\x21\x8b\x2f\xca\xa0\xb5\x1d\x18\xfa\xbc\x29\xf5\x4d\x58\xff') name, params, app_params, sig = parse_interest(interest) assert name == Name.from_str("/local/ndn/prefix" "/params-sha256=8e6e36d7eabcde43756140c90bda09d500d2a577f2f533b569f0441df0a7f9e2") assert params.nonce == 0x6c211166 assert app_params == b'\x01\x02\x03\x04' assert sig.signature_info.signature_type == SignatureType.DIGEST_SHA256 algo = hashlib.sha256() for part in sig.digest_covered_part: algo.update(part) assert sig.digest_value_buf == algo.digest() algo = hashlib.sha256() for part in sig.signature_covered_part: algo.update(part) assert sig.signature_value_buf == algo.digest()
def test_app_param(): interest = ( b'\x05\x42\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix' b'\x02 \x47\x75\x6f\x21\xfe\x0e\xe2\x65\x14\x9a\xa2\xbe\x3c\x63\xc5\x38' b'\xa7\x23\x78\xe9\xb0\xa5\x8b\x39\xc5\x91\x63\x67\xd3\x5b\xda\x10' b'\x0c\x02\x0f\xa0\x24\x04\x01\x02\x03\x04') name, params, app_params, sig = parse_interest(interest) assert name == Name.from_str( '/local/ndn/prefix' '/params-sha256=47756f21fe0ee265149aa2be3c63c538a72378e9b0a58b39c5916367d35bda10' ) assert app_params == b'\x01\x02\x03\x04' assert not params.can_be_prefix assert not params.must_be_fresh assert params.nonce is None assert params.lifetime == 4000 assert params.hop_limit is None assert sig.signature_info is None algo = hashlib.sha256() algo.update(b'\x24\x04\x01\x02\x03\x04') assert Component.get_value(name[-1]) == algo.digest() algo = hashlib.sha256() for part in sig.digest_covered_part: algo.update(part) assert sig.digest_value_buf == algo.digest()
def test_throws(): with pytest.raises(IndexError): parse_interest(b'\x05\x6b\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix', True) with pytest.raises(IndexError): parse_interest(b'\x05\x6b\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix', True) with pytest.raises(ValueError): parse_interest(b'\x06\x6b\x07\x36\x08\x05local\x08\x03ndn\x08\x06prefix', True) with pytest.raises(DecodeError): parse_interest(b'\x01\x00', False)
def test1(): lp_packet = ( b"\x64\x32\xfd\x03\x20\x05\xfd\x03\x21\x01\x96" b"\x50\x27\x05\x25\x07\x1f\x08\tlocalhost\x08\x03nfd\x08\x05faces\x08\x06events" b"\x21\x00\x12\x00") nack_reason, interest = parse_network_nack(lp_packet, True) assert nack_reason == NackReason.NO_ROUTE name, param, _, _ = parse_interest(interest) assert name == Name.from_str("/localhost/nfd/faces/events") assert param.must_be_fresh assert param.can_be_prefix
def test1(): lp_packet = ( b'\xfd\x03 \x05\xfd\x03!\x01\x96' b'P\x43\x05)\x07\x1f\x08\tlocalhost\x08\x03nfd\x08\x05faces\x08\x06events' b'\x21\x00\x12\x00\x0c\x02\x03\xe8') nack_reason, interest = parse_network_nack(lp_packet, False) assert nack_reason == NackReason.NO_ROUTE name, param, _, _ = parse_interest(interest) assert name == Name.from_str("/localhost/nfd/faces/events") assert param.must_be_fresh assert param.can_be_prefix assert param.lifetime == 1000
def test_default(): interest = b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0' name, params, app_params, sig = parse_interest(interest) assert name == Name.from_str('/local/ndn/prefix') assert app_params is None assert not params.can_be_prefix assert not params.must_be_fresh assert params.nonce is None assert params.lifetime == 4000 assert params.hop_limit is None assert sig.signature_info is None assert sig.signature_value_buf is None assert sig.digest_value_buf is None
def test_params(): interest = (b'\x05\x26\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix' b'\x21\x00\x12\x00\x0a\x04\x00\x00\x00\x00\x0c\x01\x0a\x22\x01\x01') name, params, app_params, sig = parse_interest(interest) assert name == Name.from_str('/local/ndn/prefix') assert app_params is None assert params.can_be_prefix assert params.must_be_fresh assert params.nonce == 0 assert params.lifetime == 10 assert params.hop_limit == 1 assert sig.signature_info is None assert sig.signature_value_buf is None assert sig.digest_value_buf is None