cddl 0.8.8 → 0.8.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,167 @@
1
+ start = bundle / #6.55799(bundle)
2
+
3
+ ; Times before 2000 are invalid
4
+ dtn-time = uint
5
+
6
+ ; CRC enumerated type
7
+ crc-type = 0 / 1 / 2
8
+ ; Either 16-bit or 32-bit
9
+ crc-value = (bstr .size 2) / (bstr .size 4)
10
+
11
+ creation-timestamp = [dtn-time, sequence: uint]
12
+
13
+ eid = $eid-choice .within eid-structure
14
+ eid-structure = [
15
+ uri-code: uint,
16
+ SSP: any
17
+ ]
18
+ $eid-choice /= [
19
+ uri-code: 1,
20
+ SSP: (tstr / 0)
21
+ ]
22
+ $eid-choice /= [
23
+ uri-code: 2,
24
+ SSP: [
25
+ nodenum: uint,
26
+ servicenum: uint
27
+ ]
28
+ ]
29
+
30
+ ; The root bundle array
31
+ bundle = [primary-block, *extension-block, payload-block]
32
+
33
+ primary-block = [
34
+ version: 7,
35
+ bundle-control-flags,
36
+ crc-type,
37
+ destination: eid,
38
+ source-node: eid,
39
+ report-to: eid,
40
+ creation-timestamp,
41
+ lifetime: uint,
42
+ ? (
43
+ fragment-offset: uint,
44
+ total-application-data-length: uint,
45
+ )
46
+ ? crc-value,
47
+ ]
48
+ bundle-control-flags = uint .bits bundleflagbits
49
+ bundleflagbits = &(
50
+ reserved: 15,
51
+ reserved: 14,
52
+ reserved: 13,
53
+ bundle-deletion-status-reports-are-requested: 12,
54
+ bundle-delivery-status-reports-are-requested: 11,
55
+ bundle-forwarding-status-reports-are-requested: 10,
56
+ reserved: 9,
57
+ bundle-reception-status-reports-are-requested: 8,
58
+ bundle-contains-a-Manifest-block: 7,
59
+ status-time-is-requested-in-all-status-reports: 6,
60
+ user-application-acknowledgement-is-requested: 5,
61
+ reserved: 4,
62
+ reserved: 3,
63
+ bundle-must-not-be-fragmented: 2,
64
+ payload-is-an-administrative-record: 1,
65
+ bundle-is-a-fragment: 0
66
+ )
67
+
68
+ ; Abstract shared structure of all non-primary blocks
69
+ canonical-block-structure = [
70
+ block-type-code: uint,
71
+ block-number: uint,
72
+ block-control-flags,
73
+ crc-type,
74
+ ; Each block type defines the content within the bytestring
75
+ block-type-specific-data,
76
+ ? crc-value
77
+ ]
78
+ block-control-flags = uint .bits blockflagbits
79
+ blockflagbits = &(
80
+ reserved: 7,
81
+ reserved: 6,
82
+ reserved: 5,
83
+ reserved: 4,
84
+ bundle-must-be-deleted-if-block-cannot-be-processed: 3,
85
+ status-report-must-be-transmitted-if-block-cannot-be-processed: 2,
86
+ block-must-be-removed-from-bundle-if-it-cannot-be-processed: 1,
87
+ block-must-be-replicated-in-every-fragment: 0
88
+ )
89
+ block-type-specific-data = bstr / #6.24(bstr)
90
+ ; Actual CBOR data embedded in a bytestring, with optional tag to indicate so
91
+ embedded-cbor<Item> = (bstr .cbor Item) / #6.24(bstr .cbor Item)
92
+
93
+ ; Extension block type, which does not specialize other than the code/number
94
+ extension-block = $extension-block-structure .within canonical-block-structure
95
+ ; Generic shared structure of all non-primary blocks
96
+ extension-block-use<CodeValue, BlockData> = [
97
+ block-type-code: CodeValue,
98
+ block-number: (uint .ne 0),
99
+ block-control-flags,
100
+ crc-type,
101
+ BlockData,
102
+ ? crc-value
103
+ ]
104
+
105
+ ; Payload block type
106
+ payload-block = payload-block-structure .within canonical-block-structure
107
+ payload-block-structure = [
108
+ block-type-code: 1,
109
+ block-number: 0,
110
+ block-control-flags,
111
+ crc-type,
112
+ $payload-block-data,
113
+ ? crc-value
114
+ ]
115
+
116
+ ; Arbitrary payload data, including non-CBOR bytestring
117
+ $payload-block-data /= block-type-specific-data
118
+
119
+
120
+ ; Administrative record as a payload data specialization
121
+ $payload-block-data /= embedded-cbor<admin-record>
122
+ admin-record = $admin-record .within admin-record-structure
123
+ admin-record-structure = [
124
+ record-type-code: uint,
125
+ record-content: any
126
+ ]
127
+ ; Only one defined record type
128
+ $admin-record /= [1, status-record-content]
129
+ status-record-content = [
130
+ bundle-status-information,
131
+ status-report-reason-code: uint,
132
+ source-node-eid: eid,
133
+ subject-creation-timestamp: creation-timestamp,
134
+ ? (
135
+ subject-payload-offset: uint,
136
+ subject-payload-length: uint
137
+ )
138
+ ]
139
+ bundle-status-information = [
140
+ reporting-node-received-bundle: status-info-content,
141
+ reporting-node-forwarded-bundle: status-info-content,
142
+ reporting-node-delivered-bundle: status-info-content,
143
+ reporting-node-deleted-bundle: status-info-content
144
+ ]
145
+ status-info-content = [
146
+ status-indicator: bool,
147
+ ? timestamp: dtn-time
148
+ ]
149
+
150
+
151
+ ; Previous Node extension block
152
+ $extension-block-structure /=
153
+ extension-block-use<7, embedded-cbor<ext-data-previous-node>>
154
+ ext-data-previous-node = eid
155
+
156
+ ; Bundle Age extension block
157
+ $extension-block-structure /=
158
+ extension-block-use<8, embedded-cbor<ext-data-bundle-age>>
159
+ ext-data-bundle-age = uint
160
+
161
+ ; Hop Count extension block
162
+ $extension-block-structure /=
163
+ extension-block-use<9, embedded-cbor<ext-data-hop-count>>
164
+ ext-data-hop-count = [
165
+ hop-limit: uint,
166
+ hop-count: uint
167
+ ]
@@ -0,0 +1,10 @@
1
+ coral = [+ s-exp]
2
+ s-exp = ((text, value, ?coral) // directive)
3
+ value = ctext / cbytes / cint / cfloat / cboolean / cdatetime / null / {"_link": tstr} / {"_form": tstr}
4
+ ctext = text / {"_text": text}
5
+ cint = {"_int": int}
6
+ cfloat = float / {"_float": float}
7
+ cboolean = bool / {"_bool": bool}
8
+ cdatetime = {"_datetime": text}
9
+ cbytes = {"_bytes": text} ; base64url no padding
10
+ directive = (("_using", {* text => text}) // ("_base", text))
@@ -0,0 +1,5 @@
1
+ document = {*element}
2
+ element = (relation => value / [2*value])
3
+
4
+ relation = text
5
+ value = text
@@ -0,0 +1,7 @@
1
+ document = {*element}
2
+ element = (text => value / [2*value])
3
+ value = text / float / bool / tagged
4
+ tagged = {"_int":int,*element} / {"_float":float,*element} / {"_text":text,*element} / {"_bytes":bytes,*element} / {"_datetime":text,*element} / {"_bool":bool,*element} / {"_link":ciri,*element} / {"_form":ciri,*element}
5
+ ciri = text ; full IRI given
6
+ / [text] ; suffix for default prefix
7
+ / [text, text] ; prefix, suffix for that prefix
@@ -0,0 +1,7 @@
1
+ document = {? ("_using" => {* text => text}), *element}
2
+ element = (text => value / [2*value])
3
+ value = text / float / bool / tagged / {*element}
4
+ tagged = {"_int": int, *element} / {"_float": float, *element} / {"_text": text, *element} / {"_bytes": bytes, *element} / {"_datetime": text, *element} / {"_bool": bool, *element} / {"_link": ciri, *element} / {"_form": ciri, *element}
5
+ ciri = text ; full IRI given
6
+ / [text] ; suffix for default prefix
7
+ / [text, text] ; prefix, suffix for that prefix
@@ -0,0 +1,4 @@
1
+ bla = {
2
+ a: int
3
+ ? ("b" .feature "foo") => float
4
+ }
@@ -0,0 +1,5 @@
1
+ foo = {
2
+ kind: bar / baz .feature (["foo-extensions", "bazify"])
3
+ }
4
+ bar = int
5
+ baz = text ; complex stuff that doesn't all need to be in the detail
@@ -0,0 +1 @@
1
+ foo=bar=int
@@ -0,0 +1,11 @@
1
+
2
+ map-example = {
3
+ ? optional-key : int,
4
+ * map-example-extension,
5
+ * tstr => any
6
+ }
7
+
8
+ map-example-extension = ()
9
+
10
+ map-example-extension //= (another-optional-key : tstr,)
11
+ map-example-extension //= ("and a third" : bstr,)
@@ -0,0 +1,12 @@
1
+ map-example = {
2
+ ? "optional-key" : int,
3
+ map-example-extensions,
4
+ * tstr => any
5
+ }
6
+
7
+ map-example-extensions = ()
8
+
9
+ map-example-extensions //= (
10
+ "another-optional-key" : tstr,
11
+ "and a third": bstr
12
+ )