diff options
author | Richard Mudgett <rmudgett@digium.com> | 2012-03-05 21:48:32 +0000 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2012-03-05 21:48:32 +0000 |
commit | dda40528ed446ee7e42019bd0d257e181960697c (patch) | |
tree | 94ee4d9b203b454c9fbf61e36123c230b1fa5e8d /channels/sig_ss7.c | |
parent | 11bbc097b7d6e115ea413dd80b8deee95ee3dc63 (diff) |
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
Diffstat (limited to 'channels/sig_ss7.c')
-rw-r--r-- | channels/sig_ss7.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/channels/sig_ss7.c b/channels/sig_ss7.c index cebd6c808..a23f9b25c 100644 --- a/channels/sig_ss7.c +++ b/channels/sig_ss7.c @@ -153,6 +153,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. * \since 1.8 * @@ -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; |