--- ./asterisk-1.8.0/channels/chan_sip.c 2010-10-15 22:12:04.000000000 +0200 +++ ./asterisk-1.8.0-szabolcs/channels/chan_sip.c 2010-11-05 11:22:28.000000000 +0100 @@ -6360,7 +6360,20 @@ break; case AST_CONTROL_CONGESTION: if (ast->_state != AST_STATE_UP) { - transmit_response_reliable(p, "503 Service Unavailable", &p->initreq); + switch (ast->hangupcause){ + case AST_CAUSE_UNREGISTERED: + transmit_response_reliable(p, "480 Temporarily unavailable", &p->initreq); + break; + case AST_CAUSE_NO_ANSWER: + transmit_response_reliable(p, "480 Temporarily unavailable", &p->initreq); + break; + case AST_CAUSE_NORMAL_UNSPECIFIED: + transmit_response_reliable(p, "480 Temporarily unavailable", &p->initreq); + break; + default: + transmit_response_reliable(p, "503 Service Unavailable", &p->initreq); + break; + } p->invitestate = INV_COMPLETED; sip_alreadygone(p); ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);