]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Changed to temporary namespaces to match with latest XEPs. As soon as
authorPhilippe Sultan <philippe.sultan@gmail.com>
Wed, 28 May 2008 14:10:48 +0000 (14:10 +0000)
committerPhilippe Sultan <philippe.sultan@gmail.com>
Wed, 28 May 2008 14:10:48 +0000 (14:10 +0000)
Jingle is completely standardized, we can set those namespaces to their
final values.

Added two attributes to the jingle_pvt struct to store the content
name attributes. Reported by Robert McQueen on Telepathy's framework
mailing list :
http://lists.freedesktop.org/archives/telepathy/2008-May/001971.html

Keeping working on our Jingle stack!

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@118644 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_jingle.c
include/asterisk/jingle.h

index e453e3e5a589590649eb7f516cb1845e879d0fad..372ebe3a6990758e8478e85532c9bb7fc0d1c663 100644 (file)
@@ -111,7 +111,9 @@ struct jingle_pvt {
        char cid_name[80];               /*!< Caller ID name */
        char exten[80];                  /*!< Called extension */
        struct ast_channel *owner;       /*!< Master Channel */
+       char audio_content_name[100];    /*!< name attribute of content tag */
        struct ast_rtp *rtp;             /*!< RTP audio session */
+       char video_content_name[100];    /*!< name attribute of content tag */
        struct ast_rtp *vrtp;            /*!< RTP video session */
        int jointcapability;             /*!< Supported capability at both ends (codecs ) */
        int peercapability;
@@ -956,7 +958,7 @@ static int jingle_newcall(struct jingle *client, ikspak *pak)
        struct jingle_pvt *p, *tmp = client->p;
        struct ast_channel *chan;
        int res;
-       iks *codec;
+       iks *codec, *content, *description;
 
        /* Make sure our new call doesn't exist yet */
        while (tmp) {
@@ -985,14 +987,41 @@ static int jingle_newcall(struct jingle *client, ikspak *pak)
                                sizeof(p->sid));
        }
        
-       /* codec points to the first <payload-type/> tag */     
-       codec = iks_child(iks_child(iks_child(iks_child(pak->x))));
-       while (codec) {
-               ast_rtp_set_m_type(p->rtp, atoi(iks_find_attrib(codec, "id")));
-               ast_rtp_set_rtpmap_type(p->rtp, atoi(iks_find_attrib(codec, "id")), "audio", iks_find_attrib(codec, "name"), 0);
-               codec = iks_next(codec);
+       /* content points to the first <content/> tag */        
+       content = iks_child(iks_child(pak->x));
+       while (content) {
+               description = iks_find_with_attrib(content, "description", "xmlns", JINGLE_AUDIO_RTP_NS);
+               if (description) {
+                       /* audio content found */
+                       codec = iks_child(iks_child(content));
+                       ast_copy_string(p->audio_content_name, iks_find_attrib(content, "name"), sizeof(p->audio_content_name));
+
+                       while (codec) {
+                               ast_rtp_set_m_type(p->rtp, atoi(iks_find_attrib(codec, "id")));
+                               ast_rtp_set_rtpmap_type(p->rtp, atoi(iks_find_attrib(codec, "id")), "audio", iks_find_attrib(codec, "name"), 0);
+                               codec = iks_next(codec);
+                       }
+               }
+               
+               description = NULL;
+               codec = NULL;
+
+               description = iks_find_with_attrib(content, "description", "xmlns", JINGLE_VIDEO_RTP_NS);
+               if (description) {
+                       /* video content found */
+                       codec = iks_child(iks_child(content));
+                       ast_copy_string(p->video_content_name, iks_find_attrib(content, "name"), sizeof(p->video_content_name));
+
+                       while (codec) {
+                               ast_rtp_set_m_type(p->rtp, atoi(iks_find_attrib(codec, "id")));
+                               ast_rtp_set_rtpmap_type(p->rtp, atoi(iks_find_attrib(codec, "id")), "audio", iks_find_attrib(codec, "name"), 0);
+                               codec = iks_next(codec);
+                       }
+               }
+               
+               content = iks_next(content);
        }
-       
+
        ast_mutex_unlock(&p->lock);
        ast_setstate(chan, AST_STATE_RING);
        res = ast_pbx_start(chan);
@@ -1318,6 +1347,8 @@ static int jingle_transmit_invite(struct jingle_pvt *p)
        payload_pcmu = iks_new("payload-type");
        payload_eg711u = iks_new("payload-type");
 
+       ast_copy_string(p->audio_content_name, "asterisk-audio-content", sizeof(p->audio_content_name));
+
        iks_insert_attrib(iq, "type", "set");
        iks_insert_attrib(iq, "to", p->them);
        iks_insert_attrib(iq, "from", client->jid->full);
@@ -1327,8 +1358,10 @@ static int jingle_transmit_invite(struct jingle_pvt *p)
        iks_insert_attrib(jingle, JINGLE_SID, p->sid);
        iks_insert_attrib(jingle, "initiator", client->jid->full);
        iks_insert_attrib(jingle, "xmlns", JINGLE_NS);
+
+       /* For now, we only send one audio based content */
        iks_insert_attrib(content, "creator", "initiator");
-       iks_insert_attrib(content, "name", "asterisk-audio-content");
+       iks_insert_attrib(content, "name", p->audio_content_name);
        iks_insert_attrib(content, "profile", "RTP/AVP");
        iks_insert_attrib(description, "xmlns", JINGLE_AUDIO_RTP_NS);
        iks_insert_attrib(transport, "xmlns", JINGLE_ICE_UDP_NS);
@@ -1336,7 +1369,6 @@ static int jingle_transmit_invite(struct jingle_pvt *p)
        iks_insert_attrib(payload_pcmu, "name", "PCMU");
        iks_insert_attrib(payload_eg711u, "id", "100");
        iks_insert_attrib(payload_eg711u, "name", "EG711U");
-
        iks_insert_node(description, payload_pcmu);
        iks_insert_node(description, payload_eg711u);
        iks_insert_node(content, description);
index bc3b0f2170561c2e7a513610ef2557ed9afa9e42..7442d9acaa72e3c43597f82960d31e2c06788f9a 100644 (file)
 #define JINGLE_NODE "jingle"
 #define GOOGLE_NODE "session"
 
-#define JINGLE_NS "http://www.xmpp.org/extensions/xep-0166.html#ns"
-#define JINGLE_AUDIO_RTP_NS "http://www.xmpp.org/extensions/xep-0167.html#ns"
-#define JINGLE_ICE_UDP_NS "http://www.xmpp.org/extensions/xep-0176.html#ns-udp"
-#define JINGLE_DTMF_NS "http://www.xmpp.org/extensions/xep-0181.html#ns"
-#define JINGLE_DTMF_NS_ERRORS "http://www.xmpp.org/extensions/xep-0181.html#ns-errors"
+#define JINGLE_NS "urn:xmpp:tmp:jingle"
+#define JINGLE_AUDIO_RTP_NS "urn:xmpp:tmp:jingle:apps:audio-rtp"
+#define JINGLE_VIDEO_RTP_NS "urn:xmpp:tmp:jingle:apps:video"
+#define JINGLE_ICE_UDP_NS "urn:xmpp:tmp:jingle:transports:ice-udp"
+#define JINGLE_DTMF_NS "urn:xmpp:tmp:jingle:dtmf"
+
 #define GOOGLE_NS "http://www.google.com/session"
 
 #define JINGLE_SID "sid"