Ignore:
Timestamp:
Jun 28, 2006 4:46:49 PM (18 years ago)
Author:
bennylp
Message:

Major improvements in PJSIP to support TCP. The changes fall into these categories: (1) the TCP transport implementation itself (*.[hc]), (2) bug-fix in SIP transaction when using reliable transports, (3) support for TCP transport in PJSUA-LIB/PJSUA, and (4) changes in PJSIP-TEST to support TCP testing.

File:
1 edited

Legend:

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

    r550 r563  
    3737#define THIS_FILE    "sip_transport.c" 
    3838 
     39#if 0 
     40#   define TRACE_(x)    PJ_LOG(5,x) 
     41#else 
     42#   define TRACE_(x) 
     43#endif 
     44 
    3945/* Prototype. */ 
    4046static pj_status_t mod_on_tx_msg(pjsip_tx_data *tdata); 
     
    602608    pj_lock_release(mgr->lock); 
    603609 
     610    TRACE_((THIS_FILE,"Transport %s registered: type=%s, remote=%s:%d", 
     611                       tp->obj_name, 
     612                       pjsip_transport_get_type_name(tp->key.type), 
     613                       pj_inet_ntoa(((pj_sockaddr_in*)&tp->key.rem_addr)->sin_addr), 
     614                       pj_ntohs(((pj_sockaddr_in*)&tp->key.rem_addr)->sin_port))); 
     615 
    604616    return PJ_SUCCESS; 
    605617} 
     
    610622{ 
    611623    int key_len; 
     624 
     625    TRACE_((THIS_FILE, "Transport %s is being destroyed", tp->obj_name)); 
    612626 
    613627    pj_lock_acquire(tp->lock); 
     
    627641     */ 
    628642    key_len = sizeof(tp->key.type) + tp->addr_len; 
     643    pj_assert(pj_hash_get(mgr->table, &tp->key, key_len, NULL) != NULL); 
    629644    pj_hash_set(tp->pool, mgr->table, &tp->key, key_len, 0, NULL); 
    630645 
     
    643658    pjsip_tpmgr *mgr; 
    644659    pj_status_t status; 
     660 
     661    TRACE_((THIS_FILE, "Transport %s shutting down", tp->obj_name)); 
    645662 
    646663    pj_lock_acquire(tp->lock); 
     
    808825    pj_hash_iterator_t itr_val; 
    809826    pj_hash_iterator_t *itr; 
     827    pjsip_tpfactory *factory; 
    810828    pjsip_endpoint *endpt = mgr->endpt; 
    811829     
     
    814832    pj_lock_acquire(mgr->lock); 
    815833 
     834    /* 
     835     * Destroy all transports. 
     836     */ 
    816837    itr = pj_hash_first(mgr->table, &itr_val); 
    817838    while (itr != NULL) { 
     
    828849    } 
    829850 
     851    /* 
     852     * Destroy all factories/listeners. 
     853     */ 
     854    factory = mgr->factory_list.next; 
     855    while (factory != &mgr->factory_list) { 
     856        pjsip_tpfactory *next = factory->next; 
     857         
     858        factory->destroy(factory); 
     859 
     860        factory = next; 
     861    } 
     862 
    830863    pj_lock_release(mgr->lock); 
    831864    pj_lock_destroy(mgr->lock); 
     
    843876    //pj_assert(pj_atomic_get(mgr->tdata_counter) == 0); 
    844877    if (pj_atomic_get(mgr->tdata_counter) != 0) { 
    845         PJ_LOG(4,(THIS_FILE, "Warning: %d transmit buffers are not freed!", 
     878        PJ_LOG(3,(THIS_FILE, "Warning: %d transmit buffer(s) not freed!", 
    846879                  pj_atomic_get(mgr->tdata_counter))); 
    847880    } 
     
    880913 
    881914    /* Process all message fragments. */ 
    882     while (total_processed < remaining_len) { 
     915    while (remaining_len > 0) { 
    883916 
    884917        pjsip_msg *msg; 
    885         pj_size_t msg_fragment_size = 0; 
     918        pj_size_t msg_fragment_size; 
    886919 
    887920        /* Initialize default fragment size. */ 
     
    10391072    pj_status_t status; 
    10401073 
     1074    TRACE_((THIS_FILE,"Acquiring transport type=%s, remote=%s:%d", 
     1075                       pjsip_transport_get_type_name(type), 
     1076                       pj_inet_ntoa(((pj_sockaddr_in*)remote)->sin_addr), 
     1077                       pj_ntohs(((pj_sockaddr_in*)remote)->sin_port))); 
     1078 
    10411079    pj_lock_acquire(mgr->lock); 
    10421080 
     
    10841122        pj_lock_release(mgr->lock); 
    10851123        *tp = transport; 
     1124 
     1125        TRACE_((THIS_FILE, "Transport %s acquired", transport->obj_name)); 
    10861126        return PJ_SUCCESS; 
    10871127    } 
     
    11011141        /* No factory can create the transport! */ 
    11021142        pj_lock_release(mgr->lock); 
     1143        TRACE_((THIS_FILE, "No suitable factory was found either")); 
    11031144        return PJSIP_EUNSUPTRANSPORT; 
    11041145    } 
     1146 
     1147    TRACE_((THIS_FILE, "%s, creating new one from factory", 
     1148           (transport?"Transport is shutdown":"No transport found"))); 
    11051149 
    11061150    /* Request factory to create transport. */ 
Note: See TracChangeset for help on using the changeset viewer.