[asterisk-commits] oej: branch 1.4 r66503 -
/branches/1.4/channels/chan_sip.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Tue May 29 12:32:58 MST 2007
Author: oej
Date: Tue May 29 14:32:57 2007
New Revision: 66503
URL: http://svn.digium.com/view/asterisk?view=rev&rev=66503
Log:
Properly handle 408 request timeout - according to the RFC, the dialog dies if a request in a dialog gets this response.
Modified:
branches/1.4/channels/chan_sip.c
Modified: branches/1.4/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/channels/chan_sip.c?view=diff&rev=66503&r1=66502&r2=66503
==============================================================================
--- branches/1.4/channels/chan_sip.c (original)
+++ branches/1.4/channels/chan_sip.c Tue May 29 14:32:57 2007
@@ -11926,6 +11926,7 @@
sip_alreadygone(p);
break;
+ case 408: /* Request timeout */
case 481: /* Call leg does not exist */
/* Could be REFER caused INVITE with replaces */
ast_log(LOG_WARNING, "Re-invite to non-existing call leg on other UA. SIP dialog '%s'. Giving up.\n", p->callid);
@@ -12099,6 +12100,14 @@
ast_log(LOG_NOTICE, "Failed to authenticate on REGISTER to '%s' (tries '%d')\n", get_header(&p->initreq, "From"), p->authtries);
ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);
}
+ break;
+ case 408: /* Request timeout */
+ if (global_regattempts_max)
+ p->registry->regattempts = global_regattempts_max+1;
+ ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);
+ r->call = NULL;
+ ast_sched_del(sched, r->timeout);
+ r->timeout = -1;
break;
case 479: /* SER: Not able to process the URI - address is wrong in register*/
ast_log(LOG_WARNING, "Got error 479 on register to %s@%s, giving up (check config)\n", p->registry->username,p->registry->hostname);
@@ -12389,6 +12398,21 @@
} else /* We can't handle this, giving up in a bad way */
ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);
+ break;
+ case 408: /* Request timeout - terminate dialog */
+ if (sipmethod == SIP_INVITE)
+ handle_response_invite(p, resp, rest, req, seqno);
+ else if (sipmethod == SIP_REGISTER)
+ res = handle_response_register(p, resp, rest, req, ignore, seqno);
+ else if (sipmethod == SIP_BYE) {
+ ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);
+ if (option_debug)
+ ast_log(LOG_DEBUG, "Got timeout on bye. Thanks for the answer. Now, kill this call\n");
+ } else {
+ if (owner)
+ ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
+ ast_set_flag(&p->flags[0], SIP_NEEDDESTROY);
+ }
break;
case 481: /* Call leg does not exist */
if (sipmethod == SIP_INVITE) {
More information about the asterisk-commits
mailing list