mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
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
This commit is contained in:
@@ -749,17 +749,17 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session,
|
||||
|
||||
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));
|
||||
@@ -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) {
|
||||
/* 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 */
|
||||
@@ -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)) {
|
||||
/* 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;
|
||||
|
Reference in New Issue
Block a user