Opened 11 years ago

Closed 11 years ago

#176 closed protocol enhancement (fixed)

Removing 15 option limit

Reported by: zach@… Owned by: zach@…
Priority: minor Milestone:
Component: coap Version:
Severity: - Keywords:
Cc:

Description

This ticket is to move to a non-segmented Uri-Path and Uri-Query solution (as was in previous versions), just normalizing and then including the whole path or query string in the Uri-Path or -Query option, respectively. However, in order to overcome the 270 octet limit of a single option, we allow the concatenation of these options as is done in the Proxy-Uri option. This is a minor change for implementations, as many already just perform concatenation when processing these options.

The ticket is in response to implementor feedback where interoperability problems have been common regarding segmentation, and the ETSI M2M standardization effort where a CoAP binding has been defined and the segmented model casuses problems with the ETSI standard as deep path structures together with query parameters are required.

This would require the following technical changes to coap-07:

Section 5.10.2:

  • o each Uri-Path Option specifies one segment of the absolute path to
  • the resource, and

+ o the Uri-Path Option contains the absolute path to the resource, and

  • o each Uri-Query Option specifies one argument parameterizing the
  • resource.

+ o the Uri-Query Option contains the query string of the resource.

Section 6.4:

  1. If the value of the <path> component of /url/ is empty or

consists of a single slash character (U+002F SOLIDUS "/"), then
move to the next step.

  • Otherwise, for each segment in the <path> component, include a
  • Uri-Path Option and let that option's value be the segment (not
  • including the delimiting slash characters) after converting all
  • percent-encodings ("%" followed by two hexadecimal digits) to the
  • corresponding characters.

+ Otherwise, the <path> component is included in a Uri-Path option
+ after converting all percent-encodings ("%" followed by two hexadecimal
+ digits) to the corresponding characters. In case the <path> doesn't fit
+ within a single option, the Uri-Path Option MAY be included multiple
+ times in a request such that the concatenation of the values results in
+ the single <path>. All but the last instance of the Uri-Path Option MUST
+ have a value with a length of 270 bytes, and the last instance MUST NOT be empty.

  • If /url/ has a <query> component, then, for each argument in the
  • <query> component, include a Uri-Query Option and let that
  • option's value be the argument (not including the question mark
  • and the delimiting ampersand characters) after converting all
  • percent-encodings to the corresponding characters.

+ If /url/ has a <query> component, then the <query> component is included
+ in a Uri-Query option after converting all percent-encodings to the corresponding
+ characters. In case the <query> doesn't fit
+ within a single option, the Uri-Query Option MAY be included multiple
+ times in a request such that the concatenation of the values results in
+ the single <query>. All but the last instance of the Uri-Query Option MUST
+ have a value with a length of 270 bytes, and the last instance MUST NOT be empty.

Section 6.5:

  1. Let /resource name/ be the empty string.
  • For each Uri-Path

+ For the first Uri-Path

Option in the request, append a single character U+002F SOLIDUS

(/) followed by the option's value to /resource name/

+ For any additional Uri-Path options, concatenate the value to /resource name/.

  • Then converting any character that is not either in the
  • "unreserved" set, "sub-delims" set, a U+003A COLON (:) or U+0040 - COMMERCIAL AT (@) character, to its percent-encoded form.
  • For each

+ For the first

Uri-Query Option in the request, append a single

character U+003F QUESTION MARK (?) (first option) or U+0026
AMPERSAND (&) (subsequent options) followed by the option's
value to /resource name/.

+ For any additional Uri-Query options, concatenate the value to /resource name/.

+ New step 8a.

+ Then convert any character in /resource name/ that is not either in the
+ "unreserved" set, "sub-delims" set, a U+003A COLON (:) or U+0040 + COMMERCIAL AT (@) character, to its percent-encoded form.

Attachments (1)

smime.p7s (4.3 KB) - added by zach@… 11 years ago.
Added by email2trac

Download all attachments as: .zip

Change History (5)

comment:1 Changed 11 years ago by zach@…

Message received by email on Fri, 28 Oct 2011 13:44:18 +0000, inserted by email2trac:

Hi,

I entered this as a ticket not to lose track of the changes needed. This text
now includes all the changes I think would be necessary for this update.
Please take a look if you can spot bugs or have improvement suggestions.

We should hear some more feedback on making this change before implementing
it. So far I have heard decent support on the mailing list. Olaf brought up a
possible normalization issue with Uri-Path, but I think that was a
misunderstanding. I am just returning from the an ETSI M2M meeting and can
confirm that the current -07 model is a broken for them, and the general
expectation is that we will fix this.

Please let us know your thoughts by Monday.

Thanks,
Zach

On Oct 28, 2011, at 4:35 PM, core issue tracker wrote:

smime.p7s

Changed 11 years ago by zach@…

Added by email2trac

comment:2 Changed 11 years ago by zach@…

It was pointed out by Carsten on the list, that this approach of moving a non-segmented Uri-Path or -Query option breaks when used with UTF-8 for representing the URI over the air, and thus simplifying end-points by working with purely normalized URIs.

Therefore, this ticket should now concentrate on fixing the maximum 15 option limitation in CoAP. Some initial approaches are defined in draft-bormann-coap-misc-09.

comment:3 Changed 11 years ago by zach@…

  • Summary changed from Uri-Path and Uri-Query to Removing 15 option limit

At IETF82 in Taipei, the WG meeting found consensus on the following solution:

When the value of OC is 0b1111 (then a reserved value), then the number of options is unlimited, and an "end-of-options" marker is used to indicate no more options (ob11110000).

comment:4 Changed 11 years ago by zach@…

  • Resolution set to fixed
  • Status changed from new to closed

Done.

Note: See TracTickets for help on using tickets.