diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-01-24 15:29:50 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-01-24 15:29:50 +0000 |
commit | 237dbf032a57a72e816ed8dca0bb7e0e89595614 (patch) | |
tree | 9d0ee00f67aa3aedbe65c0db62dc65b0b39faccb /pjmedia | |
parent | 83e87b76edf4c5c5819a0d08ba1ba0897bec10c7 (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
Diffstat (limited to 'pjmedia')
-rw-r--r-- | pjmedia/src/pjmedia/transport_srtp.c | 58 |
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); } |