dect
/
asterisk
Archived
13
0
Fork 0

Reset the fax buffers back to default settings regardless of signaling in use -

Pointed out by Matt F.
Also in the case of not using a signaling module, set the law back to the
default as well.


git-svn-id: http://svn.digium.com/svn/asterisk/trunk@208155 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
jpeeler 2009-07-22 22:42:33 +00:00
parent 2546725dee
commit 72e985667a
1 changed files with 28 additions and 31 deletions

View File

@ -4854,10 +4854,33 @@ static openr2_call_disconnect_cause_t dahdi_ast_cause_to_r2_cause(int cause)
}
#endif
static int revert_fax_buffers(struct dahdi_pvt *p, struct ast_channel *ast)
{
if (p->bufferoverrideinuse) {
/* faxbuffers are in use, revert them */
struct dahdi_bufferinfo bi = {
.txbufpolicy = p->buf_policy,
.rxbufpolicy = p->buf_policy,
.bufsize = p->bufsize,
.numbufs = p->buf_no
};
int bpres;
if ((bpres = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SET_BUFINFO, &bi)) < 0) {
ast_log(LOG_WARNING, "Channel '%s' unable to revert buffer policy: %s\n", ast->name, strerror(errno));
}
p->bufferoverrideinuse = 0;
return bpres;
}
return -1;
}
static int dahdi_hangup(struct ast_channel *ast)
{
int res = 0;
int idx,x;
int law;
/*static int restore_gains(struct dahdi_pvt *p);*/
struct dahdi_pvt *p = ast->tech_pvt;
struct dahdi_pvt *tmp = NULL;
@ -4877,23 +4900,8 @@ static int dahdi_hangup(struct ast_channel *ast)
restore_gains(p);
p->ignoredtmf = 0;
if (p->bufferoverrideinuse) {
/* faxbuffers are in use, revert them */
struct dahdi_bufferinfo bi = {
.txbufpolicy = p->buf_policy,
.rxbufpolicy = p->buf_policy,
.bufsize = p->bufsize,
.numbufs = p->buf_no
};
int bpres;
if ((bpres = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SET_BUFINFO, &bi)) < 0) {
ast_log(LOG_WARNING, "Channel '%s' unable to revert buffer policy: %s\n", ast->name, strerror(errno));
}
p->bufferoverrideinuse = 0;
}
res = analog_hangup(p->sig_pvt, ast);
revert_fax_buffers(p, ast);
goto hangup_out;
}
@ -4913,6 +4921,7 @@ static int dahdi_hangup(struct ast_channel *ast)
ast_dsp_free(p->dsp);
p->dsp = NULL;
}
revert_fax_buffers(p, ast);
dahdi_setlinear(p->subs[SUB_REAL].dfd, 0);
law = DAHDI_LAW_DEFAULT;
res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETLAW, &law);
@ -5076,22 +5085,10 @@ static int dahdi_hangup(struct ast_channel *ast)
p->dsp = NULL;
}
if (p->bufferoverrideinuse) {
/* faxbuffers are in use, revert them */
struct dahdi_bufferinfo bi = {
.txbufpolicy = p->buf_policy,
.rxbufpolicy = p->buf_policy,
.bufsize = p->bufsize,
.numbufs = p->buf_no
};
int bpres;
if ((bpres = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SET_BUFINFO, &bi)) < 0) {
ast_log(LOG_WARNING, "Channel '%s' unable to revert buffer policy: %s\n", ast->name, strerror(errno));
}
p->bufferoverrideinuse = 0;
}
revert_fax_buffers(p, ast);
law = DAHDI_LAW_DEFAULT;
res = ioctl(p->subs[SUB_REAL].dfd, DAHDI_SETLAW, &law);
if (res < 0)
ast_log(LOG_WARNING, "Unable to set law on channel %d to default: %s\n", p->channel, strerror(errno));
/* Perform low level hangup if no owner left */