Ignore:
Timestamp:
Jun 23, 2006 3:04:54 PM (18 years ago)
Author:
bennylp
Message:

Renamed pjsip_transport_unregister() to pjsip_transport_destroy(), also initial implementation of TCP transport

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsip/sip_transport.c

    r491 r550  
    517517 
    518518    entry->id = PJ_FALSE; 
    519     pjsip_transport_unregister(tp->tpmgr, tp); 
     519    pjsip_transport_destroy(tp); 
    520520} 
    521521 
     
    555555        /* Verify again. */ 
    556556        if (pj_atomic_get(tp->ref_cnt) == 0) { 
    557             pj_time_val delay = { PJSIP_TRANSPORT_IDLE_TIME, 0 }; 
     557            pj_time_val delay; 
     558             
     559            /* If transport is in graceful shutdown, then this is the 
     560             * last user who uses the transport. Schedule to destroy the 
     561             * transport immediately. Otherwise schedule idle timer. 
     562             */ 
     563            if (tp->is_shutdown) { 
     564                delay.sec = delay.msec = 0; 
     565            } else { 
     566                delay.sec = PJSIP_TRANSPORT_IDLE_TIME; 
     567                delay.msec = 0; 
     568            } 
    558569 
    559570            pj_assert(tp->idle_timer.id == 0); 
     
    624635} 
    625636 
     637 
     638/* 
     639 * Start graceful shutdown procedure for this transport.  
     640 */ 
     641PJ_DEF(pj_status_t) pjsip_transport_shutdown(pjsip_transport *tp) 
     642{ 
     643    pjsip_tpmgr *mgr; 
     644    pj_status_t status; 
     645 
     646    pj_lock_acquire(tp->lock); 
     647 
     648    mgr = tp->tpmgr; 
     649    pj_lock_acquire(mgr->lock); 
     650 
     651    /* Do nothing if transport is being shutdown already */ 
     652    if (tp->is_shutdown) { 
     653        pj_lock_release(tp->lock); 
     654        pj_lock_release(mgr->lock); 
     655        return PJ_SUCCESS; 
     656    } 
     657 
     658    status = PJ_SUCCESS; 
     659 
     660    /* Instruct transport to shutdown itself */ 
     661    if (tp->do_shutdown) 
     662        status = tp->do_shutdown(tp); 
     663     
     664    if (status == PJ_SUCCESS) 
     665        tp->is_shutdown = PJ_TRUE; 
     666 
     667    pj_lock_release(tp->lock); 
     668    pj_lock_release(mgr->lock); 
     669 
     670    return status; 
     671} 
     672 
     673 
    626674/** 
    627675 * Unregister transport. 
    628676 */ 
    629 PJ_DEF(pj_status_t) pjsip_transport_unregister( pjsip_tpmgr *mgr, 
    630                                                 pjsip_transport *tp) 
     677PJ_DEF(pj_status_t) pjsip_transport_destroy( pjsip_transport *tp) 
    631678{ 
    632679    /* Must have no user. */ 
     
    634681 
    635682    /* Destroy. */ 
    636     return destroy_transport(mgr, tp); 
     683    return destroy_transport(tp->tpmgr, tp); 
    637684} 
    638685 
     
    10301077    } 
    10311078     
    1032     if (transport != NULL) { 
     1079    if (transport!=NULL && !transport->is_shutdown) { 
    10331080        /* 
    10341081         * Transport found! 
Note: See TracChangeset for help on using the changeset viewer.