summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2015-04-23 23:58:22 +0000
committerLiong Sauw Ming <ming@teluu.com>2015-04-23 23:58:22 +0000
commit8c471b2b3b3e5893385c2149ac0caf197631c307 (patch)
tree52641e6d2fe3142822d841ca1f6b09be901afe7f /pjmedia
parent606180e833ddb27238df07125b59166db9f019ff (diff)
Re #1843: Add support if app uses external libSRTP 1.5.x or above (thanks to Alexander Traud for the patch)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5079 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia/transport_srtp.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c
index 8844f2fa..3b4b2f2c 100644
--- a/pjmedia/src/pjmedia/transport_srtp.c
+++ b/pjmedia/src/pjmedia/transport_srtp.c
@@ -30,8 +30,21 @@
#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
+#if defined(PJ_HAS_SSL_SOCK) && (PJ_HAS_SSL_SOCK != 0)
+# include <openssl/rand.h>
+
+/* Suppress compile warning of OpenSSL deprecation (OpenSSL is deprecated
+ * since MacOSX 10.7).
+ */
+#if defined(PJ_DARWINOS) && PJ_DARWINOS==1
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+#endif
+
#if defined(PJMEDIA_EXTERNAL_SRTP) && (PJMEDIA_EXTERNAL_SRTP != 0)
# include <srtp/srtp.h>
+# include <srtp/crypto_kernel.h>
#else
# include <srtp.h>
#endif
@@ -1084,6 +1097,15 @@ static pj_status_t generate_crypto_attr_value(pj_pool_t *pool,
do {
key_ok = PJ_TRUE;
+
+#if defined(PJ_HAS_SSL_SOCK) && (PJ_HAS_SSL_SOCK != 0)
+ err = RAND_bytes((unsigned char*)key,
+ crypto_suites[cs_idx].cipher_key_len);
+ if (err != 1) {
+ PJ_LOG(5,(THIS_FILE, "Failed generating random key"));
+ return PJMEDIA_ERRNO_FROM_LIBSRTP(1);
+ }
+#else
err = crypto_get_random((unsigned char*)key,
crypto_suites[cs_idx].cipher_key_len);
if (err != err_status_ok) {
@@ -1091,6 +1113,7 @@ static pj_status_t generate_crypto_attr_value(pj_pool_t *pool,
get_libsrtp_errstr(err)));
return PJMEDIA_ERRNO_FROM_LIBSRTP(err);
}
+#endif
for (i=0; i<crypto_suites[cs_idx].cipher_key_len && key_ok; ++i)
if (key[i] == 0) key_ok = PJ_FALSE;