aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_local.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-02-28 06:06:42 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-02-28 06:06:42 +0000
commit44ee08e9d996b1825bcdd386cd1d1f16fb5e7439 (patch)
treeefbbfc9bc474705fcb007ce58c67f66f6fcdf9df /channels/chan_local.c
parent4bb33e3192f01d1f467a0f8a1af285c7db0837a4 (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/chan_local.c')
-rwxr-xr-xchannels/chan_local.c22
1 files changed, 20 insertions, 2 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;