def test_encode_func(): name = Name.from_str('/a/b/c/d') buf = bytearray(20) with pytest.raises(IndexError): Name.encode(name, buf, 10) assert Name.encode(name, buf, 6) == b'\x00\x00\x00\x00\x00\x00\x07\x0c\x08\x01a\x08\x01b\x08\x01c\x08\x01d' assert Name.encode(name, buf) == b'\x07\x0c\x08\x01a\x08\x01b\x08\x01c\x08\x01d\x08\x01c\x08\x01d' assert Name.encode([]) == b'\x07\x00'
def test_default(): name = Name.from_str('/local/ndn/prefix') data = make_data(name, MetaInfo(), signer=DigestSha256Signer()) assert (data == b"\x06\x42\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix" b"\x14\x03\x18\x01\x00" b"\x16\x03\x1b\x01\x00" b"\x17 \x7f1\xe4\t\xc5z/\x1d\r\xdaVh8\xfd\xd9\x94" b"\xd8\'S\x13[\xd7\x15\xa5\x9d%^\x80\xf2\xab\xf0\xb5") name = Name.encode(name) data = make_data(name, MetaInfo(), b'01020304', signer=DigestSha256Signer()) assert (data == b'\x06L\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix' b'\x14\x03\x18\x01\x00' b'\x15\x0801020304' b'\x16\x03\x1b\x01\x00' b'\x17 \x94\xe9\xda\x91\x1a\x11\xfft\x02i:G\x0cO\xdd!' b'\xe0\xc7\xb6\xfd\x8f\x9cn\xc5\x93{\x93\x04\xe0\xdf\xa6S') name = '/local/ndn/prefix' meta_info = MetaInfo() data = make_data(name, meta_info) assert (data == b"\x06\x1b\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix" b"\x14\x03\x18\x01\x00") name = '/E' meta_info = MetaInfo() meta_info.content_type = None data = make_data(name, meta_info, b'', signer=DigestSha256Signer()) assert data == bytes.fromhex("0630 0703080145" "1400 1500 16031b0100" "1720f965ee682c6973c3cbaa7b69e4c7063680f83be93a46be2ccc98686134354b66")
def on_sd_ctl_interest(name: FormalName, param: InterestParam, app_param: Optional[BinaryStr]): """ OnInterest callback when device want to query the existing services in the system :param name: Interest packet name :param param: Interest parameters :app_param: Interest application paramters TODO:Verifying the signature """ logging.info("Service query from device") if app_param is None: logging.error("Malformed Interest") return interested_ids = {sid for sid in app_param} result = b'' cur_time = self.get_time_now_ms() for service in self.service_list.services: if service.service_id not in interested_ids: continue if service.exp_time > cur_time: result += Name.encode(service.service_name) result += struct.pack("i", service.exp_time - cur_time) if len(result) > 0: self.app.put_data(name, result, freshness_period=3000, identity=self.system_prefix) logging.debug("Replied service data back to the device") else: logging.debug( "Don't have services needed by the device, won't reply")
def test_default(): name = Name.from_str('/local/ndn/prefix') interest = make_interest(name, InterestParam()) assert interest == b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0' name = Name.encode(name) interest = make_interest(name, InterestParam()) assert interest == b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0' name = '/local/ndn/prefix' interest = make_interest(name, InterestParam()) assert interest == b'\x05\x1a\x07\x14\x08\x05local\x08\x03ndn\x08\x06prefix\x0c\x02\x0f\xa0'
def test_basic_encode(): uri = ('/Emid/25042=P3//./%1C%9F' '/sha256digest=0415e3624a151850ac686c84f155f29808c0dd73819aa4a4c20be73a4d8a874c') name = Name.from_str(uri) assert len(name) == 6 assert name[0] == Component.from_bytes(b'Emid') assert name[1] == b'\xfd\x61\xd2\x02\x50\x33' assert name[2] == Component.from_bytes(b'') assert name[3] == Component.from_bytes(b'.') assert name[4] == Component.from_bytes(b'\x1C\x9F') assert Component.get_type(name[5]) == Component.TYPE_IMPLICIT_SHA256 assert Name.encoded_length(name) == 57 assert (Name.encode(name) == b'\x07\x37\x08\x04Emid\xfda\xd2\x02P3\x08\x00\x08\x01.\x08\x02\x1c\x9f' b'\x01 \x04\x15\xe3bJ\x15\x18P\xachl\x84\xf1U\xf2\x98\x08\xc0\xdds\x81' b'\x9a\xa4\xa4\xc2\x0b\xe7:M\x8a\x87L')
def on_sd_ctl_interest(name: FormalName, param: InterestParam, app_param: Optional[BinaryStr]): logging.info("SD : on interest") if app_param is None: logging.error("Malformed Interest") return interested_ids = {sid for sid in app_param} result = b'' cur_time = self.get_time_now_ms() for sname, exp_time in self.real_service_list.items(): sid = sname[2][2] if sid in interested_ids and exp_time > cur_time: result += Name.encode(sname) result += struct.pack("i", exp_time - cur_time) self.app.put_data(name, result, freshness_period=3000, identity=self.system_prefix) logging.debug("PutData") logging.debug(name)