rfc9770v3.txt   rfc9770.txt 
skipping to change at line 1005 skipping to change at line 1005
The 'detail' entry is unlikely to be relevant in an unattended The 'detail' entry is unlikely to be relevant in an unattended
setup where human intervention is not expected. setup where human intervention is not expected.
An example of an error response using the problem-details format is An example of an error response using the problem-details format is
shown in Figure 5. shown in Figure 5.
Header: Bad Request (Code=4.00) Header: Bad Request (Code=4.00)
Content-Format: 257 (application/concise-problem-details+cbor) Content-Format: 257 (application/concise-problem-details+cbor)
Payload: Payload:
{ {
/ title / -1: "Invalid parameter value", / title / -1: "Invalid parameter value",
/ detail / -2: "Invalid value for 'cursor': -53", / detail / -2: "Invalid value for 'cursor': -53",
/ ace-trl-error / 1:{ / ace-trl-error / 1: {
/ error-id / 0: 0 / "Invalid parameter value" /, / error-id / 0: 0 / "Invalid parameter value" /,
/ cursor / 1: 42 / cursor / 1: 42
} }
} }
Figure 5: Example of Error Response with Problem Details Figure 5: Example of Error Response with Problem Details
The problem-details format in general and the Custom Problem Detail The problem-details format in general and the Custom Problem Detail
entry 'ace-trl-error' in particular are OPTIONAL to support for entry 'ace-trl-error' in particular are OPTIONAL to support for
registered devices. A registered device supporting the entry 'ace- registered devices. A registered device supporting the entry 'ace-
trl-error' and that is able to understand the specified error may use trl-error' and that is able to understand the specified error may use
that information to determine what actions to take next. that information to determine what actions to take next.
6.2. Supporting Diff Queries 6.2. Supporting Diff Queries
If the AS supports diff queries, it is able to transfer a list of If the AS supports diff queries, it is able to transfer a list of
diff entries, each of which is related to one update that occurred to diff entries, each of which is related to one update that occurred to
the TRL (see Section 6). That is, when replying to a diff query the TRL (see Section 6). That is, when replying to a diff query
performed by a requester, the AS provides the diff entries related to performed for a requester, the AS provides the diff entries related
the most recent TRL updates pertaining to the requester. to the most recent TRL updates pertaining to the requester.
The following defines how the AS builds and maintains an ordered list The following defines how the AS builds and maintains an ordered list
of diff entries, for each registered device and administrator, of diff entries, for each registered device and administrator,
hereafter referred to as "requesters". In particular, a requester's hereafter referred to as "requesters". In particular, a requester's
diff entry associated with a TRL update contains a set of token diff entry associated with a TRL update contains a set of token
hashes pertaining to that requester, each of which was added to the hashes pertaining to that requester, each of which was added to the
TRL or removed from the TRL at that update. TRL or removed from the TRL at that update.
The AS defines the single constant positive integer MAX_N >= 1. For The AS defines the single constant positive integer MAX_N >= 1. For
each requester, the AS maintains an update collection of maximum each requester, the AS maintains an update collection of maximum
skipping to change at line 1153 skipping to change at line 1153
update collection in question. If supporting the "Cursor" extension, update collection in question. If supporting the "Cursor" extension,
the AS MUST provide registered devices and administrators with the the AS MUST provide registered devices and administrators with the
corresponding value of MAX_DIFF_BATCH upon their registration (see corresponding value of MAX_DIFF_BATCH upon their registration (see
Section 10). Section 10).
6.3. Query Parameters 6.3. Query Parameters
A GET request to the TRL endpoint can include the following query A GET request to the TRL endpoint can include the following query
parameters. The AS MUST silently ignore unknown query parameters. parameters. The AS MUST silently ignore unknown query parameters.
* 'diff': if included, it indicates to perform a diff query of the * 'diff': if included, it indicates that the AS should perform a
TRL (see Section 8). Its value MUST be either: diff query of the TRL (see Section 8). Its value MUST be either:
- the integer 0, indicating that a (notification) response should - the integer 0, indicating that a (notification) response should
include as many diff entries as the AS can provide in the include as many diff entries as the AS can provide in the
response; or response; or
- a positive integer strictly greater than 0, indicating the - a positive integer strictly greater than 0, indicating the
maximum number of diff entries that a (notification) response maximum number of diff entries that a (notification) response
should include. should include.
If the AS does not support diff queries, it ignores the 'diff' If the AS does not support diff queries, it ignores the 'diff'
query parameter when present in the GET request and proceeds like query parameter when present in the GET request and proceeds like
when processing a full query of the TRL (see Section 7). when performing a full query of the TRL (see Section 7).
Otherwise, the AS MUST return a 4.00 (Bad Request) response in Otherwise, the AS MUST return a 4.00 (Bad Request) response in
case the 'diff' query parameter of the GET request has a value case the 'diff' query parameter of the GET request has a value
that is neither 0 nor a positive integer, irrespective of the that is neither 0 nor a positive integer, irrespective of the
presence of the 'cursor' query parameter and its value (see presence of the 'cursor' query parameter and its value (see
below). The response MUST have Content-Format set to below). The response MUST have Content-Format set to
"application/concise-problem-details+cbor", and its payload is "application/concise-problem-details+cbor", and its payload is
formatted as defined in Section 6.1. Within the Custom Problem formatted as defined in Section 6.1. Within the Custom Problem
Detail entry 'ace-trl-error', the value of the 'error-id' field Detail entry 'ace-trl-error', the value of the 'error-id' field
MUST be set to 0 ("Invalid parameter value"), and the 'cursor' MUST be set to 0 ("Invalid parameter value"), and the 'cursor'
field MUST NOT be present. field MUST NOT be present.
* 'cursor': if included, it indicates to perform a diff query of the * 'cursor': if included, it indicates the should perform a diff
TRL together with the "Cursor" extension, as defined in query of the TRL together with the "Cursor" extension, as defined
Section 9.2. Its value MUST be either 0 or a positive integer. in Section 9.2. Its value MUST be either 0 or a positive integer.
If the 'cursor' query parameter is included, then the 'diff' query If the 'cursor' query parameter is included, then the 'diff' query
parameter MUST also be included. parameter MUST also be included.
If included, the 'cursor' query parameter has an unsigned integer If included, the 'cursor' query parameter has an unsigned integer
value that was provided by the AS in a previous response from the value that was provided by the AS in a previous response from the
TRL endpoint (see Sections 9.1, 9.2.2, and 9.2.3). TRL endpoint (see Sections 9.1, 9.2.2, and 9.2.3).
If the AS does not support the "Cursor" extension, it ignores the If the AS does not support the "Cursor" extension, it ignores the
'cursor' query parameter when present in the GET request. In such 'cursor' query parameter when present in the GET request. In such
a case, the AS proceeds as specified elsewhere in this document, a case, the AS proceeds as specified elsewhere in this document,
skipping to change at line 1226 skipping to change at line 1226
- The 'cursor' query parameter has a value that is neither 0 nor - The 'cursor' query parameter has a value that is neither 0 nor
a positive integer; or it has a value strictly greater than a positive integer; or it has a value strictly greater than
MAX_INDEX (see Section 6.2.1). MAX_INDEX (see Section 6.2.1).
Within the Custom Problem Detail entry 'ace-trl-error', the Within the Custom Problem Detail entry 'ace-trl-error', the
value of the 'error-id' field MUST be set to 0 ("Invalid value of the 'error-id' field MUST be set to 0 ("Invalid
parameter value"). The entry 'ace-trl-error' MUST include the parameter value"). The entry 'ace-trl-error' MUST include the
'cursor' field, whose value is either: 'cursor' field, whose value is either:
o the CBOR simple value null (0xf6), if the update collection o the CBOR simple value null (0xf6), if the update collection
associated with the requester is empty; otherwise, associated with the requester is empty; or, otherwise
o the corresponding current value of 'last_index'. o the corresponding current value of 'last_index'.
- All of the following hold: the update collection associated - All of the following hold: the update collection associated
with the requester is not empty; no wraparound of the 'index' with the requester is not empty; no wraparound of the 'index'
value has occurred; and the 'cursor' query parameter has a value has occurred; and the 'cursor' query parameter has a
value strictly greater than the current 'last_index' on the value strictly greater than the current 'last_index' on the
update collection (see Section 6.2.1). update collection (see Section 6.2.1).
Within the Custom Problem Detail entry 'ace-trl-error', the Within the Custom Problem Detail entry 'ace-trl-error', the
value of the 'error-id' field MUST be set to 2 ("Out of bound value of the 'error-id' field MUST be set to 2 ("Out of bound
cursor value"), and the 'cursor' field MUST NOT be present. cursor value"), and the 'cursor' field MUST NOT be present.
7. Full Query of the TRL 7. Full Query of the TRL
In order to produce a (notification) response to a GET request asking In order to produce a (notification) response to a GET request asking
for a full query of the TRL, the AS performs the following actions: for a full query of the TRL, the AS performs the following actions:
1. From the TRL, the AS builds a set HASHES such that: 1. From the TRL, the AS builds a HASHES set such that:
* If the requester is a registered device, HASHES specifies the * If the requester is a registered device, HASHES specifies the
token hashes currently in the TRL and associated with the token hashes currently in the TRL and associated with the
access tokens pertaining to that registered device. The AS access tokens pertaining to that registered device. The AS
can always use the authenticated identity of the registered can always use the authenticated identity of the registered
device to perform the necessary filtering on the TRL content. device to perform the necessary filtering on the TRL content.
* If the requester is an administrator, HASHES specifies all the * If the requester is an administrator, HASHES specifies all the
token hashes currently in the TRL. token hashes currently in the TRL.
2. The AS sends a 2.05 (Content) response to the requester. The 2. The AS sends a 2.05 (Content) response to the requester. The
response MUST have Content-Format set to "application/ace- response MUST have Content-Format set to "application/ace-
trl+cbor". The payload of the response is a CBOR map, which MUST trl+cbor". The payload of the response is a CBOR map, which MUST
be formatted as follows. be formatted as follows.
* The 'full_set' parameter MUST be included and MUST encode a * The 'full_set' parameter MUST be included and MUST encode a
CBOR array 'full_set_value'. Each element of 'full_set_value' CBOR array 'full_set_value'. Each element of 'full_set_value'
is a CBOR byte string, whose value is one of the token hashes is a CBOR byte string, whose value is one of the token hashes
from the set HASHES. If the set HASHES is empty, the from the HASHES set. If the HASHES set is empty, the
'full_set' parameter specifies the empty CBOR array. 'full_set' parameter specifies the empty CBOR array.
The CBOR array MUST be treated as a set, i.e., the order of The CBOR array MUST be treated as a set, i.e., the order of
its elements has no meaning. its elements has no meaning.
* The 'cursor' parameter MUST be included if the AS supports * The 'cursor' parameter MUST be included if the AS supports
both diff queries and the related "Cursor" extension (see both diff queries and the related "Cursor" extension (see
Sections 6.2 and 6.2.1). Its value is set as specified in Sections 6.2 and 6.2.1). Its value is set as specified in
Section 9.1 and provides the requester with information for Section 9.1 and provides the requester with information for
performing a follow-up diff query using the "Cursor" extension sending a new request that asks the AS to perform a follow-up
(see Section 9.2). diff query using the "Cursor" extension (see Section 9.2).
If the AS does not support both diff queries and the "Cursor" If the AS does not support both diff queries and the "Cursor"
extension, this parameter MUST NOT be included. In case the extension, this parameter MUST NOT be included. In case the
requester does not support both diff queries and the "Cursor" requester does not support both diff queries and the "Cursor"
extension, it MUST silently ignore the 'cursor' parameter if extension, it MUST silently ignore the 'cursor' parameter if
present. present.
Figure 6 provides the CDDL definition [RFC8610] of the CBOR array Figure 6 provides the CDDL definition [RFC8610] of the CBOR array
'full_set_value' specified in the response from the AS as the value 'full_set_value' specified in the response from the AS as the value
of the 'full_set' parameter. of the 'full_set' parameter.
skipping to change at line 1383 skipping to change at line 1383
reverse chronological order. That is, the first 'diff_entry' reverse chronological order. That is, the first 'diff_entry'
element of 'diff_set_value' relates to the most recent TRL element of 'diff_set_value' relates to the most recent TRL
update pertaining to the requester. The second 'diff_entry' update pertaining to the requester. The second 'diff_entry'
element relates to the second-to-last most recent TRL update element relates to the second-to-last most recent TRL update
pertaining to the requester, and so on. pertaining to the requester, and so on.
* The 'cursor' parameter and the 'more' parameter MUST be * The 'cursor' parameter and the 'more' parameter MUST be
included if the AS supports both diff queries and the related included if the AS supports both diff queries and the related
"Cursor" extension (see Section 6.2.1). Their values are set "Cursor" extension (see Section 6.2.1). Their values are set
as specified in Section 9.2 and provide the requester with as specified in Section 9.2 and provide the requester with
information for performing a follow-up query of the TRL (see information for sending a new request that asks the AS to
Section 9.2). perfrom a follow-up query of the TRL (see Section 9.2).
In case the AS supports diff queries but not the "Cursor" In case the AS supports diff queries but not the "Cursor"
extension, these parameters MUST NOT be included. In case the extension, these parameters MUST NOT be included. In case the
requester supports diff queries but not the "Cursor" requester supports diff queries but not the "Cursor"
extension, the requester MUST silently ignore the 'cursor' extension, the requester MUST silently ignore the 'cursor'
parameter and the 'more' parameter, if present. parameter and the 'more' parameter, if present.
Figure 8 provides the CDDL definition [RFC8610] of the CBOR array Figure 8 provides the CDDL definition [RFC8610] of the CBOR array
'diff_set_value' specified in the response from the AS, as the value 'diff_set_value' specified in the response from the AS, as the value
of the 'diff_set' parameter. of the 'diff_set' parameter.
skipping to change at line 1799 skipping to change at line 1799
To this end, a possible way relies on the conditional control To this end, a possible way relies on the conditional control
parameter "c.pmax" defined in [COND-PARAMETERS], which can be parameter "c.pmax" defined in [COND-PARAMETERS], which can be
included as a "name=value" query parameter in an Observation Request. included as a "name=value" query parameter in an Observation Request.
This ensures that no more than c.pmax seconds elapse between two This ensures that no more than c.pmax seconds elapse between two
consecutive notifications sent to that observer, regardless of consecutive notifications sent to that observer, regardless of
whether or not the TRL has changed. whether or not the TRL has changed.
Following a first exchange with the AS, an administrator or a Following a first exchange with the AS, an administrator or a
registered device can send additional GET requests to the TRL registered device can send additional GET requests to the TRL
endpoint at any time, analogously to what is defined above. When endpoint at any time, analogously to what is defined above. When
doing so, the requester towards the TRL endpoint can perform a full doing so, the requester towards the TRL endpoint can ask the AS to
query (see Section 7) or a diff query (see Section 8) of the TRL. In perform a full query (see Section 7) or a diff query (see Section 8)
the latter case, the requester can additionally rely on the "Cursor" of the TRL. In the latter case, the requester can additionally rely
extension (see Sections 6.3 and 9.2). on the "Cursor" extension (see Sections 6.3 and 9.2).
As specified in Section 6.2, an AS supporting diff queries maintains As specified in Section 6.2, an AS supporting diff queries maintains
an update collection of maximum MAX_N series items for each an update collection of maximum MAX_N series items for each
administrator or registered device, hereafter referred to as a administrator or registered device, hereafter referred to as a
"requester". In particular, if an update collection includes MAX_N "requester". In particular, if an update collection includes MAX_N
series items, adding a further series item to that update collection series items, adding a further series item to that update collection
results in deleting the oldest series item from that update results in deleting the oldest series item from that update
collection. collection.
From then on, the requester associated with the update collection From then on, the requester associated with the update collection
skipping to change at line 2764 skipping to change at line 2764
Furthermore, 'h(x)' refers to the hash function used to compute the Furthermore, 'h(x)' refers to the hash function used to compute the
token hashes, as defined in Section 4 of this specification and token hashes, as defined in Section 4 of this specification and
according to [RFC6920]. Assuming the usage of CWTs transported in according to [RFC6920]. Assuming the usage of CWTs transported in
AS-to-Client responses encoded in CBOR (see Section 4.2.1), AS-to-Client responses encoded in CBOR (see Section 4.2.1),
'bstr.h(t1)' and 'bstr.h(t2)' denote CBOR byte strings, whose values 'bstr.h(t1)' and 'bstr.h(t2)' denote CBOR byte strings, whose values
are the token hashes of the access tokens t1 and t2, respectively. are the token hashes of the access tokens t1 and t2, respectively.
C.1. Full Query with Observe C.1. Full Query with Observe
Figure 10 shows an interaction example a CoAP observation and a full Figure 10 shows an interaction example of a CoAP observation and a
query of the TRL. full query of the TRL.
In this example, the AS does not support the "Cursor" extension. In this example, the AS does not support the "Cursor" extension.
Hence, the 'cursor' parameter is not included in the payload of the Hence, the 'cursor' parameter is not included in the payload of the
responses to a full query request. responses to a full query request.
RS AS RS AS
| | | |
| Registration: POST | | Registration: POST |
+--------------------------------------------------->| +--------------------------------------------------->|
| | | |
skipping to change at line 2790 skipping to change at line 2790
| "trl_path" : "/revoke/trl", | | "trl_path" : "/revoke/trl", |
| "trl_hash" : "sha-256", | | "trl_hash" : "sha-256", |
| "max_n" : 10 | | "max_n" : 10 |
| } | | } |
| | | |
| GET coap://as.example.com/revoke/trl/ | | GET coap://as.example.com/revoke/trl/ |
| Observe: 0 | | Observe: 0 |
+--------------------------------------------------->| +--------------------------------------------------->|
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 42 | | Observe: 42 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [] | | / full_set / 0: [] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access tokens t1 and t2 issued | | (Access tokens t1 and t2 issued |
| and successfully submitted to RS) | | and successfully submitted to RS) |
| | | |
| ... | | ... |
| | | |
| (Access token t1 is revoked) | | (Access token t1 is revoked) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 53 | | Observe: 53 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t1)] | | / full_set / 0: [bstr.h(t1)] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 is revoked) | | (Access token t2 is revoked) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 64 | | Observe: 64 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t1), bstr.h(t2)] | | / full_set / 0: [bstr.h(t1), bstr.h(t2)] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t1 expires) | | (Access token t1 expires) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 75 | | Observe: 75 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t2)] | | / full_set / 0: [bstr.h(t2)] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 expires) | | (Access token t2 expires) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 86 | | Observe: 86 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [] | | / full_set / 0: [] |
| } | | } |
| | | |
Figure 10: Interaction for Full Query with Observe Figure 10: Interaction for Full Query with Observe
C.2. Diff Query with Observe C.2. Diff Query with Observe
Figure 11 shows an interaction example of a CoAP observation and a Figure 11 shows an interaction example of a CoAP observation and a
diff query of the TRL. diff query of the TRL.
The RS indicates N = 3 as the value of the 'diff' query parameter, The RS indicates N = 3 as the value of the 'diff' query parameter,
skipping to change at line 2885 skipping to change at line 2885
| "trl_path" : "/revoke/trl", | | "trl_path" : "/revoke/trl", |
| "trl_hash" : "sha-256", | | "trl_hash" : "sha-256", |
| "max_n" : 10 | | "max_n" : 10 |
| } | | } |
| | | |
| GET coap://as.example.com/revoke/trl?diff=3 | | GET coap://as.example.com/revoke/trl?diff=3 |
| Observe: 0 | | Observe: 0 |
+--------------------------------------------------->| +--------------------------------------------------->|
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 42 | | Observe: 42 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [] | | / diff_set / 1: [] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access tokens t1 and t2 issued | | (Access tokens t1 and t2 issued |
| and successfully submitted to RS) | | and successfully submitted to RS) |
| | | |
| ... | | ... |
| | | |
| (Access token t1 is revoked) | | (Access token t1 is revoked) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 53 | | Observe: 53 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [], [bstr.h(t1)] ] | | [ [], [bstr.h(t1)] ] |
| ] | | ] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 is revoked) | | (Access token t2 is revoked) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 64 | | Observe: 64 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [], [bstr.h(t2)] ], | | [ [], [bstr.h(t2)] ], |
| [ [], [bstr.h(t1)] ] | | [ [], [bstr.h(t1)] ] |
| ] | | ] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t1 expires) | | (Access token t1 expires) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 75 | | Observe: 75 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [bstr.h(t1)], [] ], | | [ [bstr.h(t1)], [] ], |
| [ [], [bstr.h(t2)] ], | | [ [], [bstr.h(t2)] ], |
| [ [], [bstr.h(t1)] ] | | [ [], [bstr.h(t1)] ] |
| ] | | ] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 expires) | | (Access token t2 expires) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 86 | | Observe: 86 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [bstr.h(t2)], [] ], | | [ [bstr.h(t2)], [] ], |
| [ [bstr.h(t1)], [] ], | | [ [bstr.h(t1)], [] ], |
| [ [], [bstr.h(t2)] ] | | [ [], [bstr.h(t2)] ] |
| ] | | ] |
| } | | } |
| | | |
Figure 11: Interaction for Diff Query with Observe Figure 11: Interaction for Diff Query with Observe
C.3. Full Query with Observe and Diff Query C.3. Full Query with Observe and Diff Query
Figure 12 shows an interaction example of a CoAP observation and a Figure 12 shows an interaction example of a CoAP observation and a
full query of the TRL. full query of the TRL.
The example also shows one of the notifications from the AS getting The example also shows one of the notifications from the AS getting
lost in transmission; thus, that notification does not reach the RS. lost in transmission; thus, that notification does not reach the RS.
When this happens, and after a waiting time defined by the When this happens, and after a waiting time defined by the
application has elapsed, the RS sends a GET request with no Observe application has elapsed, the RS sends a GET request with no Observe
Option to the AS to perform a diff query of the TRL. The RS Option to the AS, asking the AS to perform a diff query of the TRL.
indicates N = 8 as the value of the 'diff' query parameter, i.e., as The RS indicates N = 8 as the value of the 'diff' query parameter,
the maximum number of diff entries to be included in a response from i.e., as the maximum number of diff entries to be included in a
the AS. response from the AS.
In this example, the AS does not support the "Cursor" extension. In this example, the AS does not support the "Cursor" extension.
Hence, the 'cursor' parameter is not included in the payload of the Hence, the 'cursor' parameter is not included in the payload of the
responses to a full query request. Also, the 'cursor' parameter and responses to a full query request. Also, the 'cursor' parameter and
the 'more' parameter are not included in the payload of the responses the 'more' parameter are not included in the payload of the responses
to a diff query request. to a diff query request.
RS AS RS AS
| | | |
| Registration: POST | | Registration: POST |
skipping to change at line 3001 skipping to change at line 3001
| "trl_path" : "/revoke/trl", | | "trl_path" : "/revoke/trl", |
| "trl_hash" : "sha-256", | | "trl_hash" : "sha-256", |
| "max_n" : 10 | | "max_n" : 10 |
| } | | } |
| | | |
| GET coap://as.example.com/revoke/trl/ | | GET coap://as.example.com/revoke/trl/ |
| Observe: 0 | | Observe: 0 |
+--------------------------------------------------->| +--------------------------------------------------->|
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 42 | | Observe: 42 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [] | | / full_set / 0: [] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access tokens t1 and t2 issued | | (Access tokens t1 and t2 issued |
| and successfully submitted to RS) | | and successfully submitted to RS) |
| | | |
| ... | | ... |
| | | |
| (Access token t1 is revoked) | | (Access token t1 is revoked) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 53 | | Observe: 53 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t1)] | | / full_set / 0: [bstr.h(t1)] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 is revoked) | | (Access token t2 is revoked) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 64 | | Observe: 64 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t1), bstr.h(t2)] | | / full_set / 0: [bstr.h(t1), bstr.h(t2)] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t1 expires) | | (Access token t1 expires) |
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 75 | | Observe: 75 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t2)] | | / full_set / 0: [bstr.h(t2)] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 expires) | | (Access token t2 expires) |
| | | |
| Lost X <------------------------------------------+ | Lost X <------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 86 | | Observe: 86 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [] | | / full_set / 0: [] |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Enough time has passed since | | (Enough time has passed since |
| the latest received notification) | | the latest received notification) |
| | | |
| | | |
| GET coap://as.example.com/revoke/trl?diff=8 | | GET coap://as.example.com/revoke/trl?diff=8 |
+--------------------------------------------------->| +--------------------------------------------------->|
| | | |
|<---------------------------------------------------+ |<---------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [bstr.h(t2)], [] ], | | [ [bstr.h(t2)], [] ], |
| [ [bstr.h(t1)], [] ], | | [ [bstr.h(t1)], [] ], |
| [ [], [bstr.h(t2)] ], | | [ [], [bstr.h(t2)] ], |
| [ [], [bstr.h(t1)] ] | | [ [], [bstr.h(t1)] ] |
| ] | | ] |
| } | | } |
| | | |
Figure 12: Interaction for Full Query with Observe and Diff Query Figure 12: Interaction for Full Query with Observe and Diff Query
C.4. Diff Query with Observe and "Cursor" Extension C.4. Diff Query with Observe and "Cursor" Extension
In this example, the AS supports the "Cursor" extension. Hence, the In this example, the AS supports the "Cursor" extension. Hence, the
CBOR map conveyed as payload of the registration response CBOR map conveyed as payload of the registration response
additionally includes a "max_diff_batch" parameter. This specifies additionally includes a "max_diff_batch" parameter. This specifies
the value of MAX_DIFF_BATCH, i.e., the maximum number of diff entries the value of MAX_DIFF_BATCH, i.e., the maximum number of diff entries
skipping to change at line 3103 skipping to change at line 3103
Figure 13 shows an interaction example of a CoAP observation and a Figure 13 shows an interaction example of a CoAP observation and a
diff query of the TRL. diff query of the TRL.
The RS specifies the 'diff' query parameter with a value of 3, i.e., The RS specifies the 'diff' query parameter with a value of 3, i.e.,
the maximum number of diff entries to be included in a response from the maximum number of diff entries to be included in a response from
the AS. the AS.
If the RS has not received a notification from the AS for a waiting If the RS has not received a notification from the AS for a waiting
time defined by the application, the RS sends a GET request with no time defined by the application, the RS sends a GET request with no
Observe Option to the AS to perform a diff query of the TRL. Observe Option to the AS, asking the AS to perform a diff query of
the TRL.
This is followed up by a further diff query request that includes the This is followed up by a further diff query request that includes the
'cursor' query parameter. Note that the payload of the corresponding 'cursor' query parameter. Note that the payload of the corresponding
response differs from the payload of the response to the previous response differs from the payload of the response to the previous
diff query request. diff query request.
RS AS RS AS
| | | |
| Registration: POST | | Registration: POST |
+------------------------------------------------------->| +------------------------------------------------------->|
| | | |
|<-------------------------------------------------------+ |<-------------------------------------------------------+
| 2.01 Created | | 2.01 Created |
| Payload: { | | Payload: { |
| / ... / | | / ... / |
| "trl_path" : "/revoke/trl", | | "trl_path" : "/revoke/trl", |
| "trl_hash" : "sha-256", | | "trl_hash" : "sha-256", |
| "max_n" : 10, | | "max_n" : 10, |
| "max_diff_batch" : 5 | | "max_diff_batch" : 5 |
| } | | } |
| | | |
| GET coap://as.example.com/revoke/trl?diff=3 | | GET coap://as.example.com/revoke/trl?diff=3 |
| Observe: 0 | | Observe: 0 |
+------------------------------------------------------->| +------------------------------------------------------->|
| | | |
|<-------------------------------------------------------+ |<-------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 42 | | Observe: 42 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [], | | / diff_set / 1: [], |
| / cursor / 2: null, | | / cursor / 2: null, |
| / more / 3: false | | / more / 3: false |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access tokens t1 and t2 issued | | (Access tokens t1 and t2 issued |
| and successfully submitted to RS) | | and successfully submitted to RS) |
| | | |
| ... | | ... |
| | | |
| (Access token t1 is revoked) | | (Access token t1 is revoked) |
| | | |
|<-------------------------------------------------------+ |<-------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 53 | | Observe: 53 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [], [bstr.h(t1)] ] | | [ [], [bstr.h(t1)] ] |
| ], | | ], |
| / cursor / 2: 0, | | / cursor / 2: 0, |
| / more / 3: false | | / more / 3: false |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 is revoked) | | (Access token t2 is revoked) |
| | | |
|<-------------------------------------------------------+ |<-------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 64 | | Observe: 64 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [], [bstr.h(t2)] ], | | [ [], [bstr.h(t2)] ], |
| [ [], [bstr.h(t1)] ] | | [ [], [bstr.h(t1)] ] |
| ], | | ], |
| / cursor / 2: 1, | | / cursor / 2: 1, |
| / more / 3: false | | / more / 3: false |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t1 expires) | | (Access token t1 expires) |
| | | |
|<-------------------------------------------------------+ |<-------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 75 | | Observe: 75 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [bstr.h(t1)], [] ], | | [ [bstr.h(t1)], [] ], |
| [ [], [bstr.h(t2)] ], | | [ [], [bstr.h(t2)] ], |
| [ [], [bstr.h(t1)] ] | | [ [], [bstr.h(t1)] ] |
| ], | | ], |
| / cursor / 2: 2, | | / cursor / 2: 2, |
| / more / 3: false | | / more / 3: false |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 expires) | | (Access token t2 expires) |
| | | |
|<-------------------------------------------------------+ |<-------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 86 | | Observe: 86 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [bstr.h(t2)], [] ], | | [ [bstr.h(t2)], [] ], |
| [ [bstr.h(t1)], [] ], | | [ [bstr.h(t1)], [] ], |
| [ [], [bstr.h(t2)] ] | | [ [], [bstr.h(t2)] ] |
| ], | | ], |
| / cursor / 2: 3, | | / cursor / 2: 3, |
| / more / 3: false | | / more / 3: false |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Enough time has passed since | | (Enough time has passed since |
| the latest received notification) | | the latest received notification) |
| | | |
| | | |
| GET coap://as.example.com/revoke/trl?diff=3 | | GET coap://as.example.com/revoke/trl?diff=3 |
+------------------------------------------------------->| +------------------------------------------------------->|
| | | |
|<-------------------------------------------------------+ |<-------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [bstr.h(t2)], [] ], | | [ [bstr.h(t2)], [] ], |
| [ [bstr.h(t1)], [] ], | | [ [bstr.h(t1)], [] ], |
| [ [], [bstr.h(t2)] ] | | [ [], [bstr.h(t2)] ] |
| ], | | ], |
| / cursor / 2: 3, | | / cursor / 2: 3, |
| / more / 3: false | | / more / 3: false |
| } | | } |
| | | |
| GET coap://as.example.com/revoke/trl?diff=3&cursor=3 | | GET coap://as.example.com/revoke/trl?diff=3&cursor=3 |
+------------------------------------------------------->| +------------------------------------------------------->|
| | | |
|<-------------------------------------------------------+ |<-------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [], | | / diff_set / 1: [], |
| / cursor / 2: 3, | | / cursor / 2: 3, |
| / more / 3: false | | / more / 3: false |
| } | | } |
| | | |
Figure 13: Interaction for Diff Query with Observe and "Cursor" Figure 13: Interaction for Diff Query with Observe and "Cursor"
Extension Extension
C.5. Full Query with Observe and Diff Query with "Cursor" Extension C.5. Full Query with Observe and Diff Query with "Cursor" Extension
In this example, the AS supports the "Cursor" extension. Hence, the In this example, the AS supports the "Cursor" extension. Hence, the
CBOR map conveyed as payload of the registration response CBOR map conveyed as payload of the registration response
additionally includes a "max_diff_batch" parameter. This specifies additionally includes a "max_diff_batch" parameter. This specifies
skipping to change at line 3301 skipping to change at line 3302
collection. collection.
RS AS RS AS
| | | |
| Registration: POST | | Registration: POST |
+-------------------------------------------------------------->| +-------------------------------------------------------------->|
| | | |
|<--------------------------------------------------------------+ |<--------------------------------------------------------------+
| 2.01 Created | | 2.01 Created |
| Payload: { | | Payload: { |
| / ... / | | / ... / |
| "trl_path" : "/revoke/trl", | | "trl_path" : "/revoke/trl",|
| "trl_hash" : "sha-256", | | "trl_hash" : "sha-256", |
| "max_n" : 10, | | "max_n" : 10, |
| "max_diff_batch" : 5 | | "max_diff_batch" : 5 |
| } | | } |
| | | |
| GET coap://as.example.com/revoke/trl/ | | GET coap://as.example.com/revoke/trl/ |
| Observe: 0 | | Observe: 0 |
+-------------------------------------------------------------->| +-------------------------------------------------------------->|
| | | |
|<--------------------------------------------------------------+ |<--------------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 42 | | Observe: 42 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [], | | / full_set / 0: [], |
| / cursor / 2: null | | / cursor / 2: null |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access tokens t1, t2, t3 issued | | (Access tokens t1, t2, t3 issued |
| and successfully submitted to RS) | | and successfully submitted to RS) |
| | | |
| ... | | ... |
| | | |
| (Access tokens t4, t5, t6 issued | | (Access tokens t4, t5, t6 issued |
| and successfully submitted to RS) | | and successfully submitted to RS) |
| | | |
| ... | | ... |
| | | |
| (Access token t1 is revoked) | | (Access token t1 is revoked) |
| | | |
|<--------------------------------------------------------------+ |<--------------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 53 | | Observe: 53 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t1)], | | / full_set / 0: [bstr.h(t1)], |
| / cursor /2: 0 | | / cursor /2: 0 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 is revoked) | | (Access token t2 is revoked) |
| | | |
|<--------------------------------------------------------------+ |<--------------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 64 | | Observe: 64 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t1), bstr.h(t2)], | | / full_set / 0: [bstr.h(t1), bstr.h(t2)], |
| / cursor / 2: 1 | | / cursor / 2: 1 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t1 expires) | | (Access token t1 expires) |
| | | |
|<--------------------------------------------------------------+ |<--------------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 75 | | Observe: 75 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t2)], | | / full_set / 0: [bstr.h(t2)], |
| / cursor / 2: 2 | | / cursor / 2: 2 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t2 expires) | | (Access token t2 expires) |
| | | |
| Lost X <-----------------------------------------------------+ | Lost X <-----------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 86 | | Observe: 86 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [], | | / full_set / 0: [], |
| / cursor / 2: 3 | | / cursor / 2: 3 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t3 is revoked) | | (Access token t3 is revoked) |
| | | |
| Lost X <-----------------------------------------------------+ | Lost X <-----------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 88 | | Observe: 88 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t3)], | | / full_set / 0: [bstr.h(t3)], |
| / cursor / 2: 4 | | / cursor / 2: 4 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t4 is revoked) | | (Access token t4 is revoked) |
| | | |
| Lost X <-----------------------------------------------------+ | Lost X <-----------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 89 | | Observe: 89 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t3), bstr.h(t4)], | | / full_set / 0: [bstr.h(t3), bstr.h(t4)], |
| / cursor / 2: 5 | | / cursor / 2: 5 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t3 expires) | | (Access token t3 expires) |
| | | |
| Lost X <-----------------------------------------------------+ | Lost X <-----------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 90 | | Observe: 90 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t4)], | | / full_set / 0: [bstr.h(t4)], |
| / cursor / 2: 6 | | / cursor / 2: 6 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t4 expires) | | (Access token t4 expires) |
| | | |
| Lost X <-----------------------------------------------------+ | Lost X <-----------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 91 | | Observe: 91 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [], | | / full_set / 0: [], |
| / cursor / 2: 7 | | / cursor / 2: 7 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access tokens t5 and t6 are revoked) | | (Access tokens t5 and t6 are revoked) |
| | | |
| Lost X <-----------------------------------------------------+ | Lost X <-----------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 92 | | Observe: 92 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| /full_set / 0: [bstr.h(t5), bstr.h(t6)], | | /full_set / 0: [bstr.h(t5), bstr.h(t6)], |
| / cursor / 2: 8 | | / cursor / 2: 8 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t5 expires) | | (Access token t5 expires) |
| | | |
| Lost X <-----------------------------------------------------+ | Lost X <-----------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 93 | | Observe: 93 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [bstr.h(t6)], | | / full_set / 0: [bstr.h(t6)], |
| / cursor / 2: 9 | | / cursor / 2: 9 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Access token t6 expires) | | (Access token t6 expires) |
| | | |
| Lost X <-----------------------------------------------------+ | Lost X <-----------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Observe: 94 | | Observe: 94 |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / full_set / 0: [], | | / full_set / 0: [], |
| / cursor / 2: 10 | | / cursor / 2: 10 |
| } | | } |
| | | |
| ... | | ... |
| | | |
| (Enough time has passed since | | (Enough time has passed since |
| the latest received notification) | | the latest received notification) |
| | | |
| | | |
| GET coap://as.example.com/revoke/trl?diff=8&cursor=2 | | GET coap://as.example.com/revoke/trl?diff=8&cursor=2 |
+-------------------------------------------------------------->| +-------------------------------------------------------------->|
| | | |
|<--------------------------------------------------------------+ |<--------------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Content-Format:262(application/ace-trl+cbor)| | Content-Format:262(application/ace-trl+cbor)|
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [bstr.h(t4)], [] ], | | [ [bstr.h(t4)], [] ], |
| [ [bstr.h(t3)], [] ], | | [ [bstr.h(t3)], [] ], |
| [ [], [bstr.h(t4)] ], | | [ [], [bstr.h(t4)] ], |
| [ [], [bstr.h(t3)] ], | | [ [], [bstr.h(t3)] ], |
| [ [bstr.h(t2)], [] ] | | [ [bstr.h(t2)], [] ] |
| ], | | ], |
| / cursor / 2: 7, | | / cursor / 2: 7, |
| / more / 3: true | | / more / 3: true |
| } | | } |
| | | |
| GET coap://as.example.com/revoke/trl?diff=8&cursor=7 | | GET coap://as.example.com/revoke/trl?diff=8&cursor=7 |
+-------------------------------------------------------------->| +-------------------------------------------------------------->|
| | | |
|<--------------------------------------------------------------+ |<--------------------------------------------------------------+
| 2.05 Content | | 2.05 Content |
| Content-Format:262(application/ace-trl+cbor) | | Content-Format:262(application/ace-trl+cbor) |
| Payload: { | | Payload: { |
| / diff_set / 1: [ | | / diff_set / 1: [ |
| [ [bstr.h(t6)], [] ], | | [ [bstr.h(t6)], [] ], |
| [ [bstr.h(t5)], [] ], | | [ [bstr.h(t5)], [] ], |
| [ [], [bstr.h(t5), bstr.h(t6)] ] | | [ [], [bstr.h(t5), bstr.h(t6)] ] |
| ], | | ], |
| / cursor / 2: 10, | | / cursor / 2: 10, |
| / more / 3: false | | / more / 3: false |
| } | | } |
| | | |
Figure 14: Interaction for Full Query with Observe and Diff Query Figure 14: Interaction for Full Query with Observe and Diff Query
with "Cursor" Extension with "Cursor" Extension
Acknowledgments Acknowledgments
 End of changes. 164 change blocks. 
365 lines changed or deleted 366 lines changed or added

This html diff was produced by rfcdiff 1.48.