00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __PJNATH_TURN_SESSION_H__
00021 #define __PJNATH_TURN_SESSION_H__
00022
00027 #include <pjnath/stun_session.h>
00028 #include <pjlib-util/resolver.h>
00029
00030
00031 PJ_BEGIN_DECL
00032
00033
00034
00131 typedef struct pj_turn_session pj_turn_session;
00132
00133
00139 typedef enum pj_turn_tp_type
00140 {
00144 PJ_TURN_TP_UDP = 17,
00145
00149 PJ_TURN_TP_TCP = 6,
00150
00155 PJ_TURN_TP_TLS = 255
00156
00157 } pj_turn_tp_type;
00158
00159
00161 typedef enum pj_turn_state_t
00162 {
00166 PJ_TURN_STATE_NULL,
00167
00172 PJ_TURN_STATE_RESOLVING,
00173
00178 PJ_TURN_STATE_RESOLVED,
00179
00184 PJ_TURN_STATE_ALLOCATING,
00185
00190 PJ_TURN_STATE_READY,
00191
00196 PJ_TURN_STATE_DEALLOCATING,
00197
00202 PJ_TURN_STATE_DEALLOCATED,
00203
00207 PJ_TURN_STATE_DESTROYING
00208
00209 } pj_turn_state_t;
00210
00211
00212 #pragma pack(1)
00213
00218 typedef struct pj_turn_channel_data
00219 {
00220 pj_uint16_t ch_number;
00221 pj_uint16_t length;
00222 } pj_turn_channel_data;
00223
00224
00225 #pragma pack()
00226
00227
00231 typedef struct pj_turn_session_cb
00232 {
00247 pj_status_t (*on_send_pkt)(pj_turn_session *sess,
00248 const pj_uint8_t *pkt,
00249 unsigned pkt_len,
00250 const pj_sockaddr_t *dst_addr,
00251 unsigned addr_len);
00252
00265 void (*on_channel_bound)(pj_turn_session *sess,
00266 const pj_sockaddr_t *peer_addr,
00267 unsigned addr_len,
00268 unsigned ch_num);
00269
00282 void (*on_rx_data)(pj_turn_session *sess,
00283 void *pkt,
00284 unsigned pkt_len,
00285 const pj_sockaddr_t *peer_addr,
00286 unsigned addr_len);
00287
00297 void (*on_state)(pj_turn_session *sess,
00298 pj_turn_state_t old_state,
00299 pj_turn_state_t new_state);
00300
00301 } pj_turn_session_cb;
00302
00303
00310 typedef struct pj_turn_alloc_param
00311 {
00318 int bandwidth;
00319
00324 int lifetime;
00325
00331 int ka_interval;
00332
00333 } pj_turn_alloc_param;
00334
00335
00339 typedef struct pj_turn_session_info
00340 {
00344 pj_turn_state_t state;
00345
00349 pj_status_t last_status;
00350
00354 pj_turn_tp_type conn_type;
00355
00359 pj_sockaddr server;
00360
00364 pj_sockaddr mapped_addr;
00365
00369 pj_sockaddr relay_addr;
00370
00374 int lifetime;
00375
00376 } pj_turn_session_info;
00377
00378
00384 PJ_DECL(void) pj_turn_alloc_param_default(pj_turn_alloc_param *prm);
00385
00386
00394 PJ_DECL(void) pj_turn_alloc_param_copy(pj_pool_t *pool,
00395 pj_turn_alloc_param *dst,
00396 const pj_turn_alloc_param *src);
00397
00405 PJ_DECL(const char*) pj_turn_state_name(pj_turn_state_t state);
00406
00407
00431 PJ_DECL(pj_status_t) pj_turn_session_create(const pj_stun_config *cfg,
00432 const char *name,
00433 int af,
00434 pj_turn_tp_type conn_type,
00435 const pj_turn_session_cb *cb,
00436 unsigned options,
00437 void *user_data,
00438 pj_turn_session **p_sess);
00439
00449 PJ_DECL(pj_status_t) pj_turn_session_shutdown(pj_turn_session *sess);
00450
00451
00469 PJ_DECL(pj_status_t) pj_turn_session_destroy(pj_turn_session *sess,
00470 pj_status_t last_err);
00471
00472
00484 PJ_DECL(pj_status_t) pj_turn_session_get_info(pj_turn_session *sess,
00485 pj_turn_session_info *info);
00486
00497 PJ_DECL(pj_status_t) pj_turn_session_set_user_data(pj_turn_session *sess,
00498 void *user_data);
00499
00508 PJ_DECL(void*) pj_turn_session_get_user_data(pj_turn_session *sess);
00509
00510
00517 PJ_DECL(void) pj_turn_session_set_log(pj_turn_session *sess,
00518 unsigned flags);
00519
00520
00532 PJ_DECL(pj_status_t) pj_turn_session_set_software_name(pj_turn_session *sess,
00533 const pj_str_t *sw);
00534
00535
00571 PJ_DECL(pj_status_t) pj_turn_session_set_server(pj_turn_session *sess,
00572 const pj_str_t *domain,
00573 int default_port,
00574 pj_dns_resolver *resolver);
00575
00576
00588 PJ_DECL(pj_status_t) pj_turn_session_set_credential(pj_turn_session *sess,
00589 const pj_stun_auth_cred *cred);
00590
00591
00614 PJ_DECL(pj_status_t) pj_turn_session_alloc(pj_turn_session *sess,
00615 const pj_turn_alloc_param *param);
00616
00617
00636 PJ_DECL(pj_status_t) pj_turn_session_set_perm(pj_turn_session *sess,
00637 unsigned addr_cnt,
00638 const pj_sockaddr addr[],
00639 unsigned options);
00640
00641
00665 PJ_DECL(pj_status_t) pj_turn_session_sendto(pj_turn_session *sess,
00666 const pj_uint8_t *pkt,
00667 unsigned pkt_len,
00668 const pj_sockaddr_t *peer_addr,
00669 unsigned addr_len);
00670
00690 PJ_DECL(pj_status_t) pj_turn_session_bind_channel(pj_turn_session *sess,
00691 const pj_sockaddr_t *peer,
00692 unsigned addr_len);
00693
00715 PJ_DECL(pj_status_t) pj_turn_session_on_rx_pkt(pj_turn_session *sess,
00716 void *pkt,
00717 pj_size_t pkt_len,
00718 pj_size_t *parsed_len);
00719
00720
00726 PJ_END_DECL
00727
00728
00729 #endif
00730