mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 03:20:57 +00:00
bridging: Ensure successful T.38 negotation
When a T.38 happens immediatly after call establishment, the control frame can be lost because the other leg is not yet in the bridge. This patch detects this case an makes sure T.38 negotation happens when the 2nd leg is being made compatible with the negotating first leg ASTERISK-26923 #close Change-Id: If334125ee61ed63550d242fc9efe7987e37e1d94
This commit is contained in:
committed by
George Joseph
parent
c5536eaee9
commit
7819f95791
@@ -56,6 +56,19 @@ static int simple_bridge_join(struct ast_bridge *bridge, struct ast_bridge_chann
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Request resend of T.38 negotiation if in progress and the other leg not yet T.38
|
||||
*/
|
||||
if (ast_channel_get_t38_state(c0) == T38_STATE_NEGOTIATING && ast_channel_get_t38_state(c1) == T38_STATE_UNKNOWN) {
|
||||
struct ast_control_t38_parameters parameters = { .request_response = AST_T38_REQUEST_PARMS, };
|
||||
ast_debug(3, "Sending T.38 param renegotiation to first channel %s.\n", ast_channel_name(c0));
|
||||
ast_indicate_data(c0, AST_CONTROL_T38_PARAMETERS, ¶meters, sizeof(parameters));
|
||||
}
|
||||
if (ast_channel_get_t38_state(c1) == T38_STATE_NEGOTIATING && ast_channel_get_t38_state(c0) == T38_STATE_UNKNOWN) {
|
||||
struct ast_control_t38_parameters parameters = { .request_response = AST_T38_REQUEST_PARMS, };
|
||||
ast_debug(3, "Sending T.38 param renegotiation to second channel %s.\n", ast_channel_name(c1));
|
||||
ast_indicate_data(c1, AST_CONTROL_T38_PARAMETERS, ¶meters, sizeof(parameters));
|
||||
}
|
||||
|
||||
return ast_channel_make_compatible(c0, c1);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user