mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-09 11:28:25 +00:00
Update ChangeLog and .version file. Merge fixes for CDR crash and chan_gtalk fixup.
git-svn-id: https://origsvn.digium.com/svn/asterisk/tags/1.8.1.1@298203 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
28
ChangeLog
28
ChangeLog
@@ -1,3 +1,31 @@
|
|||||||
|
2010-12-13 Leif Madsen <lmadsen@digium.com>
|
||||||
|
|
||||||
|
* Asterisk 1.8.1.1 Released.
|
||||||
|
|
||||||
|
2010-12-09 15:32:20 -0600 David Vossel <dvossel@digium.com>
|
||||||
|
|
||||||
|
* 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)
|
||||||
|
|
||||||
|
2010-12-09 14:48:44 -0600 Terry Wilson <twilson@digium.com>
|
||||||
|
|
||||||
|
* Don't crash after Set(CDR(userfield)=...) in ast_bridge_call
|
||||||
|
|
||||||
|
Instead of setting peer->cdr = NULL, set it to not post.
|
||||||
|
|
||||||
|
(closes issue #18415)
|
||||||
|
Reported by: macbrody
|
||||||
|
Patches:
|
||||||
|
patch-18415 uploaded by jsolares (license 1167)
|
||||||
|
Tested by: jsolares, twilson
|
||||||
|
|
||||||
2010-12-02 Leif Madsen <lmadsen@digium.com>
|
2010-12-02 Leif Madsen <lmadsen@digium.com>
|
||||||
|
|
||||||
* Asterisk 1.8.1 Released.
|
* Asterisk 1.8.1 Released.
|
||||||
|
|||||||
@@ -193,6 +193,8 @@ static int gtalk_update_stun(struct gtalk *client, struct gtalk_pvt *p);
|
|||||||
/* static char *gtalk_do_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a); */
|
/* static char *gtalk_do_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a); */
|
||||||
static char *gtalk_show_channels(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
|
static char *gtalk_show_channels(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
|
||||||
static int gtalk_update_externip(void);
|
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 */
|
/*! \brief PBX interface structure for channel registration */
|
||||||
static const struct ast_channel_tech gtalk_tech = {
|
static const struct ast_channel_tech gtalk_tech = {
|
||||||
@@ -458,12 +460,46 @@ static int gtalk_invite(struct gtalk_pvt *p, char *to, char *from, char *sid, in
|
|||||||
static int gtalk_ringing_ack(void *data, ikspak *pak)
|
static int gtalk_ringing_ack(void *data, ikspak *pak)
|
||||||
{
|
{
|
||||||
struct gtalk_pvt *p = data;
|
struct gtalk_pvt *p = data;
|
||||||
|
struct ast_channel *owner;
|
||||||
|
|
||||||
if (p->ringrule)
|
ast_mutex_lock(&p->lock);
|
||||||
|
|
||||||
|
if (p->ringrule) {
|
||||||
iks_filter_remove_rule(p->parent->connection->f, p->ringrule);
|
iks_filter_remove_rule(p->parent->connection->f, p->ringrule);
|
||||||
|
}
|
||||||
p->ringrule = NULL;
|
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;
|
return IKS_FILTER_EAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -965,7 +1001,7 @@ static struct gtalk_pvt *gtalk_alloc(struct gtalk *client, const char *us, const
|
|||||||
if (resources) {
|
if (resources) {
|
||||||
snprintf(idroster, sizeof(idroster), "%s/%s", them, resources->resource);
|
snprintf(idroster, sizeof(idroster), "%s/%s", them, resources->resource);
|
||||||
} else if ((*them == '+') || (strstr(them, "@voice.google.com"))) {
|
} else if ((*them == '+') || (strstr(them, "@voice.google.com"))) {
|
||||||
snprintf(idroster, sizeof(idroster), "%s/srvres", them);
|
snprintf(idroster, sizeof(idroster), "%s", them);
|
||||||
} else {
|
} else {
|
||||||
ast_log(LOG_ERROR, "no gtalk capable clients to talk to.\n");
|
ast_log(LOG_ERROR, "no gtalk capable clients to talk to.\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -1775,7 +1811,6 @@ static int gtalk_call(struct ast_channel *ast, char *dest, int timeout)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gtalk_invite(p, p->them, p->us, p->sid, 1);
|
gtalk_invite(p, p->them, p->us, p->sid, 1);
|
||||||
gtalk_create_candidates(p->parent, p, p->sid, p->them, p->us);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3091,6 +3091,7 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
|
|||||||
int hasfeatures=0;
|
int hasfeatures=0;
|
||||||
int hadfeatures=0;
|
int hadfeatures=0;
|
||||||
int autoloopflag;
|
int autoloopflag;
|
||||||
|
int we_disabled_peer_cdr = 0;
|
||||||
struct ast_option_header *aoh;
|
struct ast_option_header *aoh;
|
||||||
struct ast_cdr *bridge_cdr = NULL;
|
struct ast_cdr *bridge_cdr = NULL;
|
||||||
struct ast_cdr *orig_peer_cdr = NULL;
|
struct ast_cdr *orig_peer_cdr = NULL;
|
||||||
@@ -3158,9 +3159,9 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
|
|||||||
ast_cdr_appenduserfield(chan, tmp);
|
ast_cdr_appenduserfield(chan, tmp);
|
||||||
} else
|
} else
|
||||||
ast_cdr_setuserfield(chan, peer->cdr->userfield);
|
ast_cdr_setuserfield(chan, peer->cdr->userfield);
|
||||||
/* free the peer's cdr without ast_cdr_free complaining */
|
/* Don't delete the CDR; just disable it. */
|
||||||
ast_free(peer->cdr);
|
ast_set_flag(peer->cdr, AST_CDR_FLAG_POST_DISABLED);
|
||||||
peer->cdr = NULL;
|
we_disabled_peer_cdr = 1;
|
||||||
}
|
}
|
||||||
ast_copy_string(orig_channame,chan->name,sizeof(orig_channame));
|
ast_copy_string(orig_channame,chan->name,sizeof(orig_channame));
|
||||||
ast_copy_string(orig_peername,peer->name,sizeof(orig_peername));
|
ast_copy_string(orig_peername,peer->name,sizeof(orig_peername));
|
||||||
@@ -3600,6 +3601,9 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
|
|||||||
ast_cdr_specialized_reset(new_peer_cdr, 0);
|
ast_cdr_specialized_reset(new_peer_cdr, 0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (we_disabled_peer_cdr) {
|
||||||
|
ast_clear_flag(peer->cdr, AST_CDR_FLAG_POST_DISABLED);
|
||||||
|
}
|
||||||
ast_cdr_specialized_reset(peer->cdr, 0); /* nothing changed, reset the peer cdr */
|
ast_cdr_specialized_reset(peer->cdr, 0); /* nothing changed, reset the peer cdr */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user