From 76f2699d2d3903b56e88f4daaa2af969618efa26 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Thu, 5 Jul 2018 20:43:35 +0000 Subject: [PATCH] res_pjsip_t38: Decline T.38 stream on failure case. 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 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/res/res_pjsip_t38.c b/res/res_pjsip_t38.c index a3cdc57f77..f423cb2cb3 100644 --- a/res/res_pjsip_t38.c +++ b/res/res_pjsip_t38.c @@ -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;