fix queue URL passing (bug #3543)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@5615 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2005-05-10 03:28:01 +00:00
parent 4d1e5adfdc
commit 56cf655835
6 changed files with 63 additions and 8 deletions

View File

@@ -379,6 +379,17 @@ static struct ast_frame *agent_read(struct ast_channel *ast)
return f;
}
static int agent_sendhtml(struct ast_channel *ast, int subclass, char *data, int datalen)
{
struct agent_pvt *p = ast->pvt->pvt;
int res = -1;
ast_mutex_lock(&p->lock);
if (p->chan)
res = ast_channel_sendhtml(p->chan, subclass, data, datalen);
ast_mutex_unlock(&p->lock);
return res;
}
static int agent_write(struct ast_channel *ast, struct ast_frame *f)
{
struct agent_pvt *p = ast->pvt->pvt;
@@ -748,6 +759,7 @@ static struct ast_channel *agent_new(struct agent_pvt *p, int state)
tmp->pvt->answer = agent_answer;
tmp->pvt->read = agent_read;
tmp->pvt->write = agent_write;
tmp->pvt->send_html = agent_sendhtml;
tmp->pvt->exception = agent_read;
tmp->pvt->indicate = agent_indicate;
tmp->pvt->fixup = agent_fixup;

View File

@@ -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 && p->owner) {
if (isoutbound && p->chan && p->chan->bridge && 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;
@@ -425,6 +441,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;

View File

@@ -299,7 +299,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 ",
@@ -371,7 +373,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(char *)) {
if (fh->type >= (int)sizeof(frames)/(int)sizeof(frames[0])) {
snprintf(class2, (int)sizeof(class2), "(%d?)", fh->type);
class = class2;
} else {