Ignore:
Timestamp:
Nov 19, 2005 8:28:08 PM (17 years ago)
Author:
bennylp
Message:

Changed transaction to refrect new transport changes

File:
1 edited

Legend:

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

    r57 r58  
    110110        /* Read next packet. */ 
    111111        bytes_read = sizeof(rdata->pkt_info.packet); 
     112        rdata->pkt_info.addr_len = sizeof(rdata->pkt_info.addr); 
    112113        status = pj_ioqueue_recvfrom(key, op_key,  
    113114                                     rdata->pkt_info.packet, 
     
    161162    pjsip_tx_data_op_key *tdata_op_key = (pjsip_tx_data_op_key*)op_key; 
    162163 
     164    tdata_op_key->tdata = NULL; 
     165 
    163166    if (tdata_op_key->callback) { 
    164167        tdata_op_key->callback(&tp->base, tdata_op_key->token, bytes_sent); 
     
    184187 
    185188    PJ_ASSERT_RETURN(transport && tdata, PJ_EINVAL); 
    186  
     189    PJ_ASSERT_RETURN(tdata->op_key.tdata == NULL, PJSIP_EPENDINGTX); 
     190     
    187191    /* Init op key. */ 
    188192    tdata->op_key.tdata = tdata; 
     
    240244 
    241245/* 
    242  * pjsip_udp_transport_start() 
    243  * 
    244  * Start an UDP transport/listener. 
    245  */ 
    246 PJ_DEF(pj_status_t) pjsip_udp_transport_start( pjsip_endpoint *endpt, 
    247                                                const pj_sockaddr_in *local, 
    248                                                const pj_sockaddr_in *pub_addr, 
    249                                                unsigned async_cnt, 
    250                                                pjsip_transport **p_transport) 
     246 * pjsip_udp_transport_attach() 
     247 * 
     248 * Attach UDP socket and start transport. 
     249 */ 
     250PJ_DEF(pj_status_t) pjsip_udp_transport_attach( pjsip_endpoint *endpt, 
     251                                                pj_sock_t sock, 
     252                                                const pj_sockaddr_in *pub_addr, 
     253                                                unsigned async_cnt, 
     254                                                pjsip_transport **p_transport) 
    251255{ 
    252256    pj_pool_t *pool; 
     
    255259    pj_ioqueue_callback ioqueue_cb; 
    256260    unsigned i; 
     261    int addrlen; 
    257262    pj_status_t status; 
    258263 
     
    273278 
    274279    /* Init addresses. */ 
    275     pj_memcpy(&tp->base.local_addr, local, sizeof(pj_sockaddr_in)); 
     280    addrlen = sizeof(tp->base.local_addr); 
     281    status = pj_sock_getsockname(sock, &tp->base.local_addr, &addrlen); 
     282    if (status != PJ_SUCCESS) { 
     283        pjsip_endpt_destroy_pool(endpt, pool); 
     284        return status; 
     285    } 
    276286    pj_memcpy(&tp->base.public_addr, pub_addr, sizeof(pj_sockaddr_in)); 
    277287    tp->base.rem_addr.sin_family = PJ_AF_INET; 
     
    287297        goto on_error; 
    288298 
    289     /* Create socket. */ 
    290     status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, &tp->sock); 
    291     if (status != PJ_SUCCESS) 
    292         goto on_error; 
    293  
    294     /* Bind socket. */ 
    295     status = pj_sock_bind(tp->sock, local, sizeof(pj_sockaddr_in)); 
    296     if (status != PJ_SUCCESS) 
    297         goto on_error; 
     299    /* Attach socket. */ 
     300    tp->sock = sock; 
    298301 
    299302    /* Register to ioqueue. */ 
     
    377380} 
    378381 
    379  
     382/* 
     383 * pjsip_udp_transport_start() 
     384 * 
     385 * Start an UDP transport/listener. 
     386 */ 
     387PJ_DEF(pj_status_t) pjsip_udp_transport_start( pjsip_endpoint *endpt, 
     388                                               const pj_sockaddr_in *local, 
     389                                               const pj_sockaddr_in *pub_addr, 
     390                                               unsigned async_cnt, 
     391                                               pjsip_transport **p_transport) 
     392{ 
     393    pj_sock_t sock; 
     394    pj_status_t status; 
     395 
     396    status = pj_sock_socket(PJ_AF_INET, PJ_SOCK_DGRAM, 0, &sock); 
     397    if (status != PJ_SUCCESS) 
     398        return status; 
     399 
     400    status = pj_sock_bind(sock, local, sizeof(*local)); 
     401    if (status != PJ_SUCCESS) { 
     402        pj_sock_close(sock); 
     403        return status; 
     404    } 
     405 
     406    return pjsip_udp_transport_attach( endpt, sock, pub_addr, async_cnt,  
     407                                       p_transport ); 
     408} 
     409 
     410 
Note: See TracChangeset for help on using the changeset viewer.