aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_gtalk.c
diff options
context:
space:
mode:
authorphsultan <phsultan@f38db490-d61c-443f-a65b-d21fe96a405b>2008-06-02 14:40:42 +0000
committerphsultan <phsultan@f38db490-d61c-443f-a65b-d21fe96a405b>2008-06-02 14:40:42 +0000
commit26fb791337d4d8eab2862cd9c5f25b6e9e436d06 (patch)
tree37d577d5a4bf93dd19aa95256888d74b934cf82b /channels/chan_gtalk.c
parent04e6144f2dc67df30af56ef73a970934b9ee40a6 (diff)
Merged revisions 119741 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r119741 | phsultan | 2008-06-02 16:35:24 +0200 (Mon, 02 Jun 2008) | 13 lines Do not link the guest account with any configured XMPP client (in jabber.conf). The actual connection is made when a call comes in Asterisk. Apply this fix to Jingle too. Fix the ast_aji_get_client function that was not able to retrieve an XMPP client from its JID. (closes issue #12085) Reported by: junky Tested by: phsultan ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@119743 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_gtalk.c')
-rw-r--r--channels/chan_gtalk.c36
1 files changed, 26 insertions, 10 deletions
diff --git a/channels/chan_gtalk.c b/channels/chan_gtalk.c
index ab044cb9b..c06f25dc2 100644
--- a/channels/chan_gtalk.c
+++ b/channels/chan_gtalk.c
@@ -250,17 +250,12 @@ static struct gtalk *find_gtalk(char *name, char *connection)
if (!gtalk && strchr(name, '@'))
gtalk = ASTOBJ_CONTAINER_FIND_FULL(&gtalk_list, name, user,,, strcasecmp);
- if (!gtalk) { /* guest call */
+ if (!gtalk) {
+ /* guest call */
ASTOBJ_CONTAINER_TRAVERSE(&gtalk_list, 1, {
ASTOBJ_RDLOCK(iterator);
if (!strcasecmp(iterator->name, "guest")) {
- if (!strcasecmp(iterator->connection->jid->partial, connection)) {
- gtalk = iterator;
- } else if (!strcasecmp(iterator->connection->name, connection)) {
- gtalk = iterator;
- } else if (iterator->connection->component && !strcasecmp(iterator->connection->user,domain)) {
- gtalk = iterator;
- }
+ gtalk = iterator;
}
ASTOBJ_UNLOCK(iterator);
@@ -1139,6 +1134,16 @@ static int gtalk_newcall(struct gtalk *client, ikspak *pak)
tmp = tmp->next;
}
+ if (!strcasecmp(client->name, "guest")){
+ /* the guest account is not tied to any configured XMPP client,
+ let's set it now */
+ client->connection = ast_aji_get_client(from);
+ if (!client->connection) {
+ ast_log(LOG_ERROR, "No XMPP client to talk to, us (partial JID) : %s\n", from);
+ return -1;
+ }
+ }
+
p = gtalk_alloc(client, from, pak->from->full, iks_find_attrib(pak->query, "id"));
if (!p) {
ast_log(LOG_WARNING, "Unable to allocate gtalk structure!\n");
@@ -1599,11 +1604,22 @@ static struct ast_channel *gtalk_request(const char *type, int format, void *dat
}
}
}
+
client = find_gtalk(to, sender);
if (!client) {
ast_log(LOG_WARNING, "Could not find recipient.\n");
return NULL;
}
+ if (!strcasecmp(client->name, "guest")){
+ /* the guest account is not tied to any configured XMPP client,
+ let's set it now */
+ client->connection = ast_aji_get_client(sender);
+ if (!client->connection) {
+ ast_log(LOG_ERROR, "No XMPP client to talk to, us (partial JID) : %s\n", sender);
+ return NULL;
+ }
+ }
+
ASTOBJ_WRLOCK(client);
p = gtalk_alloc(client, strchr(sender, '@') ? sender : client->connection->jid->full, strchr(to, '@') ? to : client->user, NULL);
if (p)
@@ -1925,13 +1941,13 @@ static int gtalk_load_config(void)
ASTOBJ_CONTAINER_TRAVERSE(clients, 1, {
ASTOBJ_WRLOCK(iterator);
ASTOBJ_WRLOCK(member);
- member->connection = iterator;
+ member->connection = NULL;
iks_filter_add_rule(iterator->f, gtalk_parser, member, IKS_RULE_TYPE, IKS_PAK_IQ, IKS_RULE_NS, "http://www.google.com/session", IKS_RULE_DONE);
iks_filter_add_rule(iterator->f, gtalk_parser, member, IKS_RULE_TYPE, IKS_PAK_IQ, IKS_RULE_NS, "http://jabber.org/protocol/gtalk", IKS_RULE_DONE);
ASTOBJ_UNLOCK(member);
- ASTOBJ_CONTAINER_LINK(&gtalk_list, member);
ASTOBJ_UNLOCK(iterator);
});
+ ASTOBJ_CONTAINER_LINK(&gtalk_list, member);
} else {
ASTOBJ_UNLOCK(member);
ASTOBJ_UNREF(member, gtalk_member_destroy);