[asterisk-commits] phsultan: branch 1.4 r80661 - /branches/1.4/channels/chan_gtalk.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Aug 24 06:42:46 CDT 2007
Author: phsultan
Date: Fri Aug 24 06:42:46 2007
New Revision: 80661
URL: http://svn.digium.com/view/asterisk?view=rev&rev=80661
Log:
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:
branches/1.4/channels/chan_gtalk.c
Modified: branches/1.4/channels/chan_gtalk.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_gtalk.c?view=diff&rev=80661&r1=80660&r2=80661
==============================================================================
--- branches/1.4/channels/chan_gtalk.c (original)
+++ branches/1.4/channels/chan_gtalk.c Fri Aug 24 06:42:46 2007
@@ -619,6 +619,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;
}
@@ -1568,8 +1592,10 @@
gtalk_add_candidate(client, pak);
if (option_debug > 2)
ast_log(LOG_DEBUG, "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