On Oct 10, 2007, at 6:14 PM, Francois Audet wrote:
(d) they think it's a waste of resources to establish
multiple additional subscription dialogs (there may be other
type of data than DTMF they are willing to receive) which in
many cases may not even be used during the call (it can not
be assumed that the one sending the subscription always knows
exactly when it will receive events). Maybe DTMF is not the
best example in the world (my fault - I should have been more
generic), but I am sure there could be events which would not
be used in a very high percentage of all calls, but still the
additional subscription dialog(s) would have to be
established - just in case.
Maybe a way to subscribe to packages within an INVITE dialog would
be suitable. You then would get the NOTIFYs withind the dialog, and
they wouldn't be out-of-the-blue because you would have subscribed
to those events explicitly with some Allow-Event in the INVITE.
Hmm. In-dialog event notification using INVITE as an explicit
subscription trigger. That works, mostly.
Other people would argue that the semantics are better preserved with
a a new SIP method that is defined to carry whatever sort of blob
we're talking about in the specific context of the application usage.
We'd then add that method name to the list of supported methods given
in the Allow header field. Of course, this will eventually give us
"Really Big" Allow header fields, which means the negotiation
mechanism is broken. We need an easier way for one end to ask "Hey,
do you understand this?".
Others would say that the we're better off defining a session
protocol designed to transport the blobs in question, along with SDP
extensions to negotiate this protocol, NAT-traversal hooks to allow
us to talk about the connectivity of the blob-transferral protocol,
then do a reINVITE exchange to add the new blob-session to the
existing session.
Yet others would say that we already have a blob-transferral protocol
(MSRP), along with the nat traversal hooks and SDP extensions needed
to negotiate it, and should therefore push the problem out one layer
of protocol and make it an MSRP problem. This begs the question of
how MSRP negotiates as to whether the context and content are agreed
on both ends, which AFAIK it does little better at than INFO.
So what's the difference?
All (assuming we figure out the MSRP context negotiation problem)
explicitly declare the understanding of and the desire to receive
messages within this dialog/session that contain the data we've
defined and assure that the application context (the "what do I do
with this stuff" problem) is mutually understood.
The differences are that one approach is the extension of an
application protocol to support a new application, while two others
are extensions of existing transport protocols (SIP, MSRP) to carry
new payloads in contexts determined by the applications. The last one
implies the development of an all-new transport protocol (or perhaps
the modification of some other protocol like RTP) as well as
extension to our descriptive protocol (SDP). These are very different
things, and part of the reason that SIP has gotten more complex than
I would like is that we haven't been operating with a clear
understanding of these differences.
Personally, I think that we've got a lot of complexity there that we
didn't really need. If SIP had been designed from the ground-up as a
transport protocol for arbitrary messages and the application were a
function of the message content, we'd have a much clearer model of
what to do. But it wasn't built that way, so now we need some guiding
principles on when each sort of approach is appropriate. Without it,
we're just going to go around in circles on the "Is INFO harmful, and
if so why?" carousel.
Since I can't leave it hanging there, I'd like to propose some rules
of thumb:
1) If INFO had context negotiation, we'd have a complete protocol and
would quite possibly only need new SIP method types if there was a
need for a fundamental change to the SIP state machine. Even without
INFO, we have the same functionality available, albeit at the
overhead of an additional dialog. So, I suggest we only introduce new
SIP methods if there's a need to change the underlying machine. If
we're just moving new data in application contexts, we can do that
without changing SIP itself. I really don't want to keep the SIP WG
around just so we can specify a new SIP method for each application
somebody dreams up.
2) Since SIP can provide for the transport of arbitrary data and
application context, we should only use "session" transport of the
data when that dataflow itself has fundamentally different
characteristics -- essentially, when it is a long-lived and
relatively continues flow, aka a "stream". Quite possibly, this
should extend to only dataflows that have the properties of RTP --
time sensitive, relatively loss insensitive, and so bulky we need
them to be as end-to-end as we can even if it means building more
infrastructure to make that happen. And yes, I think MSRP is a
misguided effort -- by the time we've built MSRP relays and all the
extra cruft, we've duplicated SIP's message proxy operation, ICE,
GRUU, STUN-relay, and so on. Personally, I'm not even sure that this
level of separation is a good idea. Coaxial signaling and media have
great advantages for firewall traversal. But we have what we have. In
short, use RTP/MSRP for "sessions", and SIP event payloads (or
contextually-adapted INFO) for everything else.
3) There is no rule 3.
--
Dean
_______________________________________________
Sip mailing list https://www1.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use [EMAIL PROTECTED] for questions on current sip
Use [EMAIL PROTECTED] for new developments on the application of sip