From 37a0b33171dbcc8b4bb05bf3fec9dd018d2bbb2e Mon Sep 17 00:00:00 2001
From: Philippe Sultan <philippe.sultan@gmail.com>
Date: Tue, 16 Oct 2007 09:47:22 +0000
Subject: [PATCH] Make an audio path under the following call configuration :
 SIP Phone 1 --- [chan_sip]Asterisk 1[chan_jingle] --- [chan_jingle]Asterisk
 2[chan_sip] --- SIP Phone 2

Modifications :
- set bridge type to partial ;
- process media candidates from the remote peer properly.

Now we have Jingle audio, at least between two Asterisk Jingle
clients.


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@85777 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_jingle.c | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/channels/chan_jingle.c b/channels/chan_jingle.c
index 7f7c0ef651..1d14dcfe35 100644
--- a/channels/chan_jingle.c
+++ b/channels/chan_jingle.c
@@ -416,7 +416,7 @@ static enum ast_rtp_get_result jingle_get_rtp_peer(struct ast_channel *chan, str
 	ast_mutex_lock(&p->lock);
 	if (p->rtp) {
 		*rtp = p->rtp;
-		res = AST_RTP_TRY_NATIVE;
+		res = AST_RTP_TRY_PARTIAL;
 	}
 	ast_mutex_unlock(&p->lock);
 
@@ -1071,31 +1071,38 @@ static int jingle_add_candidate(struct jingle *client, ikspak *pak)
 
 	traversenodes = pak->query;
 	while(traversenodes) {
-		if(!strcasecmp(iks_name(traversenodes), "session")) {
+		if(!strcasecmp(iks_name(traversenodes), "jingle")) {
 			traversenodes = iks_child(traversenodes);
 			continue;
 		}
+		if(!strcasecmp(iks_name(traversenodes), "content")) {
+			traversenodes = iks_child(traversenodes);
+			continue;
+		}
+		if(!strcasecmp(iks_name(traversenodes), "transport")) {
+			traversenodes = iks_child(traversenodes);
+			continue;
+		}
+
 		if(!strcasecmp(iks_name(traversenodes), "candidate")) {
 			newcandidate = ast_calloc(1, sizeof(*newcandidate));
 			if (!newcandidate)
 				return 0;
-			ast_copy_string(newcandidate->ip, iks_find_attrib(traversenodes, "address"),
-							sizeof(newcandidate->ip));
+			ast_copy_string(newcandidate->ip, iks_find_attrib(traversenodes, "ip"), sizeof(newcandidate->ip));
 			newcandidate->port = atoi(iks_find_attrib(traversenodes, "port"));
-			ast_copy_string(newcandidate->password, iks_find_attrib(traversenodes, "password"),
-							sizeof(newcandidate->password));
+			ast_copy_string(newcandidate->password, iks_find_attrib(traversenodes, "pwd"), sizeof(newcandidate->password));
 			if (!strcasecmp(iks_find_attrib(traversenodes, "protocol"), "udp"))
 				newcandidate->protocol = AJI_PROTOCOL_UDP;
-			if (!strcasecmp(iks_find_attrib(traversenodes, "protocol"), "ssltcp"))
+			else if (!strcasecmp(iks_find_attrib(traversenodes, "protocol"), "ssltcp"))
 				newcandidate->protocol = AJI_PROTOCOL_SSLTCP;
-		
+			
 			if (!strcasecmp(iks_find_attrib(traversenodes, "type"), "host"))
 				newcandidate->type = AJI_CONNECT_HOST;
-			if (!strcasecmp(iks_find_attrib(traversenodes, "type"), "prflx"))
+			else if (!strcasecmp(iks_find_attrib(traversenodes, "type"), "prflx"))
 				newcandidate->type = AJI_CONNECT_PRFLX;
-			if (!strcasecmp(iks_find_attrib(traversenodes, "type"), "relay"))
+			else if (!strcasecmp(iks_find_attrib(traversenodes, "type"), "relay"))
 				newcandidate->type = AJI_CONNECT_RELAY;
-			if (!strcasecmp(iks_find_attrib(traversenodes, "type"), "srflx"))
+			else if (!strcasecmp(iks_find_attrib(traversenodes, "type"), "srflx"))
 				newcandidate->type = AJI_CONNECT_SRFLX;
 
 			newcandidate->network = atoi(iks_find_attrib(traversenodes, "network"));
-- 
GitLab