]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_t38: Decline T.38 stream on failure case.
authorJoshua Colp <jcolp@digium.com>
Thu, 5 Jul 2018 20:43:35 +0000 (20:43 +0000)
committerJoshua Colp <jcolp@digium.com>
Thu, 5 Jul 2018 20:43:35 +0000 (20:43 +0000)
When negotiating an incoming T.38 stream the code incorrectly
returned failure instead of a decline for the stream when a
problem occurred or the configuration didn't allow it. This
resulted in SDP offers being rejected with a 488 response
in all cases, even when another valid stream was present.

This change makes it so the stream is now declined. If no
streams are accepted a 488 response is sent while if at least
one stream is accepted all the declined streams are, well,
declined.

ASTERISK-27763

Change-Id: I88bcf793788c412a9839d111a5c736bf6867807c

res/res_pjsip_t38.c

index a3cdc57f7703bcda0f64a35f2765549299506f96..f423cb2cb30bc173a701ad60307676e9919f03c4 100644 (file)
@@ -690,17 +690,17 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session, struct
 
        if (!session->endpoint->media.t38.enabled) {
                ast_debug(3, "Declining; T.38 not enabled on session\n");
-               return -1;
+               return 0;
        }
 
        if (!(state = t38_state_get_or_alloc(session))) {
-               return -1;
+               return 0;
        }
 
        if ((session->t38state == T38_REJECTED) || (session->t38state == T38_DISABLED)) {
                ast_debug(3, "Declining; T.38 state is rejected or declined\n");
                t38_change_state(session, session_media, state, T38_DISABLED);
-               return -1;
+               return 0;
        }
 
        ast_copy_pj_str(host, stream->conn ? &stream->conn->addr : &sdp->conn->addr, sizeof(host));
@@ -709,7 +709,7 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session, struct
        if (ast_sockaddr_resolve(&addrs, host, PARSE_PORT_FORBID, AST_AF_INET) <= 0) {
                /* The provided host was actually invalid so we error out this negotiation */
                ast_debug(3, "Declining; provided host is invalid\n");
-               return -1;
+               return 0;
        }
 
        /* Check the address family to make sure it matches configured */
@@ -717,7 +717,7 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session, struct
                (ast_sockaddr_is_ipv4(addrs) && session->endpoint->media.t38.ipv6)) {
                /* The address does not match configured */
                ast_debug(3, "Declining, provided host does not match configured address family\n");
-               return -1;
+               return 0;
        }
 
        return 1;