From: Richard Mudgett Date: Wed, 25 Apr 2012 20:48:22 +0000 (+0000) Subject: Make DAHDISendCallreroutingFacility wait 5 seconds for a reply before disconnecting... X-Git-Tag: 10.5.0-rc1~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f381fecc875b91d9c170919e11d43792d3a3e22e;p=thirdparty%2Fasterisk.git Make DAHDISendCallreroutingFacility wait 5 seconds for a reply before disconnecting the call. Some switches may not handle the call-deflection/call-rerouting message if the call is disconnected too soon after being sent. Asteisk was not waiting for any reply before disconnecting the call. * Added a 5 second delay before disconnecting the call to wait for a potential response if the peer does not disconnect first. (closes issue ASTERISK-19708) Reported by: mehdi Shirazi Patches: jira_asterisk_19708_v1.8.patch (license #5621) patch uploaded by rmudgett Tested by: rmudgett ........ Merged revisions 363730 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@363734 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 6a782c537f..23dd52d63e 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -5977,7 +5977,7 @@ static int dahdi_send_callrerouting_facility_exec(struct ast_channel *chan, cons /* Data will be our digit string */ struct dahdi_pvt *pvt; char *parse; - int res = -1; + int res; AST_DECLARE_APP_ARGS(args, AST_APP_ARG(destination); AST_APP_ARG(original); @@ -6024,10 +6024,17 @@ static int dahdi_send_callrerouting_facility_exec(struct ast_channel *chan, cons args.reason = NULL; } - pri_send_callrerouting_facility_exec(pvt->sig_pvt, chan->_state, args.destination, - args.original, args.reason); + res = pri_send_callrerouting_facility_exec(pvt->sig_pvt, chan->_state, + args.destination, args.original, args.reason); + if (!res) { + /* + * Wait up to 5 seconds for a reply before hanging up this call + * leg if the peer does not disconnect first. + */ + ast_safe_sleep(chan, 5000); + } - return res; + return -1; } #endif /* defined(HAVE_PRI_PROG_W_CAUSE) */ #endif /* defined(HAVE_PRI) */ diff --git a/channels/sig_pri.c b/channels/sig_pri.c index fccef7afb5..48633ab7ce 100644 --- a/channels/sig_pri.c +++ b/channels/sig_pri.c @@ -9020,7 +9020,7 @@ int pri_send_keypad_facility_exec(struct sig_pri_chan *p, const char *digits) int pri_send_callrerouting_facility_exec(struct sig_pri_chan *p, enum ast_channel_state chanstate, const char *destination, const char *original, const char *reason) { - int res = -1; + int res; sig_pri_lock_private(p);