aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-03-12 22:52:58 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2008-03-12 22:52:58 +0000
commite9949822979f0b1c92d16c9af2e1ba683a5dc467 (patch)
tree2d6a93db9c56ddf66ba6bad59c3ac03d6fb2b869 /channels
parent4725920176ee0ba2f7eb5f567b4218358150c539 (diff)
Merged revisions 107157 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r107157 | file | 2008-03-10 15:00:21 -0500 (Mon, 10 Mar 2008) | 4 lines If we receive a 488 on a T38 request reinvite back to audio. As well reinvite across a bridge back to audio if one side doesn't negotiate to T38. (closes issue #8677) Reported by: alex-911 ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@108354 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 46fd9f10c..bb4136efa 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -5133,6 +5133,8 @@ static int sip_indicate(struct ast_channel *ast, int condition, const void *data
transmit_reinvite_with_sdp(p, TRUE, FALSE);
}
break;
+ case AST_T38_TERMINATED:
+ case AST_T38_REFUSED:
case AST_T38_REQUEST_TERMINATE: /* Shutdown T38 */
if (p->t38.state == T38_ENABLED)
transmit_reinvite_with_sdp(p, FALSE, FALSE);
@@ -14714,24 +14716,13 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru
break;
case 488: /* Not acceptable here */
xmitres = transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE);
- if (reinvite && p->udptl) {
- /* If this is a T.38 call, we should go back to
- audio. If this is an audio call - something went
- terribly wrong since we don't renegotiate codecs,
- only IP/port .
- */
+ if (p->udptl && p->t38.state == T38_LOCAL_REINVITE) {
change_t38_state(p, T38_DISABLED);
/* Try to reset RTP timers */
ast_rtp_set_rtptimers_onhold(p->rtp);
- ast_log(LOG_ERROR, "Got error on T.38 re-invite. Bad configuration. Peer needs to have T.38 disabled.\n");
- /*! \bug Is there any way we can go back to the audio call on both
- sides here?
- */
- /* While figuring that out, hangup the call */
- if (p->owner && !req->ignore)
- ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
- p->needdestroy = 1;
+ /* Trigger a reinvite back to audio */
+ transmit_reinvite_with_sdp(p, FALSE, FALSE);
} else if (p->udptl && p->t38.state == T38_LOCAL_DIRECT) {
/* We tried to send T.38 out in an initial INVITE and the remote side rejected it,
right now we can't fall back to audio so totally abort.