More ticket #61: fix potential error when looking up SRTP error string, and improve logging information in SRTP transport
git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1739 74dad513-b988-da41-8d7b-12977e46ad98
This commit is contained in:
parent
1d481ab125
commit
04218f322d
|
@ -214,9 +214,17 @@ const char* get_libsrtp_errstr(int err)
|
||||||
"error while using semaphores", /* err_status_semaphore_err = 23 */
|
"error while using semaphores", /* err_status_semaphore_err = 23 */
|
||||||
"error while using pfkey" /* err_status_pfkey_err = 24 */
|
"error while using pfkey" /* err_status_pfkey_err = 24 */
|
||||||
};
|
};
|
||||||
|
if (err >= 0 && err < PJ_ARRAY_SIZE(liberr)) {
|
||||||
return liberr[err];
|
return liberr[err];
|
||||||
|
} else {
|
||||||
|
static char msg[32];
|
||||||
|
pj_ansi_snprintf(msg, sizeof(msg), "Unknown libsrtp error %d", err);
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
return NULL;
|
static char msg[32];
|
||||||
|
pj_ansi_snprintf(msg, sizeof(msg), "libsrtp error %d", err);
|
||||||
|
return msg;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,7 +236,8 @@ static pj_status_t pjmedia_srtp_init_lib(void)
|
||||||
err_status_t err;
|
err_status_t err;
|
||||||
err = srtp_init();
|
err = srtp_init();
|
||||||
if (err != err_status_ok) {
|
if (err != err_status_ok) {
|
||||||
PJ_LOG(4, (THIS_FILE, "Failed to init libsrtp."));
|
PJ_LOG(4, (THIS_FILE, "Failed to initialize libsrtp: %s",
|
||||||
|
get_libsrtp_errstr(err)));
|
||||||
return PJMEDIA_ERRNO_FROM_LIBSRTP(err);
|
return PJMEDIA_ERRNO_FROM_LIBSRTP(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,7 +389,8 @@ PJ_DEF(pj_status_t) pjmedia_transport_srtp_start(
|
||||||
int crypto_suites_cnt;
|
int crypto_suites_cnt;
|
||||||
|
|
||||||
if (srtp->session_inited) {
|
if (srtp->session_inited) {
|
||||||
PJ_LOG(4, (THIS_FILE, "SRTP could not be re-init'd before deinit'd"));
|
PJ_LOG(4, (srtp->pool->obj_name,
|
||||||
|
"Error: unable to start (not initialized)"));
|
||||||
return PJ_EINVALIDOP;
|
return PJ_EINVALIDOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,17 +493,17 @@ PJ_DEF(pj_status_t) pjmedia_transport_srtp_start(
|
||||||
/* Declare SRTP session initialized */
|
/* Declare SRTP session initialized */
|
||||||
srtp->session_inited = PJ_TRUE;
|
srtp->session_inited = PJ_TRUE;
|
||||||
|
|
||||||
PJ_LOG(5, (THIS_FILE, "TX: %s key=%s", srtp->tx_policy.name.ptr,
|
PJ_LOG(5, (srtp->pool->obj_name, "TX: %s key=%s", srtp->tx_policy.name.ptr,
|
||||||
octet_string_hex_string(tx->key.ptr, tx->key.slen)));
|
octet_string_hex_string(tx->key.ptr, tx->key.slen)));
|
||||||
if (srtp->tx_policy.flags) {
|
if (srtp->tx_policy.flags) {
|
||||||
PJ_LOG(5, (THIS_FILE, "TX: disable%s%s", (cr_tx_idx?"":" enc"),
|
PJ_LOG(5,(srtp->pool->obj_name,"TX: disable%s%s", (cr_tx_idx?"":" enc"),
|
||||||
(au_tx_idx?"":" auth")));
|
(au_tx_idx?"":" auth")));
|
||||||
}
|
}
|
||||||
|
|
||||||
PJ_LOG(5, (THIS_FILE, "RX: %s key=%s", srtp->rx_policy.name.ptr,
|
PJ_LOG(5, (srtp->pool->obj_name, "RX: %s key=%s", srtp->rx_policy.name.ptr,
|
||||||
octet_string_hex_string(rx->key.ptr, rx->key.slen)));
|
octet_string_hex_string(rx->key.ptr, rx->key.slen)));
|
||||||
if (srtp->rx_policy.flags) {
|
if (srtp->rx_policy.flags) {
|
||||||
PJ_LOG(5, (THIS_FILE, "RX: disable%s%s", (cr_rx_idx?"":" enc"),
|
PJ_LOG(5,(srtp->pool->obj_name,"RX: disable%s%s", (cr_rx_idx?"":" enc"),
|
||||||
(au_rx_idx?"":" auth")));
|
(au_rx_idx?"":" auth")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -513,11 +523,15 @@ PJ_DEF(pj_status_t) pjmedia_transport_srtp_stop(pjmedia_transport *srtp)
|
||||||
|
|
||||||
err = srtp_dealloc(p_srtp->srtp_rx_ctx);
|
err = srtp_dealloc(p_srtp->srtp_rx_ctx);
|
||||||
if (err != err_status_ok) {
|
if (err != err_status_ok) {
|
||||||
PJ_LOG(4, (THIS_FILE, "Failed to dealloc RX SRTP context"));
|
PJ_LOG(4, (p_srtp->pool->obj_name,
|
||||||
|
"Failed to dealloc RX SRTP context: %s",
|
||||||
|
get_libsrtp_errstr(err)));
|
||||||
}
|
}
|
||||||
err = srtp_dealloc(p_srtp->srtp_tx_ctx);
|
err = srtp_dealloc(p_srtp->srtp_tx_ctx);
|
||||||
if (err != err_status_ok) {
|
if (err != err_status_ok) {
|
||||||
PJ_LOG(4, (THIS_FILE, "Failed to dealloc TX SRTP context"));
|
PJ_LOG(4, (p_srtp->pool->obj_name,
|
||||||
|
"Failed to dealloc TX SRTP context: %s",
|
||||||
|
get_libsrtp_errstr(err)));
|
||||||
}
|
}
|
||||||
|
|
||||||
p_srtp->session_inited = PJ_FALSE;
|
p_srtp->session_inited = PJ_FALSE;
|
||||||
|
@ -713,8 +727,9 @@ static void srtp_rtp_cb( void *user_data, const void *pkt, pj_ssize_t size)
|
||||||
if (err == err_status_ok) {
|
if (err == err_status_ok) {
|
||||||
srtp->rtp_cb(srtp->user_data, srtp->rx_buffer, len);
|
srtp->rtp_cb(srtp->user_data, srtp->rx_buffer, len);
|
||||||
} else {
|
} else {
|
||||||
PJ_LOG(5, (THIS_FILE, "Failed to unprotect SRTP size=%d, err=%d",
|
PJ_LOG(5,(srtp->pool->obj_name,
|
||||||
size, err));
|
"Failed to unprotect SRTP, pkt size=%d, err=%s",
|
||||||
|
size, get_libsrtp_errstr(err)));
|
||||||
}
|
}
|
||||||
|
|
||||||
pj_lock_release(srtp->mutex);
|
pj_lock_release(srtp->mutex);
|
||||||
|
@ -746,8 +761,9 @@ static void srtp_rtcp_cb( void *user_data, const void *pkt, pj_ssize_t size)
|
||||||
if (err == err_status_ok) {
|
if (err == err_status_ok) {
|
||||||
srtp->rtcp_cb(srtp->user_data, srtp->rx_buffer, len);
|
srtp->rtcp_cb(srtp->user_data, srtp->rx_buffer, len);
|
||||||
} else {
|
} else {
|
||||||
PJ_LOG(5, (THIS_FILE, "Failed to unprotect SRTCP size=%d, err=%d",
|
PJ_LOG(5,(srtp->pool->obj_name,
|
||||||
size, err));
|
"Failed to unprotect SRTCP, pkt size=%d, err=%s",
|
||||||
|
size, get_libsrtp_errstr(err)));
|
||||||
}
|
}
|
||||||
|
|
||||||
pj_lock_release(srtp->mutex);
|
pj_lock_release(srtp->mutex);
|
||||||
|
@ -792,7 +808,8 @@ static pj_status_t generate_crypto_attr_value(pj_pool_t *pool,
|
||||||
err = crypto_get_random((unsigned char*)key,
|
err = crypto_get_random((unsigned char*)key,
|
||||||
crypto_suites[cs_idx].cipher_key_len);
|
crypto_suites[cs_idx].cipher_key_len);
|
||||||
if (err != err_status_ok) {
|
if (err != err_status_ok) {
|
||||||
PJ_LOG(5,(THIS_FILE, "Failed generating random key"));
|
PJ_LOG(5,(THIS_FILE, "Failed generating random key: %s",
|
||||||
|
get_libsrtp_errstr(err)));
|
||||||
return PJMEDIA_ERRNO_FROM_LIBSRTP(err);
|
return PJMEDIA_ERRNO_FROM_LIBSRTP(err);
|
||||||
}
|
}
|
||||||
for (i=0; i<crypto_suites[cs_idx].cipher_key_len && key_ok; ++i)
|
for (i=0; i<crypto_suites[cs_idx].cipher_key_len && key_ok; ++i)
|
||||||
|
@ -1243,7 +1260,8 @@ static pj_status_t transport_media_stop(pjmedia_transport *tp)
|
||||||
|
|
||||||
status = pjmedia_transport_media_stop(srtp->real_tp);
|
status = pjmedia_transport_media_stop(srtp->real_tp);
|
||||||
if (status != PJ_SUCCESS)
|
if (status != PJ_SUCCESS)
|
||||||
PJ_LOG(4, (THIS_FILE, "SRTP failed stop underlying media transport."));
|
PJ_LOG(4, (srtp->pool->obj_name,
|
||||||
|
"SRTP failed stop underlying media transport."));
|
||||||
|
|
||||||
return pjmedia_transport_srtp_stop(tp);
|
return pjmedia_transport_srtp_stop(tp);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue