[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