--- chan_zap.c.orig Sun Nov 7 01:02:43 2004 +++ chan_zap.c Sun Nov 7 02:16:08 2004 @@ -564,6 +564,7 @@ int alreadyhungup; int proceeding; int setup_ack; /* wheter we received SETUP_ACKNOWLEDGE or not */ + int dsp_features; #endif #ifdef ZAPATA_R2 int r2prot; @@ -4463,6 +4464,14 @@ } else { i->dsp = ast_dsp_new(); if (i->dsp) { +#ifdef ZAPATA_PRI + /* We cannot do progress detection until receives PROGRESS message */ + if (i->sig == SIG_PRI) { + /* Remember requested DSP features */ + i->dsp_features = features; + features = 0; + } +#endif ast_dsp_set_features(i->dsp, features); ast_dsp_digitmode(i->dsp, DSP_DIGITMODE_DTMF | i->dtmfrelax); if (!ast_strlen_zero(progzone)) @@ -7766,6 +7775,11 @@ ast_log(LOG_DEBUG, "Queuing frame from PRI_EVENT_PROGRESS 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); + if (e->proceeding.progress == 8) { /* Inband info is available */ + /* Now we can do call progress detection */ + if(pri->pvts[chanpos]->dsp) + ast_dsp_set_features(pri->pvts[chanpos]->dsp, pri->pvts[chanpos]->dsp_features); + } ast_mutex_unlock(&pri->pvts[chanpos]->lock); } }