dialplan_functions: wrong srtp use status report of a dialplan function

If asterisk offer an endpoint with SRTP and that endpoint respond
with non srtp, in that case channel(rtp,secure,audio) reply wrong
status.

Why delete flag AST_SRTP_CRYPTO_OFFER_OK while check identical remote_key:
Currently this flag has being set redundantly. In either case identical
or different remote_key this flag has being set. So if we
don't set it while we receive identical remote_key or non SRTP SDP
response then we can take decision of srtp use by using that flag.

ASTERISK-27999

Change-Id: I29dc2843cf4e5ae2604301cb4ff258f1822dc2d7
This commit is contained in:
Salah Ahmed 2018-08-02 14:37:16 -05:00 committed by Richard Mudgett
parent ec813a3fdb
commit 523b7b2ffc
2 changed files with 7 additions and 2 deletions

View File

@ -529,7 +529,13 @@ static int channel_read_rtp(struct ast_channel *chan, const char *type, const ch
} else if (!strcmp(type, "direct")) {
ast_copy_string(buf, ast_sockaddr_stringify(&media->direct_media_addr), buflen);
} else if (!strcmp(type, "secure")) {
snprintf(buf, buflen, "%d", media->srtp ? 1 : 0);
if (media->srtp) {
struct ast_sdp_srtp *srtp = media->srtp;
int flag = ast_test_flag(srtp, AST_SRTP_CRYPTO_OFFER_OK);
snprintf(buf, buflen, "%d", flag ? 1 : 0);
} else {
snprintf(buf, buflen, "%d", 0);
}
} else if (!strcmp(type, "hold")) {
snprintf(buf, buflen, "%d", media->remotely_held ? 1 : 0);
} else {

View File

@ -1015,7 +1015,6 @@ static int res_sdp_crypto_parse_offer(struct ast_rtp_instance *rtp, struct ast_s
}
} else if (!memcmp(crypto->remote_key, remote_key, key_len_from_sdp)) {
ast_debug(1, "SRTP remote key unchanged; maintaining current policy\n");
ast_set_flag(srtp, AST_SRTP_CRYPTO_OFFER_OK);
return 0;
}