Example #1
0
    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'
Example #2
0
    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")
Example #3
0
        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")
Example #4
0
    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'
Example #5
0
    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')
Example #6
0
        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)