diff options
author | Mark Michelson <mmichelson@digium.com> | 2009-07-23 15:46:34 +0000 |
---|---|---|
committer | Mark Michelson <mmichelson@digium.com> | 2009-07-23 15:46:34 +0000 |
commit | 98b4bdc1b983c0f4794c85ff316d75da8e8391ae (patch) | |
tree | 67d669ccfbe8854982b0a72cb3deaf805d0ba570 | |
parent | 3843480b8fe4b4fd43fce7315546bcf1265d26d2 (diff) |
Merged revisions 208262 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r208262 | mmichelson | 2009-07-23 10:43:07 -0500 (Thu, 23 Jul 2009) | 8 lines
Properly handle 183 responses which do not contain an SDP.
(closes issue #15442)
Reported by: ffloimair
Patches:
15442.patch uploaded by mmichelson (license 60)
Tested by: tkarl, ffloimair
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@208263 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | channels/chan_sip.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index b793742b1..2c8370be5 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -17934,7 +17934,6 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest case 183: /* Session progress */ if (!req->ignore && (p->invitestate != INV_CANCELLED) && sip_cancel_destroy(p)) ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n"); - /* Ignore 183 Session progress without SDP */ if (!req->ignore && p->owner) { if (get_rpid(p, req)) { /* Queue a connected line update */ @@ -17954,6 +17953,18 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest /* Queue a progress frame */ ast_queue_control(p->owner, AST_CONTROL_PROGRESS); } + } else { + /* Alcatel PBXs are known to send 183s with no SDP after sending + * a 100 Trying response. We're just going to treat this sort of thing + * the same as we would treat a 180 Ringing + */ + /*XXX I'm just following the same procedure for a 180 response, which + * doesn't change the invitestate of p. Shouldn't it be INV_PROCEEDING + * though? + */ + if (!req->ignore && p->owner) { + ast_queue_control(p->owner, AST_CONTROL_RINGING); + } } check_pendings(p); break; |