Ignore:
Timestamp:
Apr 9, 2008 9:38:12 AM (16 years ago)
Author:
bennylp
Message:

More ticket #485: huge changeset to support TURN TCP. Please see ticket #485 for the details

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjnath/src/pjturn-srv/listener_udp.c

    r1852 r1913  
    1818 */ 
    1919#include "turn.h" 
     20#include <pj/compat/socket.h> 
    2021 
    2122struct read_op 
     
    2829{ 
    2930    pj_turn_listener         base; 
     31 
    3032    pj_ioqueue_key_t        *key; 
    3133    unsigned                 read_cnt; 
    3234    struct read_op          **read_op;  /* Array of read_op's   */ 
     35 
     36    pj_turn_transport        tp;        /* Transport instance */ 
    3337}; 
    3438 
    3539 
    36 static pj_status_t udp_sendto(pj_turn_listener *listener, 
     40static pj_status_t udp_destroy(pj_turn_listener *udp); 
     41static void on_read_complete(pj_ioqueue_key_t *key,  
     42                             pj_ioqueue_op_key_t *op_key,  
     43                             pj_ssize_t bytes_read); 
     44 
     45static pj_status_t udp_sendto(pj_turn_transport *tp, 
    3746                              const void *packet, 
    3847                              pj_size_t size, 
     
    4049                              const pj_sockaddr_t *addr, 
    4150                              int addr_len); 
    42 static pj_status_t udp_destroy(pj_turn_listener *udp); 
    43 static void on_read_complete(pj_ioqueue_key_t *key,  
    44                              pj_ioqueue_op_key_t *op_key,  
    45                              pj_ssize_t bytes_read); 
     51static void udp_add_ref(pj_turn_transport *tp, 
     52                        pj_turn_allocation *alloc); 
     53static void udp_dec_ref(pj_turn_transport *tp, 
     54                        pj_turn_allocation *alloc); 
    4655 
    4756 
     
    7180    udp->base.tp_type = PJ_TURN_TP_UDP; 
    7281    udp->base.sock = PJ_INVALID_SOCKET; 
    73     udp->base.sendto = &udp_sendto; 
    7482    udp->base.destroy = &udp_destroy; 
    7583    udp->read_cnt = concurrency_cnt; 
    7684    udp->base.flags = flags; 
     85 
     86    udp->tp.obj_name = udp->base.obj_name; 
     87    udp->tp.info = udp->base.info; 
     88    udp->tp.listener = &udp->base; 
     89    udp->tp.sendto = &udp_sendto; 
     90    udp->tp.add_ref = &udp_add_ref; 
     91    udp->tp.dec_ref = &udp_dec_ref; 
    7792 
    7893    /* Create socket */ 
     
    173188 * Callback to send packet. 
    174189 */ 
    175 static pj_status_t udp_sendto(pj_turn_listener *listener, 
     190static pj_status_t udp_sendto(pj_turn_transport *tp, 
    176191                              const void *packet, 
    177192                              pj_size_t size, 
     
    181196{ 
    182197    pj_ssize_t len = size; 
    183     return pj_sock_sendto(listener->sock, packet, &len, flag, addr, addr_len); 
    184 } 
     198    return pj_sock_sendto(tp->listener->sock, packet, &len, flag, addr, addr_len); 
     199} 
     200 
     201 
     202static void udp_add_ref(pj_turn_transport *tp, 
     203                        pj_turn_allocation *alloc) 
     204{ 
     205    /* Do nothing */ 
     206    PJ_UNUSED_ARG(tp); 
     207    PJ_UNUSED_ARG(alloc); 
     208} 
     209 
     210static void udp_dec_ref(pj_turn_transport *tp, 
     211                        pj_turn_allocation *alloc) 
     212{ 
     213    /* Do nothing */ 
     214    PJ_UNUSED_ARG(tp); 
     215    PJ_UNUSED_ARG(alloc); 
     216} 
     217 
    185218 
    186219/* 
     
    212245        pj_pool_reset(rpool); 
    213246        read_op->pkt.pool = rpool; 
    214         read_op->pkt.listener = &udp->base; 
     247        read_op->pkt.transport = &udp->tp; 
    215248        read_op->pkt.src.tp_type = udp->base.tp_type; 
    216249 
     
    228261            bytes_read = -status; 
    229262 
    230     } while (status != PJ_EPENDING && status != PJ_ECANCELLED); 
    231 } 
    232  
     263    } while (status != PJ_EPENDING && status != PJ_ECANCELLED && 
     264             status != PJ_STATUS_FROM_OS(PJ_BLOCKING_ERROR_VAL)); 
     265} 
     266 
Note: See TracChangeset for help on using the changeset viewer.