Ignore:
Timestamp:
Mar 12, 2008 8:52:16 PM (14 years ago)
Author:
bennylp
Message:

More ticket #485: implementation of TURN UDP client session

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjnath/src/pjnath/stun_session.c

    r1852 r1862  
    2424    pj_stun_config      *cfg; 
    2525    pj_pool_t           *pool; 
    26     pj_mutex_t          *mutex; 
     26    pj_lock_t           *lock; 
     27    pj_bool_t            delete_lock; 
    2728    pj_stun_session_cb   cb; 
    2829    void                *user_data; 
     
    403404    pj_list_init(&sess->cached_response_list); 
    404405 
    405     status = pj_mutex_create_recursive(pool, name, &sess->mutex); 
     406    status = pj_lock_create_recursive_mutex(pool, name, &sess->lock); 
    406407    if (status != PJ_SUCCESS) { 
    407408        pj_pool_release(pool); 
    408409        return status; 
    409410    } 
     411    sess->delete_lock = PJ_TRUE; 
    410412 
    411413    *p_sess = sess; 
     
    418420    PJ_ASSERT_RETURN(sess, PJ_EINVAL); 
    419421 
    420     pj_mutex_lock(sess->mutex); 
     422    pj_lock_acquire(sess->lock); 
    421423    while (!pj_list_empty(&sess->pending_request_list)) { 
    422424        pj_stun_tx_data *tdata = sess->pending_request_list.next; 
     
    427429        destroy_tdata(tdata); 
    428430    } 
    429     pj_mutex_unlock(sess->mutex); 
    430  
    431     pj_mutex_destroy(sess->mutex); 
     431    pj_lock_release(sess->lock); 
     432 
     433    if (sess->delete_lock) { 
     434        pj_lock_destroy(sess->lock); 
     435    } 
     436 
    432437    pj_pool_release(sess->pool); 
    433438 
     
    440445{ 
    441446    PJ_ASSERT_RETURN(sess, PJ_EINVAL); 
    442     pj_mutex_lock(sess->mutex); 
     447    pj_lock_acquire(sess->lock); 
    443448    sess->user_data = user_data; 
    444     pj_mutex_unlock(sess->mutex); 
     449    pj_lock_release(sess->lock); 
    445450    return PJ_SUCCESS; 
    446451} 
     
    450455    PJ_ASSERT_RETURN(sess, NULL); 
    451456    return sess->user_data; 
     457} 
     458 
     459PJ_DEF(pj_status_t) pj_stun_session_set_lock( pj_stun_session *sess, 
     460                                              pj_lock_t *lock, 
     461                                              pj_bool_t auto_del) 
     462{ 
     463    pj_lock_t *old_lock = sess->lock; 
     464    pj_bool_t old_del; 
     465 
     466    PJ_ASSERT_RETURN(sess && lock, PJ_EINVAL); 
     467 
     468    pj_lock_acquire(old_lock); 
     469    sess->lock = lock; 
     470    old_del = sess->delete_lock; 
     471    sess->delete_lock = auto_del; 
     472    pj_lock_release(old_lock); 
     473 
     474    if (old_lock) 
     475        pj_lock_destroy(old_lock); 
     476 
     477    return PJ_SUCCESS; 
    452478} 
    453479 
     
    603629 
    604630    /* Start locking the session now */ 
    605     pj_mutex_lock(sess->mutex); 
     631    pj_lock_acquire(sess->lock); 
    606632 
    607633    /* Apply options */ 
     
    609635    if (status != PJ_SUCCESS) { 
    610636        pj_stun_msg_destroy_tdata(sess, tdata); 
    611         pj_mutex_unlock(sess->mutex); 
     637        pj_lock_release(sess->lock); 
    612638        LOG_ERR_(sess, "Error applying options", status); 
    613639        return status; 
     
    617643    if (status != PJ_SUCCESS) { 
    618644        pj_stun_msg_destroy_tdata(sess, tdata); 
    619         pj_mutex_unlock(sess->mutex); 
     645        pj_lock_release(sess->lock); 
    620646        LOG_ERR_(sess, "Error getting creadential's key", status); 
    621647        return status; 
     
    629655    if (status != PJ_SUCCESS) { 
    630656        pj_stun_msg_destroy_tdata(sess, tdata); 
    631         pj_mutex_unlock(sess->mutex); 
     657        pj_lock_release(sess->lock); 
    632658        LOG_ERR_(sess, "STUN encode() error", status); 
    633659        return status; 
     
    657683        if (status != PJ_SUCCESS && status != PJ_EPENDING) { 
    658684            pj_stun_msg_destroy_tdata(sess, tdata); 
    659             pj_mutex_unlock(sess->mutex); 
     685            pj_lock_release(sess->lock); 
    660686            LOG_ERR_(sess, "Error sending STUN request", status); 
    661687            return status; 
     
    685711            if (status != PJ_SUCCESS) { 
    686712                pj_stun_msg_destroy_tdata(sess, tdata); 
    687                 pj_mutex_unlock(sess->mutex); 
     713                pj_lock_release(sess->lock); 
    688714                LOG_ERR_(sess, "Error scheduling response timer", status); 
    689715                return status; 
     
    708734 
    709735 
    710     pj_mutex_unlock(sess->mutex); 
     736    pj_lock_release(sess->lock); 
    711737    return status; 
    712738} 
     
    750776    PJ_ASSERT_RETURN(PJ_STUN_IS_REQUEST(tdata->msg->hdr.type), PJ_EINVAL); 
    751777 
    752     pj_mutex_lock(sess->mutex); 
     778    pj_lock_acquire(sess->lock); 
    753779 
    754780    if (notify) { 
     
    760786    pj_stun_msg_destroy_tdata(sess, tdata); 
    761787 
    762     pj_mutex_unlock(sess->mutex); 
     788    pj_lock_release(sess->lock); 
    763789    return PJ_SUCCESS; 
    764790} 
     
    775801    PJ_ASSERT_RETURN(PJ_STUN_IS_REQUEST(tdata->msg->hdr.type), PJ_EINVAL); 
    776802 
    777     pj_mutex_lock(sess->mutex); 
     803    pj_lock_acquire(sess->lock); 
    778804 
    779805    status = pj_stun_client_tsx_retransmit(tdata->client_tsx); 
    780806 
    781     pj_mutex_unlock(sess->mutex); 
     807    pj_lock_release(sess->lock); 
    782808 
    783809    return status; 
     
    10541080              pj_stun_msg_dump(msg, dump, PJ_STUN_MAX_PKT_LEN, NULL))); 
    10551081 
    1056     pj_mutex_lock(sess->mutex); 
     1082    pj_lock_acquire(sess->lock); 
    10571083 
    10581084    /* For requests, check if we have cached response */ 
     
    10891115 
    10901116on_return: 
    1091     pj_mutex_unlock(sess->mutex); 
     1117    pj_lock_release(sess->lock); 
    10921118 
    10931119    pj_pool_release(tmp_pool); 
Note: See TracChangeset for help on using the changeset viewer.