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) {
|
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,
|
|||||||
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,
|
|||||||
(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;
|
||||||
|
Reference in New Issue
Block a user