Ignore:
Timestamp:
Mar 12, 2008 8:52:16 PM (16 years ago)
Author:
bennylp
Message:

More ticket #485: implementation of TURN UDP client session

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjnath/include/pjnath/turn_session.h

    r1854 r1862  
    4949#define PJ_TURN_NO_TIMEOUT          ((long)0x7FFFFFFF) 
    5050#define PJ_TURN_MAX_PKT_LEN         3000 
    51 #define PJ_TURN_PERM_TIMEOUT        300 
    52 #define PJ_TURN_CHANNEL_TIMEOUT     600 
    53  
    54  
    55 /** Transport types */ 
    56 enum { 
     51#define PJ_TURN_PERM_TIMEOUT        300 /* Must be greater than REFRESH_SEC_BEFORE */ 
     52#define PJ_TURN_CHANNEL_TIMEOUT     600 /* Must be greater than REFRESH_SEC_BEFORE */ 
     53#define PJ_TURN_REFRESH_SEC_BEFORE  60 
     54#define PJ_TURN_KEEP_ALIVE_SEC      15 
     55#define PJ_TURN_PEER_HTABLE_SIZE    8 
     56 
     57 
     58/** TURN transport types */ 
     59typedef enum pj_turn_tp_type 
     60{ 
    5761    PJ_TURN_TP_UDP = 16,    /**< UDP.   */ 
    58     PJ_TURN_TP_TCP = 6      /**< TCP.   */ 
    59 }; 
     62    PJ_TURN_TP_TCP = 6,     /**< TCP.   */ 
     63    PJ_TURN_TP_TLS = 256    /**< TLS.   */ 
     64} pj_turn_tp_type; 
     65 
     66 
     67/** TURN session state */ 
     68typedef enum pj_turn_state_t 
     69{ 
     70    /** 
     71     * TURN session has just been created. 
     72     */ 
     73    PJ_TURN_STATE_NULL, 
     74 
     75    /** 
     76     * TURN server has been configured and now is being resolved via 
     77     * DNS SRV resolution. 
     78     */ 
     79    PJ_TURN_STATE_RESOLVING, 
     80 
     81    /** 
     82     * TURN server has been resolved. If there is pending allocation to 
     83     * be done, it will be invoked immediately. 
     84     */ 
     85    PJ_TURN_STATE_RESOLVED, 
     86 
     87    /** 
     88     * TURN session has issued ALLOCATE request and is waiting for response 
     89     * from the TURN server. 
     90     */ 
     91    PJ_TURN_STATE_ALLOCATING, 
     92 
     93    /** 
     94     * TURN session has successfully allocated relay resoruce and now is 
     95     * ready to be used. 
     96     */ 
     97    PJ_TURN_STATE_READY, 
     98 
     99    /** 
     100     * TURN session has issued deallocate request and is waiting for a 
     101     * response from the TURN server. 
     102     */ 
     103    PJ_TURN_STATE_DEALLOCATING, 
     104 
     105    /** 
     106     * Deallocate response has been received. Normally the session will 
     107     * proceed to DESTROYING state immediately. 
     108     */ 
     109    PJ_TURN_STATE_DEALLOCATED, 
     110 
     111    /** 
     112     * TURN session is being destroyed. 
     113     */ 
     114    PJ_TURN_STATE_DESTROYING 
     115 
     116} pj_turn_state_t; 
     117 
    60118 
    61119/* ChannelData header */ 
     
    74132{ 
    75133    /** 
    76      * Callback to send outgoing packet. This callback is mandatory. 
     134     * This callback will be called by the TURN session whenever it 
     135     * needs to send outgoing message. Since the TURN session doesn't 
     136     * have a socket on its own, this callback must be implemented. 
    77137     */ 
    78138    pj_status_t (*on_send_pkt)(pj_turn_session *sess, 
     
    83143 
    84144    /** 
    85      * Notification when allocation completes, either successfully or 
    86      * with failure. 
    87      */ 
    88     void (*on_allocate_complete)(pj_turn_session *sess, 
    89                                  pj_status_t status); 
    90  
    91     /** 
    92      * Notification when data is received. 
     145     * Notification when peer address has been bound successfully to  
     146     * a channel number. 
     147     * 
     148     * This callback is optional. 
     149     */ 
     150    void (*on_channel_bound)(pj_turn_session *sess, 
     151                             const pj_sockaddr_t *peer_addr, 
     152                             unsigned addr_len, 
     153                             unsigned ch_num); 
     154 
     155    /** 
     156     * Notification when incoming data has been received, either through 
     157     * Data indication or ChannelData message from the TURN server. 
     158     * 
     159     * This callback is optional. 
    93160     */ 
    94161    void (*on_rx_data)(pj_turn_session *sess, 
     
    99166 
    100167    /** 
    101      * Notification when session has been destroyed. 
    102      */ 
    103     void (*on_destroyed)(pj_turn_session *sess); 
     168     * Notification when TURN session state has changed. Application should 
     169     * implement this callback at least to know that the TURN session is 
     170     * going to be destroyed. 
     171     */ 
     172    void (*on_state)(pj_turn_session *sess, pj_turn_state_t old_state, 
     173                     pj_turn_state_t new_state); 
    104174 
    105175} pj_turn_session_cb; 
     
    113183    int     bandwidth; 
    114184    int     lifetime; 
     185    int     ka_interval; 
    115186} pj_turn_alloc_param; 
    116187 
     
    121192typedef struct pj_turn_session_info 
    122193{ 
     194    /** 
     195     * The relay address 
     196     */ 
     197    pj_sockaddr     relay_addr; 
     198 
     199    /** 
     200     * The TURN server address for informational purpose. 
     201     */ 
    123202    pj_sockaddr     server; 
     203 
    124204} pj_turn_session_info; 
    125205 
    126206 
    127207/** 
     208 * Get TURN state name. 
     209 */ 
     210PJ_DECL(const char*) pj_turn_state_name(pj_turn_state_t state); 
     211 
     212 
     213/** 
    128214 * Create TURN client session. 
    129215 */ 
    130216PJ_DECL(pj_status_t) pj_turn_session_create(pj_stun_config *cfg, 
     217                                            const char *name, 
     218                                            int af, 
     219                                            pj_turn_tp_type conn_type, 
    131220                                            const pj_turn_session_cb *cb, 
     221                                            void *user_data, 
     222                                            unsigned options, 
    132223                                            pj_turn_session **p_sess); 
    133224 
     
    138229PJ_DECL(pj_status_t) pj_turn_session_destroy(pj_turn_session *sess); 
    139230 
     231 
     232/** 
     233 * Re-assign user data. 
     234 */ 
     235PJ_DECL(pj_status_t) pj_turn_session_set_user_data(pj_turn_session *sess, 
     236                                                   void *user_data); 
     237 
     238/** 
     239 * Retrieve user data. 
     240 */ 
     241PJ_DECL(void*) pj_turn_session_get_user_data(pj_turn_session *sess); 
    140242 
    141243/** 
     
    144246PJ_DECL(pj_status_t) pj_turn_session_set_server(pj_turn_session *sess, 
    145247                                                const pj_str_t *domain, 
    146                                                 const pj_str_t *res_name, 
    147248                                                int default_port, 
    148249                                                pj_dns_resolver *resolver); 
Note: See TracChangeset for help on using the changeset viewer.