mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
res_pjsip: Send a 503 response when overload state if reliable transport.
When Asterisk's taskprocessors get overloaded we need to reduce the work load. res_pjsip currently ignores new SIP requests and relies on SIP retransmissions in the hope that the overload condition will clear soon enough to handle the retransmitted SIP request. This change adds the following code after ast_taskprocessor_alert_get() has returned TRUE: 1- identifies transport type. If non-udp then send a 503 response 2- if transport type is udp/udp6 then ignore, as before. Change-Id: I1c230b40d43a254ea0f226b7acf9ee480a5d3836
This commit is contained in:
committed by
Chris Savinovich
parent
2c35dfc502
commit
bc2420ee0e
@@ -530,12 +530,22 @@ static pj_bool_t distributor(pjsip_rx_data *rdata)
|
||||
* we are being overloaded and need to defer adding new work to
|
||||
* the system. To defer the work we will ignore the request and
|
||||
* rely on the peer's transport layer to retransmit the message.
|
||||
* We usually work off the overload within a few seconds. The
|
||||
* alternative is to send back a 503 response to these requests
|
||||
* and be done with it.
|
||||
* We usually work off the overload within a few seconds.
|
||||
* If transport is non-UDP we send a 503 response instead.
|
||||
*/
|
||||
ast_debug(3, "Taskprocessor overload alert: Ignoring '%s'.\n",
|
||||
pjsip_rx_data_get_info(rdata));
|
||||
switch (rdata->tp_info.transport->key.type) {
|
||||
case PJSIP_TRANSPORT_UDP6:
|
||||
case PJSIP_TRANSPORT_UDP:
|
||||
ast_debug(3, "Taskprocessor overload alert: Ignoring '%s'.\n",
|
||||
pjsip_rx_data_get_info(rdata));
|
||||
break;
|
||||
default:
|
||||
ast_debug(3, "Taskprocessor overload on non-udp transport. Received:'%s'. "
|
||||
"Responding with a 503.\n", pjsip_rx_data_get_info(rdata));
|
||||
pjsip_endpt_respond_stateless(ast_sip_get_pjsip_endpoint(), rdata,
|
||||
PJSIP_SC_SERVICE_UNAVAILABLE, NULL, NULL, NULL);
|
||||
break;
|
||||
}
|
||||
ao2_cleanup(dist);
|
||||
return PJ_TRUE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user