diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-02-28 06:06:42 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-02-28 06:06:42 +0000 |
commit | 44ee08e9d996b1825bcdd386cd1d1f16fb5e7439 (patch) | |
tree | efbbfc9bc474705fcb007ce58c67f66f6fcdf9df /channels | |
parent | 4bb33e3192f01d1f467a0f8a1af285c7db0837a4 (diff) |
Fix queue URL passing (bug #3543)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5104 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-x | channels/chan_local.c | 22 | ||||
-rwxr-xr-x | channels/iax2-parser.c | 6 |
2 files changed, 24 insertions, 4 deletions
diff --git a/channels/chan_local.c b/channels/chan_local.c index e6ee96450..288a418c2 100755 --- a/channels/chan_local.c +++ b/channels/chan_local.c @@ -139,7 +139,7 @@ static void check_bridge(struct local_pvt *p, int isoutbound) { if (p->alreadymasqed || p->nooptimization) return; - if (isoutbound && p->chan && p->chan->_bridge /* Not ast_bridged_channel! Only go one step! */ && p->owner) { + if (isoutbound && p->chan && p->chan->_bridge /* Not ast_bridged_channel! Only go one step! */ && p->owner && !p->owner->pvt->readq) { /* Masquerade bridged channel into owner */ /* Lock everything we need, one by one, and give up if we can't get everything. Remember, we'll get another @@ -152,7 +152,7 @@ static void check_bridge(struct local_pvt *p, int isoutbound) } ast_mutex_unlock(&(p->chan->_bridge)->lock); } - } else if (!isoutbound && p->owner && p->owner->_bridge && p->chan) { + } else if (!isoutbound && p->owner && p->owner->_bridge && p->chan && !p->chan->pvt->readq) { /* Masquerade bridged channel into chan */ if (!ast_mutex_trylock(&(p->owner->_bridge)->lock)) { if (!ast_mutex_trylock(&p->chan->lock)) { @@ -233,6 +233,22 @@ static int local_digit(struct ast_channel *ast, char digit) return res; } +static int local_sendhtml(struct ast_channel *ast, int subclass, char *data, int datalen) +{ + struct local_pvt *p = ast->pvt->pvt; + int res = -1; + struct ast_frame f = { AST_FRAME_HTML, }; + int isoutbound; + ast_mutex_lock(&p->lock); + isoutbound = IS_OUTBOUND(ast, p); + f.subclass = subclass; + f.data = data; + f.datalen = datalen; + res = local_queue_frame(p, isoutbound, &f, ast); + ast_mutex_unlock(&p->lock); + return res; +} + static int local_call(struct ast_channel *ast, char *dest, int timeout) { struct local_pvt *p = ast->pvt->pvt; @@ -436,6 +452,8 @@ static struct ast_channel *local_new(struct local_pvt *p, int state) tmp2->pvt->pvt = p; tmp->pvt->send_digit = local_digit; tmp2->pvt->send_digit = local_digit; + tmp->pvt->send_html = local_sendhtml; + tmp2->pvt->send_html = local_sendhtml; tmp->pvt->call = local_call; tmp2->pvt->call = local_call; tmp->pvt->hangup = local_hangup; diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c index 6adc68445..edc15ec07 100755 --- a/channels/iax2-parser.c +++ b/channels/iax2-parser.c @@ -375,7 +375,9 @@ void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, s "NULL ", "IAX ", "TEXT ", - "IMAGE " }; + "IMAGE ", + "HTML ", + "CNG " }; char *iaxs[] = { "(0?)", "NEW ", @@ -447,7 +449,7 @@ void iax_showframe(struct iax_frame *f, struct ast_iax2_full_hdr *fhi, int rx, s /* Don't mess with mini-frames */ return; } - if (fh->type > (int)sizeof(frames)/(int)sizeof(frames[0])) { + if (fh->type >= (int)sizeof(frames)/(int)sizeof(frames[0])) { snprintf(class2, (int)sizeof(class2), "(%d?)", fh->type); class = class2; } else { |