summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-01-24 15:29:50 +0000
committerBenny Prijono <bennylp@teluu.com>2008-01-24 15:29:50 +0000
commit237dbf032a57a72e816ed8dca0bb7e0e89595614 (patch)
tree9d0ee00f67aa3aedbe65c0db62dc65b0b39faccb
parent83e87b76edf4c5c5819a0d08ba1ba0897bec10c7 (diff)
More ticket #61: fix potential error when looking up SRTP error string, and improve logging information in SRTP transport
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1739 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia/transport_srtp.c58
1 files changed, 38 insertions, 20 deletions
diff --git a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c
index 405f72c2..a7a38a5d 100644
--- a/pjmedia/src/pjmedia/transport_srtp.c
+++ b/pjmedia/src/pjmedia/transport_srtp.c
@@ -214,9 +214,17 @@ const char* get_libsrtp_errstr(int err)
"error while using semaphores", /* err_status_semaphore_err = 23 */
"error while using pfkey" /* err_status_pfkey_err = 24 */
};
- return liberr[err];
+ if (err >= 0 && err < PJ_ARRAY_SIZE(liberr)) {
+ return liberr[err];
+ } else {
+ static char msg[32];
+ pj_ansi_snprintf(msg, sizeof(msg), "Unknown libsrtp error %d", err);
+ return msg;
+ }
#else
- return NULL;
+ static char msg[32];
+ pj_ansi_snprintf(msg, sizeof(msg), "libsrtp error %d", err);
+ return msg;
#endif
}
@@ -228,7 +236,8 @@ static pj_status_t pjmedia_srtp_init_lib(void)
err_status_t err;
err = srtp_init();
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);
}
@@ -380,7 +389,8 @@ PJ_DEF(pj_status_t) pjmedia_transport_srtp_start(
int crypto_suites_cnt;
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;
}
@@ -483,18 +493,18 @@ PJ_DEF(pj_status_t) pjmedia_transport_srtp_start(
/* Declare SRTP session initialized */
srtp->session_inited = PJ_TRUE;
- PJ_LOG(5, (THIS_FILE, "TX: %s key=%s", srtp->tx_policy.name.ptr,
- octet_string_hex_string(tx->key.ptr, tx->key.slen)));
+ 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)));
if (srtp->tx_policy.flags) {
- PJ_LOG(5, (THIS_FILE, "TX: disable%s%s", (cr_tx_idx?"":" enc"),
- (au_tx_idx?"":" auth")));
+ PJ_LOG(5,(srtp->pool->obj_name,"TX: disable%s%s", (cr_tx_idx?"":" enc"),
+ (au_tx_idx?"":" auth")));
}
- PJ_LOG(5, (THIS_FILE, "RX: %s key=%s", srtp->rx_policy.name.ptr,
- octet_string_hex_string(rx->key.ptr, rx->key.slen)));
+ 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)));
if (srtp->rx_policy.flags) {
- PJ_LOG(5, (THIS_FILE, "RX: disable%s%s", (cr_rx_idx?"":" enc"),
- (au_rx_idx?"":" auth")));
+ PJ_LOG(5,(srtp->pool->obj_name,"RX: disable%s%s", (cr_rx_idx?"":" enc"),
+ (au_rx_idx?"":" auth")));
}
return PJ_SUCCESS;
@@ -513,11 +523,15 @@ PJ_DEF(pj_status_t) pjmedia_transport_srtp_stop(pjmedia_transport *srtp)
err = srtp_dealloc(p_srtp->srtp_rx_ctx);
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);
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;
@@ -713,8 +727,9 @@ static void srtp_rtp_cb( void *user_data, const void *pkt, pj_ssize_t size)
if (err == err_status_ok) {
srtp->rtp_cb(srtp->user_data, srtp->rx_buffer, len);
} else {
- PJ_LOG(5, (THIS_FILE, "Failed to unprotect SRTP size=%d, err=%d",
- size, err));
+ PJ_LOG(5,(srtp->pool->obj_name,
+ "Failed to unprotect SRTP, pkt size=%d, err=%s",
+ size, get_libsrtp_errstr(err)));
}
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) {
srtp->rtcp_cb(srtp->user_data, srtp->rx_buffer, len);
} else {
- PJ_LOG(5, (THIS_FILE, "Failed to unprotect SRTCP size=%d, err=%d",
- size, err));
+ PJ_LOG(5,(srtp->pool->obj_name,
+ "Failed to unprotect SRTCP, pkt size=%d, err=%s",
+ size, get_libsrtp_errstr(err)));
}
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,
crypto_suites[cs_idx].cipher_key_len);
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);
}
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);
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);
}