Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions examples/appv2/basic_packets/consumer.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
# limitations under the License.
# -----------------------------------------------------------------------------
import logging
from ndn import utils, appv2, types
from ndn import utils, appv2_2, types
from ndn import encoding as enc


Expand All @@ -26,7 +26,7 @@
style='{')


app = appv2.NDNApp()
app = appv2_2.NDNApp()


async def main():
Expand All @@ -36,7 +36,7 @@ async def main():
print(f'Sending Interest {enc.Name.to_str(name)}, {enc.InterestParam(must_be_fresh=True, lifetime=6000)}')
# TODO: Write a better validator
data_name, content, pkt_context = await app.express(
name, validator=appv2.pass_all,
name, validator=appv2_2.pass_all,
must_be_fresh=True, can_be_prefix=False, lifetime=6000)

print(f'Received Data Name: {enc.Name.to_str(data_name)}')
Expand Down
6 changes: 3 additions & 3 deletions examples/appv2/basic_packets/producer.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
# limitations under the License.
# -----------------------------------------------------------------------------
import logging
from ndn import appv2
from ndn import appv2_2
from ndn import encoding as enc


Expand All @@ -26,13 +26,13 @@
style='{')


app = appv2.NDNApp()
app = appv2_2.NDNApp()
keychain = app.default_keychain()


@app.route('/example/testApp')
def on_interest(name: enc.FormalName, _app_param: enc.BinaryStr | None,
reply: appv2.ReplyFunc, context: appv2.PktContext):
reply: appv2_2.ReplyFunc, context: appv2_2.PktContext):
print(f'>> I: {enc.Name.to_str(name)}, {context["int_param"]}')
content = b"Hello, world!"
reply(app.make_data(name, content=content, signer=keychain.get_signer({}),
Expand Down
8 changes: 4 additions & 4 deletions examples/appv2/forwarding_hint/consumer.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
# limitations under the License.
# -----------------------------------------------------------------------------
import logging
from ndn import utils, appv2, types
from ndn import utils, appv2_2, types
from ndn import encoding as enc


Expand All @@ -26,21 +26,21 @@
style='{')


app = appv2.NDNApp()
app = appv2_2.NDNApp()


async def express_int(name, fw_hint):
try:
if fw_hint is None:
print(f'Sending Interest {enc.Name.to_str(name)}, {enc.InterestParam(must_be_fresh=True, lifetime=6000)}')
data_name, content, pkt_context = await app.express(
name, validator=appv2.pass_all,
name, validator=appv2_2.pass_all,
must_be_fresh=True, can_be_prefix=False, lifetime=6000)
else:
print(f'Sending Interest {enc.Name.to_str(name)}, '
f'{enc.InterestParam(must_be_fresh=True, lifetime=6000, forwarding_hint=[fw_hint])}')
data_name, content, pkt_context = await app.express(
name, validator=appv2.pass_all,
name, validator=appv2_2.pass_all,
must_be_fresh=True, can_be_prefix=False, lifetime=6000, forwarding_hint=[fw_hint])

print(f'Received Data Name: {enc.Name.to_str(data_name)}')
Expand Down
8 changes: 4 additions & 4 deletions examples/appv2/forwarding_hint/producer.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import logging
from ndn import appv2
from ndn import appv2_2
from ndn import encoding as enc


Expand All @@ -9,13 +9,13 @@
style='{')


app = appv2.NDNApp()
app = appv2_2.NDNApp()
keychain = app.default_keychain()


@app.route('/repo/command')
def on_cmd(name: enc.FormalName, _app_param: enc.BinaryStr | None,
reply: appv2.ReplyFunc, context: appv2.PktContext):
reply: appv2_2.ReplyFunc, context: appv2_2.PktContext):
print(f'>> I: {enc.Name.to_str(name)}, {context["int_param"]}')
content = b"Hello, world!"
reply(app.make_data(name, content=content, signer=keychain.get_signer({}),
Expand All @@ -30,7 +30,7 @@ def on_cmd(name: enc.FormalName, _app_param: enc.BinaryStr | None,
# So we can dispatch by forwarding hints.
@app.route('/')
def on_fwd_hint(name: enc.FormalName, app_param: enc.BinaryStr | None,
reply: appv2.ReplyFunc, context: appv2.PktContext):
reply: appv2_2.ReplyFunc, context: appv2_2.PktContext):
fwd_hints = context["int_param"].forwarding_hint
if fwd_hints:
fh_name = fwd_hints[0]
Expand Down
8 changes: 4 additions & 4 deletions examples/appv2/keychain_cert/fetch_certificate.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
# -----------------------------------------------------------------------------
import sys
import logging
from ndn import appv2, types
from ndn import appv2_2, types
from ndn import encoding as enc
from ndn.app_support import security_v2 as secv2
from ndn.app_support import security_v2_2 as secv2


logging.basicConfig(format='[{asctime}]{levelname}:{message}',
Expand All @@ -32,7 +32,7 @@
logging.fatal('Please input a KEY or CERT name')
exit(0)

app = appv2.NDNApp()
app = appv2_2.NDNApp()


async def main():
Expand All @@ -43,7 +43,7 @@ async def main():
f'{enc.InterestParam(must_be_fresh=True, can_be_prefix=can_be_prefix, lifetime=6000)}')
# TODO: Write a better validator
data_name, content, pkt_context = await app.express(
name, validator=appv2.pass_all,
name, validator=appv2_2.pass_all,
must_be_fresh=True, can_be_prefix=can_be_prefix, lifetime=6000)

print(f'Received Data Name: {enc.Name.to_str(data_name)}')
Expand Down
4 changes: 2 additions & 2 deletions examples/appv2/keychain_cert/keychain_register.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
# limitations under the License.
# -----------------------------------------------------------------------------
import logging
from ndn import appv2
from ndn import appv2_2
from ndn.app_support.keychain_register import attach_keychain_register


Expand All @@ -26,7 +26,7 @@
style='{')


app = appv2.NDNApp()
app = appv2_2.NDNApp()
keychain = app.default_keychain()
attach_keychain_register(keychain, app)

Expand Down
6 changes: 3 additions & 3 deletions examples/dpdk_experimental/udp_consumer.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
# -----------------------------------------------------------------------------
import logging
import sys
from ndn import utils, appv2, types
from ndn import utils, appv2_2, types
from ndn import encoding as enc
from ndn.transport.ndn_dpdk import NdnDpdkUdpFace, DpdkRegisterer

Expand All @@ -42,7 +42,7 @@
face = NdnDpdkUdpFace(gql_url, self_addr, self_port, dpdk_addr, dpdk_port)
registerer = DpdkRegisterer(face)

app = appv2.NDNApp(face=face, registerer=registerer)
app = appv2_2.NDNApp(face=face, registerer=registerer)
keychain = app.default_keychain()


Expand All @@ -53,7 +53,7 @@ async def main():
print(f'Sending Interest {enc.Name.to_str(name)}, {enc.InterestParam(must_be_fresh=True, lifetime=6000)}')
# TODO: Write a better validator
data_name, content, pkt_context = await app.express(
name, validator=appv2.pass_all,
name, validator=appv2_2.pass_all,
must_be_fresh=True, can_be_prefix=False, lifetime=6000)

print(f'Received Data Name: {enc.Name.to_str(data_name)}')
Expand Down
6 changes: 3 additions & 3 deletions examples/dpdk_experimental/udp_producer.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
# -----------------------------------------------------------------------------
import logging
import sys
from ndn import appv2
from ndn import appv2_2
from ndn import encoding as enc
from ndn.transport.ndn_dpdk import NdnDpdkUdpFace, DpdkRegisterer

Expand All @@ -42,13 +42,13 @@
face = NdnDpdkUdpFace(gql_url, self_addr, self_port, dpdk_addr, dpdk_port)
registerer = DpdkRegisterer(face)

app = appv2.NDNApp(face=face, registerer=registerer)
app = appv2_2.NDNApp(face=face, registerer=registerer)
keychain = app.default_keychain()


@app.route('/example/testApp')
def on_interest(name: enc.FormalName, _app_param: enc.BinaryStr | None,
reply: appv2.ReplyFunc, context: appv2.PktContext):
reply: appv2_2.ReplyFunc, context: appv2_2.PktContext):
print(f'>> I: {enc.Name.to_str(name)}, {context["int_param"]}')
content = b"Hello, world!"
reply(app.make_data(name, content=content, signer=keychain.get_signer({}),
Expand Down
146 changes: 94 additions & 52 deletions src/ndn/app_support/light_versec/binary.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# -----------------------------------------------------------------------------
import ndn.encoding as enc
import dataclasses as dc
from typing import Optional

from ...encoding import BinaryStr
from ...encoding.tlv_model_v2 import tlv_encode, tlv_parse


__all__ = [
Expand Down Expand Up @@ -62,63 +66,101 @@ class TypeNumber:
NAMED_PATTERN_NUM = 0x69


class UserFnArg(enc.TlvModel):
@dc.dataclass
class UserFnArg:
# A given component
value = enc.BytesField(TypeNumber.COMPONENT_VALUE)
value: Optional[bytes] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.COMPONENT_VALUE})
# Referring to a previous matched pattern
tag = enc.UintField(TypeNumber.PATTERN_TAG)
tag: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.PATTERN_TAG})


class UserFnCall(enc.TlvModel):
fn_id = enc.BytesField(TypeNumber.USER_FN_ID, is_string=True)
args = enc.RepeatedField(enc.ModelField(TypeNumber.FN_ARGS, UserFnArg))
@dc.dataclass
class UserFnCall:
fn_id: Optional[str] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.USER_FN_ID})
args: list[UserFnArg] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.FN_ARGS})


class ConstraintOption(enc.TlvModel):
@dc.dataclass
class ConstraintOption:
# Equal to a given NameComponent value
value = enc.BytesField(TypeNumber.COMPONENT_VALUE)
value: Optional[bytes] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.COMPONENT_VALUE})
# Equal to another pattern
tag = enc.UintField(TypeNumber.PATTERN_TAG)
tag: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.PATTERN_TAG})
# Decide by a user function call
fn = enc.ModelField(TypeNumber.USER_FN_CALL, UserFnCall)


class PatternConstraint(enc.TlvModel):
options = enc.RepeatedField(
enc.ModelField(TypeNumber.CONS_OPTION, ConstraintOption)
)


class PatternEdge(enc.TlvModel):
dest = enc.UintField(TypeNumber.NODE_ID)
tag = enc.UintField(TypeNumber.PATTERN_TAG)
cons_sets = enc.RepeatedField(
enc.ModelField(TypeNumber.CONSTRAINT, PatternConstraint)
)


class ValueEdge(enc.TlvModel):
dest = enc.UintField(TypeNumber.NODE_ID)
value = enc.BytesField(TypeNumber.COMPONENT_VALUE)


class Node(enc.TlvModel):
id = enc.UintField(TypeNumber.NODE_ID)
parent = enc.UintField(TypeNumber.PARENT_ID)
rule_name = enc.RepeatedField(enc.BytesField(TypeNumber.IDENTIFIER, is_string=True))
v_edges = enc.RepeatedField(enc.ModelField(TypeNumber.VALUE_EDGE, ValueEdge))
p_edges = enc.RepeatedField(enc.ModelField(TypeNumber.PATTERN_EDGE, PatternEdge))
sign_cons = enc.RepeatedField(enc.UintField(TypeNumber.KEY_NODE_ID))


class TagSymbol(enc.TlvModel):
tag = enc.UintField(TypeNumber.PATTERN_TAG)
ident = enc.BytesField(TypeNumber.IDENTIFIER, is_string=True)


class LvsModel(enc.TlvModel):
version = enc.UintField(TypeNumber.VERSION)
start_id = enc.UintField(TypeNumber.NODE_ID)
named_pattern_cnt = enc.UintField(TypeNumber.NAMED_PATTERN_NUM)
nodes = enc.RepeatedField(enc.ModelField(TypeNumber.NODE, Node))
symbols = enc.RepeatedField(enc.ModelField(TypeNumber.TAG_SYMBOL, TagSymbol))
fn: Optional[UserFnCall] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.USER_FN_CALL})


@dc.dataclass
class PatternConstraint:
options: list[ConstraintOption] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.CONS_OPTION})


@dc.dataclass
class PatternEdge:
dest: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.NODE_ID})
tag: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.PATTERN_TAG})
cons_sets: list[PatternConstraint] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.CONSTRAINT})


@dc.dataclass
class ValueEdge:
dest: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.NODE_ID})
value: Optional[bytes] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.COMPONENT_VALUE})


@dc.dataclass
class Node:
id: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.NODE_ID})
parent: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.PARENT_ID})
rule_name: list[str] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.IDENTIFIER})
v_edges: list[ValueEdge] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.VALUE_EDGE})
p_edges: list[PatternEdge] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.PATTERN_EDGE})
sign_cons: list[int] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.KEY_NODE_ID})


@dc.dataclass
class TagSymbol:
tag: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.PATTERN_TAG})
ident: Optional[str] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.IDENTIFIER})


@dc.dataclass
class LvsModel:
version: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.VERSION})
start_id: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.NODE_ID})
named_pattern_cnt: Optional[int] = dc.field(
default=None, metadata={'tlv_type': TypeNumber.NAMED_PATTERN_NUM})
nodes: list[Node] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.NODE})
symbols: list[TagSymbol] = dc.field(
default_factory=list, metadata={'tlv_type': TypeNumber.TAG_SYMBOL})

def encode(self) -> bytearray:
return tlv_encode(self)

@classmethod
def parse(cls, wire: BinaryStr) -> 'LvsModel':
return tlv_parse(cls, wire)
2 changes: 1 addition & 1 deletion src/ndn/app_support/light_versec/checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

from ...encoding import BinaryStr, Component, FormalName, Name, NonStrictName
from ...security import Keychain
from ..security_v2 import parse_certificate
from ..security_v2_2 import parse_certificate
from . import binary as bny
from .compiler import top_order

Expand Down
Loading
Loading