srtp_t ortp_srtp_create_configure_session(enum ortp_srtp_crypto_suite_t suite, uint32_t ssrc, const char* snd_key, const char* rcv_key) { err_status_t err; srtp_t session; err = ortp_srtp_create(&session, NULL); if (err != err_status_ok) { ortp_error("Failed to create srtp session (%d)", err); return NULL; } // incoming stream { ssrc_t incoming_ssrc; srtp_policy_t policy; memset(&policy, 0, sizeof(srtp_policy_t)); incoming_ssrc.type = ssrc_any_inbound; if (!ortp_init_srtp_policy(session, &policy, suite, incoming_ssrc, rcv_key)) { ortp_srtp_dealloc(session); return NULL; } } // outgoing stream { ssrc_t outgoing_ssrc; srtp_policy_t policy; memset(&policy, 0, sizeof(srtp_policy_t)); policy.allow_repeat_tx=1; /*this is necessary to allow telephone-event to be sent 3 times for end of dtmf packet.*/ outgoing_ssrc.type = ssrc_specific; outgoing_ssrc.value = ssrc; if (!ortp_init_srtp_policy(session, &policy, suite, outgoing_ssrc, snd_key)) { ortp_srtp_dealloc(session); return NULL; } } return session; }
srtp_t ortp_srtp_create_configure_session(enum ortp_srtp_crypto_suite_t suite, uint32_t ssrc, const char* snd_key, const char* rcv_key) { err_status_t err; srtp_t session; err = ortp_srtp_create(&session, NULL); if (err != err_status_ok) { ortp_error("Failed to create srtp session (%d)", err); return NULL; } // incoming stream { ssrc_t incoming_ssrc; srtp_policy_t policy; memset(&policy, 0, sizeof(srtp_policy_t)); incoming_ssrc.type = ssrc_any_inbound; if (!ortp_init_srtp_policy(session, &policy, suite, incoming_ssrc, rcv_key)) { ortp_srtp_dealloc(session); return NULL; } } // outgoing stream { ssrc_t outgoing_ssrc; srtp_policy_t policy; memset(&policy, 0, sizeof(srtp_policy_t)); outgoing_ssrc.type = ssrc_specific; outgoing_ssrc.value = ssrc; if (!ortp_init_srtp_policy(session, &policy, suite, outgoing_ssrc, snd_key)) { ortp_srtp_dealloc(session); return NULL; } } return session; }