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. |