Re: [Sip] Support for Multipart/MIME

Paul Kyzivat <pkyzivat@cisco.com> Wed, 23 May 2007 14:35 UTC

Return-path: <sip-bounces@ietf.org>
Received: from [127.0.0.1] (helo=stiedprmman1.va.neustar.com) by megatron.ietf.org with esmtp (Exim 4.43) id 1HqrvZ-0000jM-Vg; Wed, 23 May 2007 10:35:01 -0400
Received: from sip by megatron.ietf.org with local (Exim 4.43) id 1HqrvY-0000jD-BB for sip-confirm+ok@megatron.ietf.org; Wed, 23 May 2007 10:35:00 -0400
Received: from [10.91.34.44] (helo=ietf-mx.ietf.org) by megatron.ietf.org with esmtp (Exim 4.43) id 1HqrvY-0000j5-1V for sip@ietf.org; Wed, 23 May 2007 10:35:00 -0400
Received: from rtp-iport-2.cisco.com ([64.102.122.149]) by ietf-mx.ietf.org with esmtp (Exim 4.43) id 1HqrvW-00045L-H3 for sip@ietf.org; Wed, 23 May 2007 10:35:00 -0400
Received: from rtp-dkim-2.cisco.com ([64.102.121.159]) by rtp-iport-2.cisco.com with ESMTP; 23 May 2007 10:34:58 -0400
X-IronPort-AV: i="4.14,570,1170651600"; d="scan'208"; a="121836356:sNHT61334968"
Received: from rtp-core-1.cisco.com (rtp-core-1.cisco.com [64.102.124.12]) by rtp-dkim-2.cisco.com (8.12.11/8.12.11) with ESMTP id l4NEYwB3004083; Wed, 23 May 2007 10:34:58 -0400
Received: from xbh-rtp-201.amer.cisco.com (xbh-rtp-201.cisco.com [64.102.31.12]) by rtp-core-1.cisco.com (8.12.10/8.12.6) with ESMTP id l4NEYjBi028096; Wed, 23 May 2007 14:34:58 GMT
Received: from xfe-rtp-202.amer.cisco.com ([64.102.31.21]) by xbh-rtp-201.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.1830); Wed, 23 May 2007 10:34:40 -0400
Received: from [161.44.174.124] ([161.44.174.124]) by xfe-rtp-202.amer.cisco.com with Microsoft SMTPSVC(6.0.3790.1830); Wed, 23 May 2007 10:34:40 -0400
Message-ID: <46545100.5040707@cisco.com>
Date: Wed, 23 May 2007 10:34:40 -0400
From: Paul Kyzivat <pkyzivat@cisco.com>
User-Agent: Thunderbird 1.5.0.10 (Windows/20070221)
MIME-Version: 1.0
To: Gonzalo Camarillo <Gonzalo.Camarillo@ericsson.com>
Subject: Re: [Sip] Support for Multipart/MIME
References: <7374777208BDC7449D5620EF9423256703F85957@esealmw113.eemea.ericsson.se> <0ee901c7931e$dd43f9b0$c4a36b80@amer.cisco.com> <1ECE0EB50388174790F9694F77522CCF106564B4@zrc2hxm0.corp.nortel.com> <4643B58A.3060407@cisco.com> <464ABDD6.9000503@ericsson.com> <464AF68A.4010105@cisco.com> <1ECE0EB50388174790F9694F77522CCF10788B8C@zrc2hxm0.corp.nortel.com> <4653FA1F.7050008@ericsson.com>
In-Reply-To: <4653FA1F.7050008@ericsson.com>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-OriginalArrivalTime: 23 May 2007 14:34:40.0423 (UTC) FILETIME=[7F1D8B70:01C79D47]
DKIM-Signature: v=0.5; a=rsa-sha256; q=dns/txt; l=8158; t=1179930898; x=1180794898; c=relaxed/simple; s=rtpdkim2001; h=Content-Type:From:Subject:Content-Transfer-Encoding:MIME-Version; d=cisco.com; i=pkyzivat@cisco.com; z=From:=20Paul=20Kyzivat=20<pkyzivat@cisco.com> |Subject:=20Re=3A=20[Sip]=20Support=20for=20Multipart/MIME |Sender:=20 |To:=20Gonzalo=20Camarillo=20<Gonzalo.Camarillo@ericsson.com>; bh=nHPIn0IIc158jNGJ1mbCmI9jQIk8YyR803sLkrenb+g=; b=kd6BXU5xyHdK+EG12TQ67WacFdT6Tgz4OXNIXBNHocsnDPv3JolYlVjgHaYpD2pT0jYV/J1h buXpC7h5/S34Tb+focvgfZedfxtqPBFnffDI0LmbO5FdOkgidKt+NLdE;
Authentication-Results: rtp-dkim-2; header.From=pkyzivat@cisco.com; dkim=pass ( sig from cisco.com/rtpdkim2001 verified; );
X-Spam-Score: 0.0 (/)
X-Scan-Signature: 86f85b2f88b0d50615aed44a7f9e33c7
Cc: sip@ietf.org, Francois Audet <audet@nortel.com>, Dan Wing <dwing@cisco.com>, "Christer Holmberg (JO/LMF)" <christer.holmberg@ericsson.com>
X-BeenThere: sip@ietf.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Session Initiation Protocol <sip.ietf.org>
List-Unsubscribe: <https://www1.ietf.org/mailman/listinfo/sip>, <mailto:sip-request@ietf.org?subject=unsubscribe>
List-Post: <mailto:sip@ietf.org>
List-Help: <mailto:sip-request@ietf.org?subject=help>
List-Subscribe: <https://www1.ietf.org/mailman/listinfo/sip>, <mailto:sip-request@ietf.org?subject=subscribe>
Errors-To: sip-bounces@ietf.org

Gonzalo,

Thank you for doing this. It is a great start. I largely agree with what 
you have written.

One specific comment about the draft:

- Open issue in section 3: perhaps a new Reason code, to be used
   with a 415 response would be adequate.

I think there are a number of loose ends, some mentioned, some not. In 
many cases, while I have an opinion what the right answer might be I 
think it needs discussion. Here is what I came up with:

- How to determine what processing a body part should receive

In many cases the processing of a body part is determined by: the 
content disposition, the content type, and perhaps the context within 
which the message is received. For instance, this is true for type sdp 
with disposition session in an INVITE; for type text/plain with 
disposition render in a MESSAGE; and for type kpml with disposition ??? 
in a SUBSCRIBE. In these cases there is no overt *reference* to the body 
part.

In other cases the processing is determined by the context of a 
reference to the body part via a cid: url that references the Content-ID 
of the body part. You mentioned this as well.

The case I am concerned with is when there is ambiguity between these. 
For instance 3261 defines Content-Dispositions "alert" and "icon". While 
these aren't described very well, it appears that if a body part is 
present with disposition "alert" then it should be used for alerting 
based on its presence, without any overt reference. But there is also an 
Alert-Info header, which *could* contain a cid: url. If there was an 
Alert-Info header with a cid: url that referenced a body part, must that 
body part be of disposition "alert"?

Its my feeling that the definition of each disposition should specify 
how use decisions should be made for body parts having this disposition. 
There should be one or more dispositions that state that their use is to 
be determined by how they are referenced. And headers that might 
reference body parts should define the acceptable dispositions for the 
body parts that are referenced.

If a message contains a body part with type and disposition that defines 
how it is processed without need of a reference, and there *also* is a 
reference to it, then it should be processed both ways. (This however 
should happen rarely or never.)

- What Content-Disposition type should multipart bodies have?

When you have a multipart body, it has a disposition, and each of its 
contained body parts also has a disposition. I have never seen any 
specification of what disposition the multipart itself should have. None 
of the examples I have seen have had a Content-Disposition header in the 
multipart. According to the sip defaulting rules, a multipart body 
without a C-D header has disposition "render", which seems a bit weird.

In the case of multipart/alternative, I think the disposition type of 
all the contained body parts should be identical. I think it would also 
make sense for the multipart/alternative itself to contain the same 
disposition. That would simplify processing, because the whole thing 
could be ignored if the disposition has a type that will be ignored.

In the case of multipart/mixed, the disposition types of the contained 
body parts will typically vary. The type of the mixed body simply needs 
to be something that causes it to be processed. Using the default of 
"render" seems weird to me. It would make sense to me to have some 
special C-D type for this purpose. Potentially it could be defined as 
the default C-D for multipart/mixed in the same way that "session" is 
the default for type application/sdp.

- Must the recipient of a message process all multipart bodies and their 
contents? Recursively?

Note that a multipart body can contain other multipart body parts, thus 
potentially forming a tree of body parts of arbitrary shape and depth.

So, the developer of a UA will want to know: do I have to parse all of that?

I think the answer is: like anything else, you make this decision based 
on the disposition type and handling. (If you understand multipart/mixed 
(and you should) then you also understand that multipart/X where you 
don't know X should be processed the same as multipart/mixed.)

If handling is optional and the disposition type and content type are 
known to you, then you must parse it. Each contained body part is then 
processed based on its own disposition. If the handling is optional and 
the disposition type or content type are not known to you then you can 
ignore it.

(This puts a premium on having an agreed to disposition type that is 
typically used for multipart/mixed and which everyone that supports 
multipart is expected to support.)

- What "handling" value should be used for multipart bodies and the 
contained body parts?

If a body part is referenced by a cid: url in a header (or in another 
body part I suppose), then the handling of the body part should be required.

Contained, non-multipart body parts that aren't referenced by cid: can 
have handling required or optional as appropriate for their use.

A multipart body should have handling of required if any of the parts it 
contains are required. Otherwise it may have optional handling.

Multipart/alternative is tricky. Only one alternative is to be used, and 
it is assumed that some alternatives may not be understood. So it seems 
that all except the first contained body part should have optional 
handling. The first may be required or optional depending on whether its 
ok to handle none. And the handling of the multipart/alternative 
container is as above.

- What about "gratuitous" nesting of multiparts?

It seems that it is technically valid to wrap a body part, such as an 
SDP offer, in one or many levels of multipart wrappers. A recipient who 
receives such a thing, and processes it according to what Gonzalo has 
specified and what I have suggested above, should be able to deal with this.

But its not a good thing.

So I think we ought to at least state that the sender of a request 
SHOULD NOT use a multipart wrapper when there is only one part, and 
SHOULD NOT nest one multipart/mixed within another unless there is a 
*reference* to the nested one. (Instead of nesting, include all the 
parts in the outer multipart.) And a sender SHOULD NOT nest one 
multipart/alternative within another.

	Thanks,
	Paul

Gonzalo Camarillo wrote:
> Hi,
> 
> I have taken a stab at writing a quick draft about both issues (I agree 
> it makes sense to tackle them in a single document). Until it appears in 
> the archives, you can fetch it from:
> 
> http://users.piuha.net/gonzalo/temp/draft-camarillo-sip-body-handling-00.txt 
> 
> 
> I have marked a few open issues so that we can continue discussions 
> around those on the list (this is, of course, just an initial draft).
> 
> Cheers,
> 
> Gonzalo
> 
> 
> Francois Audet wrote:
>> My preference is one document.
>>> -----Original Message-----
>>> From: Paul Kyzivat [mailto:pkyzivat@cisco.com] Sent: Wednesday, May 
>>> 16, 2007 05:18
>>> To: Gonzalo Camarillo
>>> Cc: Audet, Francois (SC100:3055); sip@ietf.org; Dan Wing; Christer 
>>> Holmberg (JO/LMF)
>>> Subject: Re: [Sip] Support for Multipart/MIME
>>>
>>> Hi Gonzalo,
>>>
>>> I guess the question is whether we want to write a document 
>>> specifically focused on Content-Disposition, or if we want to combine 
>>> work on that with work on specifying use of multipart.
>>>
>>> They aren't the same thing, but content-disposition becomes more 
>>> significant when there are multiple body parts, so there is some 
>>> justification for combining the work.
>>>
>>>     Paul
>>>
>>> Gonzalo Camarillo wrote:
>>>> Hi,
>>>>
>>>> yes, Paul and I talked about writing a draft to clarify a 
>>> few issues
>>>> that relate to content dispositions in SIP a while ago. We 
>>> were quite
>>>> busy at that point and did not have time to write it, but 
>>> maybe it is
>>>> time to do it now.
>>>>
>>>> Cheers,
>>>>
>>>> Gonzalo
> 


_______________________________________________
Sip mailing list  https://www1.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use sip-implementors@cs.columbia.edu for questions on current sip
Use sipping@ietf.org for new developments on the application of sip