Skip to content
Snippets Groups Projects
Commit c9f8e068 authored by Joshua Colp's avatar Joshua Colp
Browse files

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
parent ee3cbce5
No related branches found
No related tags found
No related merge requests found
...@@ -749,17 +749,17 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session, ...@@ -749,17 +749,17 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session,
if (!session->endpoint->media.t38.enabled) { if (!session->endpoint->media.t38.enabled) {
ast_debug(3, "Declining; T.38 not enabled on session\n"); ast_debug(3, "Declining; T.38 not enabled on session\n");
return -1; return 0;
} }
if (!(state = t38_state_get_or_alloc(session))) { if (!(state = t38_state_get_or_alloc(session))) {
return -1; return 0;
} }
if ((session->t38state == T38_REJECTED) || (session->t38state == T38_DISABLED)) { if ((session->t38state == T38_REJECTED) || (session->t38state == T38_DISABLED)) {
ast_debug(3, "Declining; T.38 state is rejected or declined\n"); ast_debug(3, "Declining; T.38 state is rejected or declined\n");
t38_change_state(session, session_media, state, T38_DISABLED); 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)); ast_copy_pj_str(host, stream->conn ? &stream->conn->addr : &sdp->conn->addr, sizeof(host));
...@@ -768,7 +768,7 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session, ...@@ -768,7 +768,7 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session,
if (ast_sockaddr_resolve(&addrs, host, PARSE_PORT_FORBID, AST_AF_INET) <= 0) { 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 */ /* The provided host was actually invalid so we error out this negotiation */
ast_debug(3, "Declining; provided host is invalid\n"); ast_debug(3, "Declining; provided host is invalid\n");
return -1; return 0;
} }
/* Check the address family to make sure it matches configured */ /* Check the address family to make sure it matches configured */
...@@ -776,7 +776,7 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session, ...@@ -776,7 +776,7 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session,
(ast_sockaddr_is_ipv4(addrs) && session->endpoint->media.t38.ipv6)) { (ast_sockaddr_is_ipv4(addrs) && session->endpoint->media.t38.ipv6)) {
/* The address does not match configured */ /* The address does not match configured */
ast_debug(3, "Declining, provided host does not match configured address family\n"); ast_debug(3, "Declining, provided host does not match configured address family\n");
return -1; return 0;
} }
return 1; return 1;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment