Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 318547) +++ channels/chan_sip.c (working copy) @@ -19811,17 +19877,31 @@ res = handle_response_register(p, resp, rest, req, seqno); break; case 408: /* Request timeout - terminate dialog */ - if (sipmethod == SIP_INVITE) + switch(sipmethod) + { + case SIP_INVITE: handle_response_invite(p, resp, rest, req, seqno); - else if (sipmethod == SIP_REGISTER) + break; + + case SIP_REGISTER: res = handle_response_register(p, resp, rest, req, seqno); - else if (sipmethod == SIP_BYE) { + break; + + case SIP_BYE: pvt_set_needdestroy(p, "received 408 response"); ast_debug(4, "Got timeout on bye. Thanks for the answer. Now, kill this call\n"); - } else { + break; + + case SIP_INFO: + case SIP_MESSAGE: + /* IVeS - 408 error do not modify dialog state on INFO or MESSAGE requests */ + break; + + default: if (owner) ast_queue_control(p->owner, AST_CONTROL_CONGESTION); pvt_set_needdestroy(p, "received 408 response"); + break; } break; @@ -19911,7 +19991,7 @@ case 486: /* Busy here */ case 600: /* Busy everywhere */ case 603: /* Decline */ - if (p->owner) { + if (p->owner && sipmethod != SIP_INFO && sipmethod != SIP_MESSAGE) { sip_handle_cc(p, req, AST_CC_CCBS); ast_queue_control(p->owner, AST_CONTROL_BUSY); } @@ -19930,7 +20010,7 @@ case 502: /* Bad gateway */ case 503: /* Service Unavailable */ case 504: /* Server Timeout */ - if (owner) + if (owner && sipmethod != SIP_INFO && sipmethod != SIP_MESSAGE) ast_queue_control(p->owner, AST_CONTROL_CONGESTION); break; default: