Subject: [Sip] multiple bodies in any SIP message

From: Hadriel Kaplan <[email-masked]>
Date: Tue, 2 Dec 2008 23:03:52 -0500

With regards to how to handle multiple body parts in any SIP message, I believe the issue we're concerned with is how to handle body-parts that are not for the actual context of the SIP message, in a backwards-compatible way, right?

In other words, the context for bodies by default is based on their message method type, and possibly package if the method type has packages (SUB/NOT/PUB, and now INFO).  And since for 3261 the Content-Disposition's default means "render" (unless C-T is app/sdp), then no C-D means render - where "render" has different meanings based on the context too.  For MESSAGE/INVITE/BYE it's basically render to the user in some fashion; for package ones it's render to the package application, which effectively is the "user" of the message.  Right?

So ISTM that the body-handling draft does that.  For new extensions going forward it would be done with a Content-ID and a C-D of "by-reference" in MIME, with a SIP header using a CID.  For older extensions it's handled by the option tags they already define, to make sure the recipient understands the extension and thus its additional body part's context. (I don't like that, but that's life)  And it's only really a problem for cases where the content-type collides with something valid for the message's context/package.

So I'm back to: this is no different for INFO.  INFO has a context, we're adding a sub-context with Info-Package to fix collisions of same content-types for different uses, and any SIP extension going forward uses a CID and content-id and C-D of 'by-reference' if it's not tied to the message's context.  The Info draft only needs to reference the body-handling draft, call out the fact that INFO and its Info-Package creates a context, and a quick reminder on what that means.  We can then pull out all the current text about bodies in the draft, including the cid parameter and such, and move on to more interesting things like responses and actually defining packages. :)

-hadriel
_______________________________________________
Sip mailing list  https://www.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use [email-masked] for questions on current sip
Use [email-masked] for new developments on the application of sip

---

From: Paul Kyzivat <[email-masked]>
Date: Wed, 03 Dec 2008 09:58:05 -0500

Hadriel Kaplan wrote:
> With regards to how to handle multiple body parts in any SIP message,
> I believe the issue we're concerned with is how to handle body-parts
> that are not for the actual context of the SIP message, in a
> backwards-compatible way, right?

Sort of. 3261 already introduced the possibility for some of them - 
'alert' and 'icon' bodies, as well as S/MIME.

Many implementations likely simply never bothered to consider any of 
that. And those that did may have used a variety of techniques to 
identify the parts they care about for particular purposes.

So "backwards-compatible" depends a lot of what has already been 
implemented in the wild, not just what the specs say.

IMO, if you read 3261 carefully, then you need to sort out most of the 
existing use cases based on the Content-Disposition. However there is 
great ambiguity about how to interpret multipart bodies themselves if 
they lack a C-D.

> In other words, the context for bodies by default is based on their
> message method type, and possibly package if the method type has packages
> (SUB/NOT/PUB, and now INFO).  And since for 3261 the Content-Disposition's
> default means "render" (unless C-T is app/sdp), then no C-D means render -
> where "render" has different meanings based on the context too.  For

The above is a reasonable interpretation, and consistent with the 
body-handling draft.

> MESSAGE/INVITE/BYE it's basically render to the user in some fashion; for

This certainly seems to be the intuitive interpretation and its hard to 
find a reason not to follow it.

> package ones it's render to the package application, which effectively is
> the "user" of the message.  Right?

I think we are *forced* to take this interpretation for the existing 
uses in order to have any sort of backward compatibility. But IMO it is 
a perversion of "render".

> So ISTM that the body-handling draft does that. 

Yes. But I think we should consider the existing uses to be 
"grandfathered", rather than establishing a precedent for "render" in 
future uses. (That point may be debatable.)

> For new extensions going
> forward it would be done with a Content-ID and a C-D of "by-reference" in
> MIME, with a SIP header using a CID. 

We have two choices that the extension can make. It can do as you say. 
Or it can base things on a content-disposition type. If so it will need 
to define what that means in the contexts it covers.

For instance some new FOOBAR method might require a body in some cases 
and specify:
- the C-D for *its* body is "foobar"
- or the the C-D for its body is "render", and that such body part(s?)
   should be "rendered" by carrying out some specified processing
- or it could introduce a new header, which references the body part,
   which then has a C-D of "by-reference".

*In principle* an extension could simply define a new C-D, and the 
processing that should occur when a part with the disposition is 
encountered, independent of the method it is in. That would be 
*relatively* safe if it was always passed with handling=optional. But 
that might not work out so well in practice.

An extension *header* that needs to reference a body is more 
constrained. Based on the body-handling draft, the body part it 
references can be of any C-D, but it ought to be "by-reference" unless 
the constructor of the message wants the same body part to be processed 
once according to its reference, and again according to whatever 
implicit processing should be done based on its disposition.

There are other considerations if one body part references another body 
part.

The point is that, future extensions should clearly specify how this 
should be done.

> For older extensions it's handled by
> the option tags they already define, to make sure the recipient understands
> the extension and thus its additional body part's context. (I don't like
> that, but that's life)  And it's only really a problem for cases where the
> content-type collides with something valid for the message's context/package.

The claim that its only a problem when the content-type collides is 
problematic. That implies a certain algorithm for deciding how to 
process body parts. Not an obvious one, or one that is written down 
anywhere.

IMO C-D takes precedence over C-T for deciding how to process a body 
part. If I get a body part with a C-D of "render" and a C-T of 
application/SDP, then I should not process it as an offer/answer. Rather 
I should be looking for how to "render" it based on the definition of 
render for this method. If I don't know how to render an application/sdp 
body (quite likely) then it is just erroneous.

Now maybe my opinion is wrong. But if so, then we should define whatever 
rules we think there should be.

> So I'm back to: this is no different for INFO.  INFO has a context, we're
> adding a sub-context with Info-Package to fix collisions of same content-types
> for different uses, and any SIP extension going forward uses a CID and
> content-id and C-D of 'by-reference' if it's not tied to the message's context.

As Eric proposed it, the new info-packages don't depend on the INFO 
context, since they use CID references. Only the legacy INFO depends on 
the INFO context.

I think it remains an open issue if that is the way we want it.

> The Info draft only needs to reference the body-handling draft, call out the
> fact that INFO and its Info-Package creates a context, and a quick reminder on
> what that means.  We can then pull out all the current text about bodies in the
> draft, including the cid parameter and such, and move on to more interesting
> things like responses and actually defining packages. :)

If the Info-Package header is to reference the body part using cid, then 
  the draft can't avoid mentioning that.

And I think it needs to be more explicit about how body parts relate to 
legacy info - explaining that there is a special meaning of "render" for 
legacy INFO messages.

Then there is the question of what "render" means for an INFO that 
carries an info-package. My guess is that we don't want to allow a 
single INFO to have both an Info-Package *and* a legacy INFO body. So I 
think it will be needful to define that in a new INFO, bodies of 
disposition "render" (other than multipart/mixed) will be ignored.

	Thanks,
	Paul