Changeset 57 for pjproject


Ignore:
Timestamp:
Nov 19, 2005 1:20:08 PM (19 years ago)
Author:
bennylp
Message:

Added UDP transport implementation

Location:
pjproject/trunk/pjsip
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/build/pjsip_core.dsp

    r43 r57  
    128128# Begin Source File 
    129129 
     130SOURCE=..\src\pjsip\sip_transport_udp.c 
     131# End Source File 
     132# Begin Source File 
     133 
    130134SOURCE=..\src\pjsip\sip_uri.c 
    131135# End Source File 
  • pjproject/trunk/pjsip/include/pjsip/sip_endpoint.h

    r54 r57  
    8181 */ 
    8282PJ_DECL(pj_status_t) pjsip_endpt_create(pj_pool_factory *pf, 
     83                                        const char *name, 
    8384                                        pjsip_endpoint **endpt); 
    8485 
     
    251252                                   void *token, 
    252253                                   pjsip_resolver_callback *cb); 
     254 
     255/** 
     256 * Get transport manager instance. 
     257 * 
     258 * @param endpt     The endpoint. 
     259 * 
     260 * @return          Transport manager instance. 
     261 */ 
     262PJ_DECL(pjsip_tpmgr*) pjsip_endpt_get_tpmgr(pjsip_endpoint *endpt); 
     263 
     264/** 
     265 * Get ioqueue instance. 
     266 * 
     267 * @param endpt     The endpoint. 
     268 * 
     269 * @return          The ioqueue. 
     270 */ 
     271PJ_DECL(pj_ioqueue_t*) pjsip_endpt_get_ioqueue(pjsip_endpoint *endpt); 
    253272 
    254273/** 
  • pjproject/trunk/pjsip/include/pjsip/sip_transport.h

    r54 r57  
    117117 *****************************************************************************/ 
    118118 
     119/**  
     120 * A customized ioqueue async operation key which is used by transport 
     121 * to locate rdata when a pending read operation completes. 
     122 */ 
     123typedef struct pjsip_rx_data_op_key 
     124{ 
     125    pj_ioqueue_op_key_t         op_key; 
     126    pjsip_rx_data              *rdata; 
     127} pjsip_rx_data_op_key; 
     128 
     129 
    119130/** 
    120131 * Incoming message buffer. 
     
    140151 
    141152        /** Ioqueue key. */ 
    142         pj_ioqueue_op_key_t      op_key; 
     153        pjsip_rx_data_op_key     op_key; 
    143154 
    144155    } tp_info; 
     
    250261 *****************************************************************************/ 
    251262 
     263/** Customized ioqueue async operation key, used by transport to keep 
     264 *  callback parameters. 
     265 */ 
     266typedef struct pjsip_tx_data_op_key 
     267{ 
     268    pj_ioqueue_op_key_t     key; 
     269    pjsip_tx_data          *tdata; 
     270    void                   *token; 
     271    void                  (*callback)(pjsip_transport*,void*,pj_ssize_t); 
     272} pjsip_tx_data_op_key; 
     273 
     274 
    252275/** 
    253276 * Data structure for sending outgoing message. Application normally creates 
     
    266289struct pjsip_tx_data 
    267290{ 
     291    /** This is for transmission queue; it's managed by transports. */ 
    268292    PJ_DECL_LIST_MEMBER(struct pjsip_tx_data); 
    269293 
     
    285309 
    286310    /** Ioqueue asynchronous operation key. */ 
    287     pj_ioqueue_op_key_t op_key; 
     311    pjsip_tx_data_op_key op_key; 
    288312 
    289313    /** Lock object. */ 
     
    304328    pj_atomic_t         *ref_cnt; 
    305329 
    306     /** Being sent? */ 
     330    /** Being processed by transport? */ 
    307331    int                  is_pending; 
    308332 
    309     /** Transport internal. */ 
     333    /** Transport manager internal. */ 
    310334    void                *token; 
    311335    void               (*cb)(void*, pjsip_tx_data*, pj_status_t); 
     
    392416    pj_sockaddr_in          rem_addr;       /**< Remote addr (zero for UDP) */ 
    393417 
     418    pjsip_endpoint         *endpt;          /**< Endpoint instance.         */ 
    394419    pjsip_tpmgr            *tpmgr;          /**< Transport manager.         */ 
    395420    pj_timer_entry          idle_timer;     /**< Timer when ref cnt is zero.*/ 
     
    421446     */ 
    422447    pj_status_t (*send_msg)(pjsip_transport *transport,  
    423                             const void *packet,  
    424                             pj_size_t length, 
    425                             pj_ioqueue_op_key_t *op_key, 
     448                            pjsip_tx_data *tdata, 
    426449                            const pj_sockaddr_in *rem_addr, 
    427450                            void *token, 
    428451                            void (*callback)(pjsip_transport *transport, 
    429452                                             void *token,  
    430                                              pj_status_t status)); 
     453                                             pj_ssize_t sent_bytes)); 
    431454 
    432455    /** 
     
    509532                                    pjsip_tpmgr *mgr, 
    510533                                    pjsip_endpoint *endpt, 
    511                                     pj_ioqueue_t *ioqueue, 
    512534                                    const pj_sockaddr_in *rem_addr, 
    513535                                    pjsip_transport **transport); 
     
    556578PJ_DECL(pj_status_t) pjsip_tpmgr_create( pj_pool_t *pool, 
    557579                                         pjsip_endpoint * endpt, 
    558                                          pj_ioqueue_t *ioqueue, 
    559                                          pj_timer_heap_t *timer_heap, 
    560580                                         void (*cb)(pjsip_endpoint*, 
    561581                                                    pj_status_t, 
     
    602622                                           void (*cb)(void *token,  
    603623                                                      pjsip_tx_data *tdata, 
    604                                                       pj_status_t)); 
     624                                                      pj_ssize_t bytes_sent)); 
    605625 
    606626 
  • pjproject/trunk/pjsip/src/pjsip/sip_endpoint.c

    r54 r57  
    5454    pj_pool_factory     *pf; 
    5555 
     56    /** Name. */ 
     57    pj_str_t             name; 
     58 
    5659    /** Transaction table. */ 
    5760    pj_hash_table_t     *tsx_table; 
     
    353356 */ 
    354357PJ_DEF(pj_status_t) pjsip_endpt_create(pj_pool_factory *pf, 
     358                                       const char *name, 
    355359                                       pjsip_endpoint **p_endpt) 
    356360{ 
     
    377381    endpt->pf = pf; 
    378382 
     383    /* Get name. */ 
     384    if (name != NULL) { 
     385        pj_str_t temp; 
     386        pj_strdup_with_null(endpt->pool, &endpt->name, pj_cstr(&temp, name)); 
     387    } else { 
     388        pj_strdup_with_null(endpt->pool, &endpt->name, pj_gethostname()); 
     389    } 
     390 
    379391    /* Create mutex for the events, etc. */ 
    380392    status = pj_mutex_create_recursive( endpt->pool, "ept%p", &endpt->mutex ); 
     
    423435    /* Create transport manager. */ 
    424436    status = pjsip_tpmgr_create( endpt->pool, endpt, 
    425                                  endpt->ioqueue, endpt->timer_heap, 
    426437                                 &endpt_transport_callback, 
    427438                                 &endpt->transport_mgr); 
     
    504515    pj_pool_release(endpt->pool); 
    505516} 
     517 
     518/* 
     519 * Get endpoint name. 
     520 */ 
     521PJ_DEF(const pj_str_t*) pjsip_endpt_name(const pjsip_endpoint *endpt) 
     522{ 
     523    return &endpt->name; 
     524} 
     525 
    506526 
    507527/* 
     
    943963 
    944964/* 
     965 * Get transport manager. 
     966 */ 
     967PJ_DEF(pjsip_tpmgr*) pjsip_endpt_get_tpmgr(pjsip_endpoint *endpt) 
     968{ 
     969    return endpt->transport_mgr; 
     970} 
     971 
     972/* 
     973 * Get ioqueue instance. 
     974 */ 
     975PJ_DEF(pj_ioqueue_t*) pjsip_endpt_get_ioqueue(pjsip_endpoint *endpt) 
     976{ 
     977    return endpt->ioqueue; 
     978} 
     979 
     980/* 
    945981 * Find/create transport. 
    946982 */ 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport.c

    r54 r57  
    4343    pj_lock_t       *lock; 
    4444    pjsip_endpoint  *endpt; 
    45     pj_ioqueue_t    *ioqueue; 
    46     pj_timer_heap_t *timer_heap; 
    4745    pjsip_tpfactory  factory_list; 
    4846    void           (*msg_cb)(pjsip_endpoint*, pj_status_t, pjsip_rx_data*); 
     
    357355        if (pj_atomic_get(tp->ref_cnt) == 1) { 
    358356            if (tp->idle_timer.id != PJ_FALSE) { 
    359                 pj_timer_heap_cancel(tp->tpmgr->timer_heap, &tp->idle_timer); 
     357                pjsip_endpt_cancel_timer(tp->tpmgr->endpt, &tp->idle_timer); 
    360358                tp->idle_timer.id = PJ_FALSE; 
    361359            } 
     
    384382            pj_assert(tp->idle_timer.id == 0); 
    385383            tp->idle_timer.id = PJ_TRUE; 
    386             pj_timer_heap_schedule(tp->tpmgr->timer_heap, &tp->idle_timer, &delay); 
     384            pjsip_endpt_schedule_timer(tp->tpmgr->endpt, &tp->idle_timer,  
     385                                       &delay); 
    387386        } 
    388387        pj_lock_release(tp->tpmgr->lock); 
     
    441440    pj_assert(tp->idle_timer.id == PJ_FALSE); 
    442441    if (tp->idle_timer.id != PJ_FALSE) { 
    443         pj_timer_heap_cancel(mgr->timer_heap, &tp->idle_timer); 
     442        pjsip_endpt_cancel_timer(mgr->endpt, &tp->idle_timer); 
    444443        tp->idle_timer.id = PJ_FALSE; 
    445444    } 
     
    532531PJ_DEF(pj_status_t) pjsip_tpmgr_create( pj_pool_t *pool, 
    533532                                        pjsip_endpoint *endpt, 
    534                                         pj_ioqueue_t *ioqueue, 
    535                                         pj_timer_heap_t *timer_heap, 
    536533                                        void (*cb)(pjsip_endpoint*, 
    537534                                                   pj_status_t, 
     
    549546    mgr->endpt = endpt; 
    550547    mgr->msg_cb = cb; 
    551     mgr->ioqueue = ioqueue; 
    552     mgr->timer_heap = timer_heap; 
    553548    pj_list_init(&mgr->factory_list); 
    554549 
     
    593588        itr = next; 
    594589    } 
    595     pj_ioqueue_destroy(mgr->ioqueue); 
    596590 
    597591    pj_lock_release(mgr->lock); 
     
    802796    /* Request factory to create transport. */ 
    803797    status = factory->create_transport(factory, mgr, mgr->endpt, 
    804                                        mgr->ioqueue, remote, p_transport); 
     798                                       remote, p_transport); 
    805799 
    806800    pj_lock_release(mgr->lock); 
Note: See TracChangeset for help on using the changeset viewer.