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