Setup DSP when SS7 call is connected or early media is available.

Outgoing SS7 calls fail to detect incoming DTMF so any bridged channel
that requires out-of-band DTMF will not work.

* Added sig_ss7_open_media() calls at appropriate places in sig_ss7.c.
The new call converts conditionaled out unconverted code and shows that
the code really did something useful.

* Improved some chan_dahdi DTMF debug messages to help track DTMF
handling.

(closes issue ASTERISK-19312)
Reported by: Igor Nikolaev
........

Merged revisions 358260 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 358261 from http://svn.asterisk.org/svn/asterisk/branches/10


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@358262 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett
2012-03-05 21:48:32 +00:00
parent 11bbc097b7
commit dda40528ed
3 changed files with 33 additions and 20 deletions

View File

@@ -151,6 +151,22 @@ static void sig_ss7_set_remotelyblocked(struct sig_ss7_chan *p, int is_blocked)
}
}
/*!
* \internal
* \brief Open the SS7 channel media path.
* \since 1.8.12
*
* \param p Channel private control structure.
*
* \return Nothing
*/
static void sig_ss7_open_media(struct sig_ss7_chan *p)
{
if (p->calls->open_media) {
p->calls->open_media(p->chan_pvt);
}
}
/*!
* \internal
* \brief Set the caller id information in the parent module.
@@ -807,12 +823,7 @@ void *ss7_linkset(void *data)
sig_ss7_queue_control(linkset, chanpos, AST_CONTROL_PROGRESS);
p->progress = 1;
sig_ss7_set_dialing(p, 0);
#if 0 /* This code no longer seems to be necessary so I did not convert it. */
if (p->dsp && p->dsp_features) {
ast_dsp_set_features(p->dsp, p->dsp_features);
p->dsp_features = 0;
}
#endif
sig_ss7_open_media(p);
}
break;
default:
@@ -1184,12 +1195,8 @@ void *ss7_linkset(void *data)
p->call_level = SIG_SS7_CALL_LEVEL_CONNECT;
}
sig_ss7_queue_control(linkset, chanpos, AST_CONTROL_ANSWER);
#if 0 /* This code no longer seems to be necessary so I did not convert it. */
if (p->dsp && p->dsp_features) {
ast_dsp_set_features(p->dsp, p->dsp_features);
p->dsp_features = 0;
}
#endif
sig_ss7_set_dialing(p, 0);
sig_ss7_open_media(p);
sig_ss7_set_echocanceller(p, 1);
sig_ss7_unlock_private(p);
}
@@ -1622,6 +1629,7 @@ int sig_ss7_answer(struct sig_ss7_chan *p, struct ast_channel *ast)
if (p->call_level < SIG_SS7_CALL_LEVEL_CONNECT) {
p->call_level = SIG_SS7_CALL_LEVEL_CONNECT;
}
sig_ss7_open_media(p);
res = isup_anm(p->ss7->ss7, p->ss7call);
ss7_rel(p->ss7);
return res;