[asterisk-commits] phsultan: trunk r80662 - in /trunk: ./ channels/chan_gtalk.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Aug 24 06:49:36 CDT 2007


Author: phsultan
Date: Fri Aug 24 06:49:36 2007
New Revision: 80662

URL: http://svn.digium.com/view/asterisk?view=rev&rev=80662
Log:
Merged revisions 80661 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r80661 | phsultan | 2007-08-24 13:42:46 +0200 (Fri, 24 Aug 2007) | 9 lines

Closes issue #10509

Googletalk calls are answered too early, which results in CDRs wrongly
stating that a call was ANSWERED when the calling party cancelled a
call before before being established.

We must not answer the call upon reception of a 'transport-accept' iq
packet, but this packet still needs to be acknowledged, otherwise the
remote peer would close the call (like in #8970).
........

Modified:
    trunk/   (props changed)
    trunk/channels/chan_gtalk.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/channels/chan_gtalk.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_gtalk.c?view=diff&rev=80662&r1=80661&r2=80662
==============================================================================
--- trunk/channels/chan_gtalk.c (original)
+++ trunk/channels/chan_gtalk.c Fri Aug 24 06:49:36 2007
@@ -618,6 +618,30 @@
 			ast_queue_control(tmp->owner, AST_CONTROL_ANSWER);
 	} else
 		ast_log(LOG_NOTICE, "Whoa, didn't find call!\n");
+	gtalk_response(client, from, pak, NULL, NULL);
+	return 1;
+}
+
+static int gtalk_is_accepted(struct gtalk *client, ikspak *pak)
+{
+	struct gtalk_pvt *tmp;
+	char *from;
+
+	ast_log(LOG_DEBUG, "The client is %s\n", client->name);
+	/* find corresponding call */
+	for (tmp = client->p; tmp; tmp = tmp->next) {
+		if (iks_find_with_attrib(pak->x, "session", "id", tmp->sid))
+			break;
+	}
+
+	from = iks_find_attrib(pak->x, "to");
+	if(!from)
+		from = client->connection->jid->full;
+
+	if (!tmp)
+		ast_log(LOG_NOTICE, "Whoa, didn't find call!\n");
+
+	/* answer 'iq' packet to let the remote peer know that we're alive */
 	gtalk_response(client, from, pak, NULL, NULL);
 	return 1;
 }
@@ -1571,8 +1595,10 @@
 		ast_debug(3, "About to add candidate!\n");
 		gtalk_add_candidate(client, pak);
 		ast_debug(3, "Candidate Added!\n");
-	} else if (iks_find_with_attrib(pak->x, "session", "type", "accept") || iks_find_with_attrib(pak->x, "session", "type", "transport-accept")) {
+	} else if (iks_find_with_attrib(pak->x, "session", "type", "accept")) {
 		gtalk_is_answered(client, pak);
+	} else if (iks_find_with_attrib(pak->x, "session", "type", "transport-accept")) {
+		gtalk_is_accepted(client, pak);
 	} else if (iks_find_with_attrib(pak->x, "session", "type", "content-info")) {
 		gtalk_handle_dtmf(client, pak);
 	} else if (iks_find_with_attrib(pak->x, "session", "type", "terminate")) {




More information about the asterisk-commits mailing list