[Asterisk-cvs] asterisk/channels chan_zap.c,1.420,1.421
markster at lists.digium.com
markster at lists.digium.com
Sun Mar 27 16:55:01 CST 2005
Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv31093/channels
Modified Files:
chan_zap.c
Log Message:
Avoid excessive "PROGRESS" messages (bug #3807)
Index: chan_zap.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_zap.c,v
retrieving revision 1.420
retrieving revision 1.421
diff -u -d -r1.420 -r1.421
--- chan_zap.c 23 Mar 2005 21:12:01 -0000 1.420
+++ chan_zap.c 27 Mar 2005 22:48:55 -0000 1.421
@@ -2442,7 +2442,7 @@
/* Send a pri acknowledge */
if (!pri_grab(p, p->pri)) {
p->proceeding = 2;
- res = pri_answer(p->pri->pri, p->call, 0, 1);
+ res = pri_answer(p->pri->pri, p->call, 0, !p->digital);
pri_rel(p->pri);
} else {
ast_log(LOG_WARNING, "Unable to grab PRI on span %d\n", p->span);
@@ -4360,12 +4360,13 @@
return -1;
}
+#if 0
#ifdef ZAPATA_PRI
ast_mutex_lock(&p->lock);
if (!p->proceeding && p->sig==SIG_PRI && p->pri && !p->outgoing) {
if (p->pri->pri) {
if (!pri_grab(p, p->pri)) {
- pri_progress(p->pri->pri,p->call, PVT_TO_CHANNEL(p), 1);
+ pri_progress(p->pri->pri,p->call, PVT_TO_CHANNEL(p), !p->digital);
pri_rel(p->pri);
} else
ast_log(LOG_WARNING, "Unable to grab PRI on span %d\n", p->span);
@@ -4374,6 +4375,7 @@
}
ast_mutex_unlock(&p->lock);
#endif
+#endif
/* Write a frame of (presumably voice) data */
if (frame->frametype != AST_FRAME_VOICE) {
if (frame->frametype != AST_FRAME_IMAGE)
@@ -4471,7 +4473,7 @@
if ((p->proceeding < 2) && p->sig==SIG_PRI && p->pri && !p->outgoing) {
if (p->pri->pri) {
if (!pri_grab(p, p->pri)) {
- pri_acknowledge(p->pri->pri,p->call, PVT_TO_CHANNEL(p), 1);
+ pri_acknowledge(p->pri->pri,p->call, PVT_TO_CHANNEL(p), !p->digital);
pri_rel(p->pri);
}
else
@@ -4495,7 +4497,7 @@
if ((p->proceeding < 2) && p->sig==SIG_PRI && p->pri && !p->outgoing) {
if (p->pri->pri) {
if (!pri_grab(p, p->pri)) {
- pri_proceeding(p->pri->pri,p->call, PVT_TO_CHANNEL(p), 1);
+ pri_proceeding(p->pri->pri,p->call, PVT_TO_CHANNEL(p), !p->digital);
pri_rel(p->pri);
}
else
@@ -4510,6 +4512,7 @@
case AST_CONTROL_PROGRESS:
ast_log(LOG_DEBUG,"Received AST_CONTROL_PROGRESS on %s\n",chan->name);
#ifdef ZAPATA_PRI
+ p->digital = 0; /* Digital-only calls isn't allows any inband progress messages */
if (!p->proceeding && p->sig==SIG_PRI && p->pri && !p->outgoing) {
if (p->pri->pri) {
if (!pri_grab(p, p->pri)) {
@@ -8096,7 +8099,11 @@
/* Get chan value if e->e is not PRI_EVNT_RINGING */
chanpos = pri_find_principle(pri, e->proceeding.channel);
if (chanpos > -1) {
- if (pri->overlapdial && !pri->pvts[chanpos]->proceeding) {
+#ifdef PRI_PROGRESS_MASK
+ if ((pri->overlapdial && !pri->pvts[chanpos]->proceeding) || (e->proceeding.progressmask & PRI_PROG_INBAND_AVAILABLE)) {
+#else
+ if ((pri->overlapdial && !pri->pvts[chanpos]->proceeding) || (e->proceeding.progress == 8)) {
+#endif
struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_PROGRESS, };
ast_mutex_lock(&pri->pvts[chanpos]->lock);
@@ -8122,15 +8129,12 @@
chanpos = pri_find_principle(pri, e->proceeding.channel);
if (chanpos > -1) {
if (pri->overlapdial && !pri->pvts[chanpos]->proceeding) {
- struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_PROGRESS, };
+ struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_PROCEEDING, };
ast_mutex_lock(&pri->pvts[chanpos]->lock);
ast_log(LOG_DEBUG, "Queuing frame from PRI_EVENT_PROCEEDING on channel %d/%d span %d\n",
pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset,pri->span);
zap_queue_frame(pri->pvts[chanpos], &f, pri);
- f.subclass = AST_CONTROL_PROCEEDING;
- zap_queue_frame(pri->pvts[chanpos], &f, pri);
- pri->pvts[chanpos]->proceeding=2;
#ifdef PRI_PROGRESS_MASK
if (e->proceeding.progressmask & PRI_PROG_INBAND_AVAILABLE) {
#else
@@ -8141,6 +8145,9 @@
ast_dsp_set_features(pri->pvts[chanpos]->dsp, pri->pvts[chanpos]->dsp_features);
pri->pvts[chanpos]->dsp_features = 0;
}
+ /* Bring voice path up */
+ f.subclass = AST_CONTROL_PROGRESS;
+ zap_queue_frame(pri->pvts[chanpos], &f, pri);
}
ast_mutex_unlock(&pri->pvts[chanpos]->lock);
}
More information about the svn-commits
mailing list