diff options
-rw-r--r-- | channels/chan_gtalk.c | 8 | ||||
-rw-r--r-- | res/res_jabber.c | 26 |
2 files changed, 25 insertions, 9 deletions
diff --git a/channels/chan_gtalk.c b/channels/chan_gtalk.c index c5a8483e4..fa8b57e4e 100644 --- a/channels/chan_gtalk.c +++ b/channels/chan_gtalk.c @@ -880,8 +880,9 @@ static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const data = ast_strdupa((char *) tmp->us); exten = strsep(&data, "/"); free(data); - } - ast_copy_string(tmp->exten, exten, sizeof(tmp->exten)); + } else + exten = tmp->us; + ast_copy_string(tmp->exten, exten, sizeof(tmp->exten)); ast_mutex_init(&tmp->lock); ast_mutex_lock(>alklock); tmp->next = client->p; @@ -1515,6 +1516,7 @@ static int gtalk_do_reload(int fd, int argc, char **argv) ast_verbose("IT DOES WORK!\n"); return RESULT_SUCCESS; } + static int gtalk_parser(void *data, ikspak *pak) { struct gtalk *client = ASTOBJ_REF((struct gtalk *) data); @@ -1540,6 +1542,7 @@ static int gtalk_parser(void *data, ikspak *pak) ASTOBJ_UNREF(client, gtalk_member_destroy); return IKS_FILTER_EAT; } + /* Not using this anymore probably take out soon static struct gtalk_candidate *gtalk_create_candidate(char *args) { @@ -1630,6 +1633,7 @@ static int gtalk_create_member(char *label, struct ast_variable *var, int allowg IKS_PAK_IQ, IKS_RULE_FROM_PARTIAL, member->user, IKS_RULE_NS, "http://www.google.com/session", IKS_RULE_DONE); + } else { ast_log(LOG_ERROR, "connection referenced not found!\n"); return 0; diff --git a/res/res_jabber.c b/res/res_jabber.c index 3340423c5..e20fa9528 100644 --- a/res/res_jabber.c +++ b/res/res_jabber.c @@ -871,7 +871,6 @@ static int aji_client_info_handler(void *data, ikspak *pak) struct aji_buddy *buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial); resource = aji_find_resource(buddy, pak->from->resource); - if (pak->subtype == IKS_TYPE_RESULT) { if (!resource) { ast_log(LOG_NOTICE,"JABBER: Received client info from %s when not requested.\n", pak->from->full); @@ -927,13 +926,26 @@ static int aji_client_info_handler(void *data, ikspak *pak) static int aji_dinfo_handler(void *data, ikspak *pak) { struct aji_client *client = ASTOBJ_REF((struct aji_client *) data); - char *node = NULL, *type = NULL; - type = iks_find_attrib(pak->x,"type"); - if (!strcasecmp(type,"error")) { + char *node = NULL; + struct aji_resource *resource = NULL; + struct aji_buddy *buddy = ASTOBJ_CONTAINER_FIND(&client->buddies, pak->from->partial); + + resource = aji_find_resource(buddy, pak->from->resource); + if (pak->subtype == IKS_TYPE_ERROR) { ast_log(LOG_WARNING, "Recieved error from a client, turn on jabber debug!\n"); return IKS_FILTER_EAT; } - if (!strcasecmp(type,"get") && !(node = iks_find_attrib(pak->query, "node"))) { + if (pak->subtype == IKS_TYPE_RESULT) { + if (!resource) { + ast_log(LOG_NOTICE,"JABBER: Received client info from %s when not requested.\n", pak->from->full); + ASTOBJ_UNREF(client, aji_client_destroy); + return IKS_FILTER_EAT; + } + if (iks_find_with_attrib(pak->query, "feature", "var", "http://www.google.com/xmpp/protocol/voice/v1")) { + resource->cap->jingle = 1; + } else + resource->cap->jingle = 0; + } else if (pak->subtype == IKS_TYPE_GET && !(node = iks_find_attrib(pak->query, "node"))) { iks *iq, *query, *identity, *disco, *reg, *commands, *gateway, *version, *vcard, *search; iq = iks_new("iq"); @@ -999,7 +1011,7 @@ static int aji_dinfo_handler(void *data, ikspak *pak) if (search) iks_delete(search); - } else if (!strcasecmp(type,"get") && !strcasecmp(node, "http://jabber.org/protocol/commands")) { + } else if (pak->subtype == IKS_TYPE_GET && !strcasecmp(node, "http://jabber.org/protocol/commands")) { iks *iq, *query, *confirm; iq = iks_new("iq"); query = iks_new("query"); @@ -1028,7 +1040,7 @@ static int aji_dinfo_handler(void *data, ikspak *pak) if (confirm) iks_delete(confirm); - } else if (!strcasecmp(type,"get") && !strcasecmp(node, "confirmaccount")) { + } else if (pak->subtype == IKS_TYPE_GET && !strcasecmp(node, "confirmaccount")) { iks *iq, *query, *feature; iq = iks_new("iq"); |