Re: [core] Review of draft-ietf-core-multipart-ct-02

Carsten Bormann <> Mon, 05 November 2018 06:24 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 5296D12F1A6 for <>; Sun, 4 Nov 2018 22:24:24 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -4.2
X-Spam-Status: No, score=-4.2 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 8aJ7Er3b25zD for <>; Sun, 4 Nov 2018 22:24:21 -0800 (PST)
Received: from ( [IPv6:2001:638:708:30c9::12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 3790712EB11 for <>; Sun, 4 Nov 2018 22:24:21 -0800 (PST)
X-Virus-Scanned: amavisd-new at
Received: from ( [IPv6:2001:638:708:30c8:406a:91ff:fe74:f2b7]) by (8.14.5/8.14.5) with ESMTP id wA56OBsY015332; Mon, 5 Nov 2018 07:24:16 +0100 (CET)
Received: from [IPv6:2001:67c:1232:144:4059:1844:7999:a8a8] (unknown [IPv6:2001:67c:1232:144:4059:1844:7999:a8a8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPSA id 42pN1M5tVnz1Bqf; Mon, 5 Nov 2018 07:24:07 +0100 (CET)
Content-Type: text/plain; charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 11.5 \(3445.9.1\))
From: Carsten Bormann <>
In-Reply-To: <>
Date: Mon, 5 Nov 2018 13:24:03 +0700
Cc: "" <>, "" <>
X-Mao-Original-Outgoing-Id: 563091832.224184-f84eed4829b8d8a4a2b306d45a3385f2
Content-Transfer-Encoding: quoted-printable
Message-Id: <>
References: <>
To: "Fossati, Thomas (Nokia - GB/Cambridge)" <>
X-Mailer: Apple Mail (2.3445.9.1)
Archived-At: <>
Subject: Re: [core] Review of draft-ietf-core-multipart-ct-02
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Constrained RESTful Environments \(CoRE\) Working Group list" <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Mon, 05 Nov 2018 06:24:24 -0000

Here are my two cents…

> On Oct 31, 2018, at 00:42, Fossati, Thomas (Nokia - GB/Cambridge) <> wrote:
> Hi Klaus,
>> 1. " This memo defines application/multipart-core, an
>> application-independent media-type" -- General purpose media-type?
>> (Why does it have "core" in the name if it's general-purpose?)
> It's got "core" because it specifies the use of CoAP content formats for
> constructing the aggregate, but that doesn't invalidate the general
> purpose-ness, I think.


>> 1. "that can be used to combine representations of several different
>> media types" -- Does it have to be several media types or is 2 media
>> types enough? 1? 0?
> s/several/two or more/ ?

“Several” was not intended to exclude 2, 1, or 0.
I see that the dictionary does this.
(It can be 0 or 1 in the case introduced by draft-bormann-core-maybe.)

>> 1. "into a single CoAP message-body with minimal framing overhead,
>> each along with a CoAP Content-Format identifier." -- Can it only be
>> used in a CoAP message-body?
> s/CoAP message-body/message/ ?

Well, this is a body, which might even be transmitted in block-wise fashion, so it is not tied to messages.
Maybe “CoAP request or response body” is the best way to fit this.
(There is no implication that it can’t also be used to brush your teeth.)

>> 1.  "Applications using the application/multipart-core Content-Format
>> define the internal structure of the application/multipart-core
>> representation." -- Isn't the internal structure of the format defined
>> by figure 1? Or is this about assigning further meaning to positions
>> in the array?
> Yes, it's the fact that the exact position of a type inside the array is
> part of the structural definition - in fact, the position is the unique
> name of the field inside the aggregate type.

I think Klaus wants us to point out that the application needs to stay in the CDDL.

>> 1. "For example, one way to structure the sub-types specific to an
>> application/multipart-core container is to always include them at the
>> same fixed position." -- Ah, I see. Join this paragraph with the
>> previous one.
> Makes sense.
>> 1. "This specification allows to indicate that an optional part is not
>> present by substituting a null value for the representation of the
>> part." -- Do we need this?
> How do you suggest we deal with optional values?

You could leave them out entirely, but then the application cannot simply use a positional structure.

>> 1. "Optionally, an application might use the general format defined
>> here, but also register a new media type and an associated
>> Content-Format identifier -- typically one in the range 10000-64999 --
>> instead of using application/multipart-core." -- What's an example
>> where an application would do this? I can't imagine any where I'd
>> recommend this.
> I don't see how that could harm (besides, if someone wants to do it, we
> cannot prevent it); that said I'm not opposed to removing text that is
> not strictly necessary.

It was meant as an encouragement to define application-specific media types in a way that conforms with the structure of multipart-ct where that makes sense.

>> 1. "typically one in the range 10000-64999" -- Better not to state the
>> range explicitly as that locks the Content-Formats registry into
>> providing this range for this purpose forever.
> If we remove the above, this will go together with that.

Right.  We could explicitly say “First Come First Served” instead.

>> 2. -- There should be a sub-section or paragraph specifying what a
>> recipient of a application/multipart-core representation should do if
>> it encounters something that doesn't match the grammar. Does the whole
>> array become unusable when there is an unexpected element, or can a
>> recipient use the array up to the unexpected element? Should a
>> recipient try to do error recovery and skip to the next element? This
>> has impact on how the format can be evolved in the future.
> Isn’t that application specific?

Please see draft-iab-protocol-maintenance

>> 2. "(Future extensions might want to include additional alternative
>> ways of specifying the media type of a representation in such a
>> position.)" -- This side note feels a bit out of place and isn't
>> really helpful. What should a reader of the document do with this
>> information?
> Yep, I agree this is out of scope and we should remove it.

If we don’t want to do this, we should remove it.
(I still believe we should do this, now.)

>> 3. -- Is the "Observing Resources" example the prime usage example for
>> -multipart-ct? If not, shouldn't there be an example for the prime use
>> case?
> I don't think there are prime use cases in a "hierarchical" sense.
> Anything that fits is good to go :-)
>> 3.1. -- I see that draft-ietf-core-coap-pubsub-05 is still proposing a
>> new response code (2.07) for this scenario. Will -pubsub switch to
>> -multipart-ct as described in this section? If not, better remove the
>> example.
> This one is for Carsten, but I think the example in 3.1 is not
> necessarily pubsub specific, though clearly it applies quite well to
> pubsub.

Let’s discuss this in the WG today.

>> 3.2 "Implementation hints" -- This doesn't seem like a usage example.
>> Promote it to a top-level section.
> Agree
>> 3.2 "In effect, the serialization for a single object is done by
>> prefixing the object with information about its content-format (here:
>> 0x82 0x00) and its length (here: 0x4b)." -- What about the array
>> containing the two elements?
> Sorry, I don’t understand this.

Klaus points out that there is one more byte, something like 0x81.

>> 4.1 "Fragment identifier considerations: N/A" -- Change to same as
>> CBOR?

Should we also copy the text: “(At
      publication of this document, there is no fragment identification
      syntax defined for “application/cbor”.)"

>> 6.1 "[RFC7252]" -- Just to confirm: This is a normative reference
>> because of the use of CoAP Content-Format numbers, right?
> Yes
>> 6.1 "[RFC7641]" -- This should be an informative reference, as Observe
>> seems to be referenced only in the usage examples section.
> Agree
> Thank you very much!


Grüße, Carsten