[asterisk-bugs] [JIRA] (ASTERISK-28718) chan_sip: Returns 403 if RTP ports are depleted, should return 503

Walter Doekes (JIRA) noreply at issues.asterisk.org
Tue Jan 28 04:07:25 CST 2020


Walter Doekes created ASTERISK-28718:
----------------------------------------

             Summary: chan_sip: Returns 403 if RTP ports are depleted, should return 503
                 Key: ASTERISK-28718
                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-28718
             Project: Asterisk
          Issue Type: Bug
      Security Level: None
          Components: Channels/chan_sip/Interoperability
    Affects Versions: 13.29.1
            Reporter: Walter Doekes


If you're out of RTP ports, you get this:
{noformat}
[2014-08-12 09:14:06] ERROR[23808] res_rtp_asterisk.c:
  Oh dear... we couldn't allocate a port for RTP instance '0x7f73e04d9098'
[2014-08-12 09:14:06] NOTICE[23808] chan_sip.c:
  Failed to authenticate device '<sip:XXX>;tag=XXX' (x.x.x.x:5060)
{noformat}
That in turn causes a 403 to be sent (because of the "AUTH_RTP_FAILED"), and the call will fail:
{code}
               if (res < 0) { /* Something failed in authentication */
                       ast_log(LOG_NOTICE, "Failed to authenticate device %s\n", sip_get_header(req, "From"));
                       transmit_response_reliable(p, "403 Forbidden", req);
{code}

What chan_sip _should_ do, is either be silent, or return a 5xx error, so the caller can choose a different machine to retry the call on.

*And, pjsip, for completeness sake*

I did take a quick peek at what pjsip does, and there, it seems a 488 is returned:
{code}
static int handle_incoming_sdp(struct ast_sip_session *session, const pjmedia_sdp_session *sdp)
...
                        res = handler->negotiate_incoming_sdp_stream(session, session_media, sdp, i, stream);
                        if (res < 0) {
                                /* Catastrophic failure. Abort! */
                                return -1;
...
        if (!handled) {
                return -1;
        }
{code}
{code}
                if (handle_incoming_sdp(invite->session, sdp_info->sdp)) {
                        tdata = NULL;
                        if (pjsip_inv_end_session(invite->session->inv_session, 488, NULL, &tdata) == PJ_SUCCESS
{code}
That does make sense in the (general) {{!handled}} case: a codec mismatch should indeed get a 488. But an out-of-memory/ports situation may benefit from a different status.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list