As a swag for how to encode this in actual headers, how about:
INVITE ...
Exchange-Events: dtmf;sendrecv, foo;sendonly;
bar;recvonly; xyzzy;sendrecv
200 OK
Exchange-Events: dtmf;recvonly, foo;recvonly;
bar:sendonly; xyzzy:inactive
Each event type named in Exchange-Events in the INVITE is a candidate
for use with the directionality specified by the direction parameter.
Event types not listed implicitly have a direction of "inactive". Event
types listed without a direction are implicitly sendrecv.
The Exchange-Events in the response defines which event types will
actually be exchanged, and the direction(s) they will be sent. Default
directions are the same as above. The valid directions in the response
are constrained by what was in the request in the same way as in sdp.
One agreed upon, NOTIFY may be sent in the agreed upon direction(s)
within the INVITE dialog usage. Whether an initial NOTIFY is required
will be determined on a per-event-package basis. (Its not needed to
establish the dialog, so its a matter if it is semantically needed in
the context of the event type.)
Just as there are INVITEs that don't offer SDP (because they don't know
what to offer) there is a need for INVITEs that don't offer events. An
INVITE that contains no Exchange-Events header is not offering any. In
that case the offer of events is in a reliable response and the final
answer about what events will be used is in the ACK or PRACK. (To
indicate that you don't desire to exchange any events, include a
Exchange-Events header with no events listed.)
There is no separate subscription or timer. The dialog usage is
refreshed by INVITE or UPDATE in the conventional manner. Events to be
exchanged are renegotiated from scratch with every reINVITE or UPDATE.
If an event type takes parameters, they can be included in
Exchange-Events. That can work in some simple cases, but not in complex
cases. I think event types that need complex parameters will be
problematic in this usage. (Note that the kpml package only requires
parameters to identify the dialog. In this usage those won't be needed.)
There is a problem if the event type may (or must) use a body in the
subscribe. The kpml package falls into this category. :-(
The body could simply be included in the message carrying the
Exchange-Events header. But that potentially means a bunch of body parts
with the recipient having the problem of deciding how each part should
be matched to a particular event type. That is more or less the same
problem we are trying to solve here, so its not good. Also, it would
seem that every time you send a reinvite or update you might have to
send these again.
One alternative is simply to say that this mechanism cannot be used with
event packages that require a subscribe body. That seems to exclude the
use of KPML. :-(
Paul
Paul Kyzivat wrote:
We don't need all these nuances - just a few. It isn't important to say
"I could deal with X if you sent it but I don't want you to send it."
There are two paradigms already used in sip, and discussed here, and
either could be used:
1) X tells Y: I would like you to send A,B,C
Y tells X: I will send you B,C; I would like you to send B,C,D,E
X tells Y: Please send B,E
2) X tells Y: I can send A,B,C; want to receive B,C,D,E
Y tells X: I will send you B,C; Please send me B,E
The use of the directionality attributes is an encoding of (2):
2b) X tells Y: sendonly(A), sendrecv(B,C), recvonly(D,E)
Y tells X: inactive(A,D), sendrecv(B), sendonly(C), recvonly(E)
Paul
Dean Willis wrote:
On Oct 17, 2007, at 9:39 AM, Hadriel Kaplan wrote:
INVITE must contain:
- these are the events I am willing to send
- these are the events I desire to receive
Do we need that first line ? Or do we just need "These are the events
I'm willing to receive. If I get them, great. If I don't, well, I
don't care, I'll assume that sending them wasn't important to you."
But that's not always the case with dtmf. If a softphone makes a
call, would the softphone always care to receive DTMF? Not all of
them would. But they would want to tell the far-end they can _send_
DTMF. Not that I think this means we need a send/receive distinction
- I think just a "I support dtmf-info" semantic is good enough for dtmf.
I think we need two different approaches here.
There is a big difference between "I could deal with X should you want
to send it" and "I NEED you to send me X" or "I want to know if you
intend to send me X".
The first is a simple declarative, along the lines of what we do with
Supported and Allow. The latter two are more directive, something like
what we do with a Require.
Otherwise said, there's a difference between "I support" and "I will
use" or "Will you use?".
Is there a use case for turning this into a full bidirectional offer-
answer?
I guess the question is if it matters that a UA which can only send
event foo but can't do anything useful receiving foo, could be sent
foo anyway. For example, suppose we created an event-package for a
jpeg picture, for remote-party call display. If a hard-phone has no
LCD to display a picture, but has a stored jpeg to give to the
far-end, would it matter if it can't say "I can send a jpeg but don't
want to receive one"? Obviously it could just accept a received one
(ie, 200 ok the INFO) and discard the jpeg. But is that the right
thing to do? I dunno. We could just leave the concept up to
specific info-event-package definitions to handle - i.e., make an
event-package define send vs. receive event-packages pairs if it
cares about it.
I suspect that things that need two way send-receive negotiation need
to use full subscriptions. Actually, they may need to use full
subscriptions in each direction.
But let's play with this negotiation a minute.
Suppose instead of having a single header field for "all the
events-in-invite-dialogs we know about", we have two header fields:
one for events we are willing to receive, and another for events we
are offering to send. Those two sets might not match for a given
device, but they would need to reduce down to pairwise matches after
the offer-answer phase, so that neither end would be intending to send
something the other hadn't indicated a willingness to receive.
So, for example. Alice might INVITE Gateway, saying "I understand
keymap and image-display events and may send you keypad events", and
gateway might answer in the 200 OK "I understand keypad events and may
send you keymap events" (note that gateway is NOT offering to send
image-display events) . Alice might then echo (in ACK) "We agree that
I may send you keypad events and that you may send me keymap events".
Or, as you suggested, we could define directional event packages and
use a single header field.
Alice might INVITE Gateway, saying "I'm offering to use send-keypad
and receive-keymap and receive-image-display events". Gateway responds
with "I will support receive-keypad and send-keymap events" (note it
didn't include send-image-display). Alice then ACKS with "I understand
I will be doing send-keypad and receive-keymap".
The two are functionally equivalent, I think we just have a syntax
question. I suspect that the two-header approach is easier to parse.
But a broader question is lurking here . . .
How is this not just an example of a more general feature or
capability negotiation mechanism? If instead of "event packages" we
talk about "features", where a feature might be "send event X",
"receive event X", or perhaps something broader like "transition to a
DOOM game"? Could we use it to discover a peers screen resolution,
keyboard layout, or access network bandwidth? Could we do the same
media-channel O/A that we do in SDP? I believe the answer is "yes",
but it requires a registry process for each of the "features", much as
we currently have a registry process for event packages. Do we want to
go in this direction? If not, where do we draw the line? And just
exactly how does this relate to RFC 3840/3841 preferences and
capabilities negotiation (which, I might add, don't really work in a
proxyless world).
--
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
_______________________________________________
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