Merged revisions 282639 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r282639 | mnicholson | 2010-08-18 08:10:39 -0500 (Wed, 18 Aug 2010) | 13 lines
  
  Properly handle 200 and unknown responses conatined in NOTIFY requests received in response to REFER requests.
  
  This patch fixes the way asterisk handles NOTIFY requests received in response to REFER requests.  These changes to NOTIFY handler were first introduced in r217482.  This new change properly handles the 200 response by queueing an AST_TRANSFER_SUCCESS control frame and also prevents that control frame from being queued when provisional and unknown responses are received.
  
  (issue #17486)
  Reported by: davidw
  Tested by: mnicholson
  
  (issue #12713)
  Reported by: davidw
  
  Review: https://reviewboard.asterisk.org/r/860/
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@282640 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Matthew Nicholson 15 years ago
parent d85f1bf713
commit 70a7d40da7

@ -20365,18 +20365,8 @@ static int handle_request_notify(struct sip_pvt *p, struct sip_request *req, str
*sep++ = '\0'; /* Response string */ *sep++ = '\0'; /* Response string */
respcode = atoi(code); respcode = atoi(code);
switch (respcode) { switch (respcode) {
case 100: /* Trying: */
case 101: /* dialog establishment */
/* Don't do anything yet */
success = -1; /* Wait */
break;
case 183: /* Ringing: */
/* Don't do anything yet */
success = -1; /* Wait */
break;
case 200: /* OK: The new call is up, hangup this call */ case 200: /* OK: The new call is up, hangup this call */
/* Hangup the call that we are replacing */ /* Hangup the call that we are replacing */
success = -1; /* Wait */
break; break;
case 301: /* Moved permenantly */ case 301: /* Moved permenantly */
case 302: /* Moved temporarily */ case 302: /* Moved temporarily */
@ -20384,13 +20374,24 @@ static int handle_request_notify(struct sip_pvt *p, struct sip_request *req, str
success = FALSE; success = FALSE;
break; break;
case 503: /* Service Unavailable: The new call failed */ case 503: /* Service Unavailable: The new call failed */
/* Cancel transfer, continue the call */ case 603: /* Declined: Not accepted */
/* Cancel transfer, continue the current call */
success = FALSE; success = FALSE;
break; break;
case 603: /* Declined: Not accepted */ case 0: /* Parse error */
/* Cancel transfer, continue the current call */ /* Cancel transfer, continue the current call */
ast_log(LOG_NOTICE, "Error parsing sipfrag in NOTIFY in response to REFER.\n");
success = FALSE; success = FALSE;
break; break;
default:
if (respcode < 200) {
/* ignore provisional responses */
success = -1;
} else {
ast_log(LOG_NOTICE, "Got unknown code '%d' in NOTIFY in response to REFER.\n", respcode);
success = FALSE;
}
break;
} }
if (success == FALSE) { if (success == FALSE) {
ast_log(LOG_NOTICE, "Transfer failed. Sorry. Nothing further to do with this call\n"); ast_log(LOG_NOTICE, "Transfer failed. Sorry. Nothing further to do with this call\n");

Loading…
Cancel
Save