diff options
-rw-r--r-- | pjmedia/include/pjmedia/transport_srtp.h | 10 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/transport_srtp.c | 3 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 10 |
3 files changed, 22 insertions, 1 deletions
diff --git a/pjmedia/include/pjmedia/transport_srtp.h b/pjmedia/include/pjmedia/transport_srtp.h index e0407f4a..4ac99dc7 100644 --- a/pjmedia/include/pjmedia/transport_srtp.h +++ b/pjmedia/include/pjmedia/transport_srtp.h @@ -195,6 +195,16 @@ typedef struct pjmedia_srtp_info /** + * Initialize SRTP library. This function should be called before + * any SRTP functions, however calling #pjmedia_transport_srtp_create() + * will also invoke this function. This function will also register SRTP + * library deinitialization to #pj_atexit(), so the deinitialization + * of SRTP library will be performed automatically by PJLIB destructor. + */ +PJ_DECL(pj_status_t) pjmedia_srtp_init_lib(void); + + +/** * Initialize SRTP setting with its default values. * * @param opt SRTP setting to be initialized. diff --git a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c index d46d4fc0..cd9fb734 100644 --- a/pjmedia/src/pjmedia/transport_srtp.c +++ b/pjmedia/src/pjmedia/transport_srtp.c @@ -263,12 +263,13 @@ const char* get_libsrtp_errstr(int err) static void pjmedia_srtp_deinit_lib(void); -static pj_status_t pjmedia_srtp_init_lib(void) +PJ_DEF(pj_status_t) pjmedia_srtp_init_lib(void) { static pj_bool_t initialized = PJ_FALSE; if (initialized == PJ_FALSE) { err_status_t err; + err = srtp_init(); if (err != err_status_ok) { PJ_LOG(4, (THIS_FILE, "Failed to initialize libsrtp: %s", diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index bd41186a..5d81fb0b 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -279,6 +279,16 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg) &pjsua_var.null_port); PJ_ASSERT_RETURN(status == PJ_SUCCESS, status); +#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0) + /* Initialize SRTP library. */ + status = pjmedia_srtp_init_lib(); + if (status != PJ_SUCCESS) { + pjsua_perror(THIS_FILE, "Error initializing SRTP library", + status); + return status; + } +#endif + /* Perform NAT detection */ pjsua_detect_nat_type(); |