[telepathy-gabble/master] Allow session-info before the session is active.
Will Thompson
will.thompson at collabora.co.uk
Thu Apr 2 04:23:57 PDT 2009
Else, <ringing/> notifications would be rejected.
---
src/jingle-session.c | 9 ++++++---
tests/twisted/jingle/call-state.py | 21 +++++++++++++++++++++
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/src/jingle-session.c b/src/jingle-session.c
index 6d6b412..5c990ab 100644
--- a/src/jingle-session.c
+++ b/src/jingle-session.c
@@ -96,23 +96,26 @@ typedef struct {
/* gcc should be able to figure this out from the table below, but.. */
#define MAX_ACTIONS_PER_STATE 11
+/* NB: JINGLE_ACTION_UNKNOWN is used as a terminator here. */
static JingleAction allowed_actions[MAX_JINGLE_STATES][MAX_ACTIONS_PER_STATE] = {
/* JS_STATE_PENDING_CREATED */
{ JINGLE_ACTION_SESSION_INITIATE, JINGLE_ACTION_UNKNOWN },
/* JS_STATE_PENDING_INITIATE_SENT */
{ JINGLE_ACTION_SESSION_TERMINATE, JINGLE_ACTION_SESSION_ACCEPT,
JINGLE_ACTION_TRANSPORT_ACCEPT, /* required for GTalk4 */
- JINGLE_ACTION_DESCRIPTION_INFO,
+ JINGLE_ACTION_DESCRIPTION_INFO, JINGLE_ACTION_SESSION_INFO,
JINGLE_ACTION_TRANSPORT_INFO, JINGLE_ACTION_UNKNOWN },
/* JS_STATE_PENDING_INITIATED */
{ JINGLE_ACTION_SESSION_ACCEPT, JINGLE_ACTION_SESSION_TERMINATE,
JINGLE_ACTION_TRANSPORT_INFO, JINGLE_ACTION_CONTENT_REJECT,
JINGLE_ACTION_CONTENT_MODIFY, JINGLE_ACTION_CONTENT_ACCEPT,
JINGLE_ACTION_CONTENT_REMOVE, JINGLE_ACTION_DESCRIPTION_INFO,
- JINGLE_ACTION_TRANSPORT_ACCEPT, JINGLE_ACTION_UNKNOWN },
+ JINGLE_ACTION_TRANSPORT_ACCEPT, JINGLE_ACTION_SESSION_INFO,
+ JINGLE_ACTION_UNKNOWN },
/* JS_STATE_PENDING_ACCEPT_SENT */
{ JINGLE_ACTION_TRANSPORT_INFO, JINGLE_ACTION_DESCRIPTION_INFO,
- JINGLE_ACTION_SESSION_TERMINATE, JINGLE_ACTION_UNKNOWN },
+ JINGLE_ACTION_SESSION_TERMINATE, JINGLE_ACTION_SESSION_INFO,
+ JINGLE_ACTION_UNKNOWN },
/* JS_STATE_ACTIVE */
{ JINGLE_ACTION_CONTENT_MODIFY, JINGLE_ACTION_CONTENT_ADD,
JINGLE_ACTION_CONTENT_REMOVE, JINGLE_ACTION_CONTENT_REPLACE,
diff --git a/tests/twisted/jingle/call-state.py b/tests/twisted/jingle/call-state.py
index cf6c5a5..39640a2 100644
--- a/tests/twisted/jingle/call-state.py
+++ b/tests/twisted/jingle/call-state.py
@@ -59,12 +59,33 @@ def test(jp, q, bus, conn, stream):
stream.send(make_result_iq(stream, e.stanza))
jt.set_sid_from_initiate(e.query)
+
+ # The other person's client starts ringing, and tells us so!
+ node = jp.SetIq(jt.peer, jt.jid, [
+ jp.Jingle(jt.sid, jt.jid, 'session-info', [
+ ('ringing', ns.JINGLE_RTP_INFO_1, {}, []) ]) ])
+ stream.send(jp.xml(node))
+
+ q.expect('dbus-signal', signal='CallStateChanged',
+ args=[handle, cs.CALL_STATE_RINGING])
+
+ call_states = chan.CallState.GetCallStates()
+ assert call_states == { handle: cs.CALL_STATE_RINGING }, call_states
+
jt.accept()
# Various misc happens; among other things, Gabble tells s-e to start
# sending.
q.expect('dbus-signal', signal='SetStreamSending', args=[True])
+ # Plus, the other person's client decides it's not ringing any more
+ node = jp.SetIq(jt.peer, jt.jid, [
+ jp.Jingle(jt.sid, jt.jid, 'session-info', [
+ ('active', ns.JINGLE_RTP_INFO_1, {}, []) ]) ])
+ stream.send(jp.xml(node))
+
+ q.expect('dbus-signal', signal='CallStateChanged', args=[ handle, 0 ])
+
call_states = chan.CallState.GetCallStates()
assert call_states == { handle: 0 } or call_states == {}, call_states
--
1.5.6.5
More information about the telepathy-commits
mailing list