[asterisk-commits] dvossel: trunk r297958 - in /trunk: ./ channels/chan_gtalk.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Dec 9 15:33:26 CST 2010
Author: dvossel
Date: Thu Dec 9 15:33:22 2010
New Revision: 297958
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=297958
Log:
Merged revisions 297957 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
........
r297957 | dvossel | 2010-12-09 15:32:20 -0600 (Thu, 09 Dec 2010) | 11 lines
Fixes issue with outbound google voice calls not working.
Thanks to az1234 and nevermind_quack for their input in helping debug the issue.
(closes issue #18412)
Reported by: nevermind_quack
Patches:
fix uploaded by dvossel (license 671)
........
Modified:
trunk/ (props changed)
trunk/channels/chan_gtalk.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.
Modified: trunk/channels/chan_gtalk.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/chan_gtalk.c?view=diff&rev=297958&r1=297957&r2=297958
==============================================================================
--- trunk/channels/chan_gtalk.c (original)
+++ trunk/channels/chan_gtalk.c Thu Dec 9 15:33:22 2010
@@ -196,6 +196,8 @@
static char *gtalk_show_channels(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static char *gtalk_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
static int gtalk_update_externip(void);
+static int gtalk_parser(void *data, ikspak *pak);
+static int gtalk_create_candidates(struct gtalk *client, struct gtalk_pvt *p, char *sid, char *from, char *to);
/*! \brief PBX interface structure for channel registration */
static const struct ast_channel_tech gtalk_tech = {
@@ -466,12 +468,46 @@
static int gtalk_ringing_ack(void *data, ikspak *pak)
{
struct gtalk_pvt *p = data;
-
- if (p->ringrule)
+ struct ast_channel *owner;
+
+ ast_mutex_lock(&p->lock);
+
+ if (p->ringrule) {
iks_filter_remove_rule(p->parent->connection->f, p->ringrule);
+ }
p->ringrule = NULL;
- if (p->owner)
- ast_queue_control(p->owner, AST_CONTROL_RINGING);
+
+ /* this may be a redirect */
+ if (!strcmp(S_OR(iks_find_attrib(pak->x, "type"), ""), "error")) {
+ char *name = NULL;
+ char *redirect = NULL;
+ iks *traversenodes = NULL;
+ traversenodes = pak->query;
+ while (traversenodes) {
+ if (!(name = iks_name(traversenodes))) {
+ break;
+ }
+ if (!strcasecmp(name, "error") &&
+ (redirect = iks_find_cdata(traversenodes, "redirect")) &&
+ (redirect = strstr(redirect, "xmpp:"))) {
+ redirect += 5;
+ ast_log(LOG_DEBUG, "redirect %s\n", redirect);
+ ast_copy_string(p->them, redirect, sizeof(p->them));
+
+ gtalk_invite(p, p->them, p->us, p->sid, 1);
+ break;
+ }
+ traversenodes = iks_next_tag(traversenodes);
+ }
+ }
+ gtalk_create_candidates(p->parent, p, p->sid, p->them, p->us);
+ owner = p->owner;
+ ast_mutex_unlock(&p->lock);
+
+ if (owner) {
+ ast_queue_control(owner, AST_CONTROL_RINGING);
+ }
+
return IKS_FILTER_EAT;
}
@@ -973,7 +1009,7 @@
if (resources) {
snprintf(idroster, sizeof(idroster), "%s/%s", them, resources->resource);
} else if ((*them == '+') || (strstr(them, "@voice.google.com"))) {
- snprintf(idroster, sizeof(idroster), "%s/srvres", them);
+ snprintf(idroster, sizeof(idroster), "%s", them);
} else {
ast_log(LOG_ERROR, "no gtalk capable clients to talk to.\n");
return NULL;
@@ -1783,7 +1819,6 @@
}
gtalk_invite(p, p->them, p->us, p->sid, 1);
- gtalk_create_candidates(p->parent, p, p->sid, p->them, p->us);
return 0;
}
More information about the asterisk-commits
mailing list