|
HOME
SIP/media Features
High Performance SIP
Small Footprint SIP
Symbian Port
FAQ
Documentation
Licensing
Download
Development (Trac)
Projects using pjsip
Mailing List
Open Source Links
About: PJLIB, PJLIB-UTIL, PJSIP, and PJMEDIA are created by: Benny Prijono <bennylp pjsip.org>
|
|
Home --> Documentations --> PJNATH Reference
ice_session.hGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __PJNATH_ICE_SESSION_H__
00020 #define __PJNATH_ICE_SESSION_H__
00021
00026 #include <pjnath/types.h>
00027 #include <pjnath/stun_session.h>
00028 #include <pjnath/errno.h>
00029 #include <pj/sock.h>
00030 #include <pj/timer.h>
00031
00038 PJ_BEGIN_DECL
00039
00040
00134 typedef struct pj_ice_sess_checklist pj_ice_sess_checklist;
00135
00139 typedef enum pj_ice_cand_type
00140 {
00145 PJ_ICE_CAND_TYPE_HOST,
00146
00152 PJ_ICE_CAND_TYPE_SRFLX,
00153
00158 PJ_ICE_CAND_TYPE_PRFLX,
00159
00164 PJ_ICE_CAND_TYPE_RELAYED
00165
00166 } pj_ice_cand_type;
00167
00168
00170 typedef struct pj_ice_sess pj_ice_sess;
00171
00173 typedef struct pj_ice_sess_check pj_ice_sess_check;
00174
00175
00183 typedef struct pj_ice_sess_comp
00184 {
00190 pj_ice_sess_check *valid_check;
00191
00196 pj_stun_session *stun_sess;
00197
00198 } pj_ice_sess_comp;
00199
00200
00204 typedef struct pj_ice_msg_data
00205 {
00206 unsigned transport_id;
00207 pj_bool_t has_req_data;
00208
00209 union data {
00210 struct request_data {
00211 pj_ice_sess *ice;
00212 pj_ice_sess_checklist *clist;
00213 unsigned ckid;
00214 } req;
00215 } data;
00216 } pj_ice_msg_data;
00217
00218
00227 typedef struct pj_ice_sess_cand
00228 {
00232 pj_ice_cand_type type;
00233
00240 pj_status_t status;
00241
00247 pj_uint8_t comp_id;
00248
00252 pj_uint8_t transport_id;
00253
00257 pj_uint16_t local_pref;
00258
00265 pj_str_t foundation;
00266
00272 pj_uint32_t prio;
00273
00283 pj_sockaddr addr;
00284
00293 pj_sockaddr base_addr;
00294
00299 pj_sockaddr rel_addr;
00300
00301 } pj_ice_sess_cand;
00302
00303
00307 typedef enum pj_ice_sess_check_state
00308 {
00314 PJ_ICE_SESS_CHECK_STATE_FROZEN,
00315
00321 PJ_ICE_SESS_CHECK_STATE_WAITING,
00322
00328 PJ_ICE_SESS_CHECK_STATE_IN_PROGRESS,
00329
00335 PJ_ICE_SESS_CHECK_STATE_SUCCEEDED,
00336
00342 PJ_ICE_SESS_CHECK_STATE_FAILED
00343
00344 } pj_ice_sess_check_state;
00345
00346
00354 struct pj_ice_sess_check
00355 {
00359 pj_ice_sess_cand *lcand;
00360
00364 pj_ice_sess_cand *rcand;
00365
00369 pj_timestamp prio;
00370
00374 pj_ice_sess_check_state state;
00375
00382 pj_stun_tx_data *tdata;
00383
00388 pj_bool_t nominated;
00389
00394 pj_status_t err_code;
00395 };
00396
00397
00401 typedef enum pj_ice_sess_checklist_state
00402 {
00406 PJ_ICE_SESS_CHECKLIST_ST_IDLE,
00407
00412 PJ_ICE_SESS_CHECKLIST_ST_RUNNING,
00413
00418 PJ_ICE_SESS_CHECKLIST_ST_COMPLETED
00419
00420 } pj_ice_sess_checklist_state;
00421
00422
00427 struct pj_ice_sess_checklist
00428 {
00432 pj_ice_sess_checklist_state state;
00433
00437 unsigned count;
00438
00442 pj_ice_sess_check checks[PJ_ICE_MAX_CHECKS];
00443
00447 pj_timer_entry timer;
00448
00449 };
00450
00451
00456 typedef struct pj_ice_sess_cb
00457 {
00466 void (*on_ice_complete)(pj_ice_sess *ice, pj_status_t status);
00467
00480 pj_status_t (*on_tx_pkt)(pj_ice_sess *ice, unsigned comp_id,
00481 unsigned transport_id,
00482 const void *pkt, pj_size_t size,
00483 const pj_sockaddr_t *dst_addr,
00484 unsigned dst_addr_len);
00485
00499 void (*on_rx_data)(pj_ice_sess *ice, unsigned comp_id,
00500 unsigned transport_id,
00501 void *pkt, pj_size_t size,
00502 const pj_sockaddr_t *src_addr,
00503 unsigned src_addr_len);
00504 } pj_ice_sess_cb;
00505
00506
00510 typedef enum pj_ice_sess_role
00511 {
00515 PJ_ICE_SESS_ROLE_UNKNOWN,
00516
00520 PJ_ICE_SESS_ROLE_CONTROLLED,
00521
00525 PJ_ICE_SESS_ROLE_CONTROLLING
00526
00527 } pj_ice_sess_role;
00528
00529
00539 typedef struct pj_ice_rx_check
00540 {
00541 PJ_DECL_LIST_MEMBER(struct pj_ice_rx_check);
00542
00543 unsigned comp_id;
00544 unsigned transport_id;
00546 pj_sockaddr src_addr;
00547 unsigned src_addr_len;
00549 pj_bool_t use_candidate;
00550 pj_uint32_t priority;
00551 pj_stun_uint64_attr *role_attr;
00553 } pj_ice_rx_check;
00554
00555
00565 struct pj_ice_sess
00566 {
00567 char obj_name[PJ_MAX_OBJ_NAME];
00569 pj_pool_t *pool;
00570 void *user_data;
00571 pj_mutex_t *mutex;
00572 pj_ice_sess_role role;
00573 pj_timestamp tie_breaker;
00574 pj_uint8_t *prefs;
00575 pj_bool_t is_complete;
00576 pj_status_t ice_status;
00577 pj_timer_entry completion_timer;
00578 pj_ice_sess_cb cb;
00580 pj_stun_config stun_cfg;
00582
00583 pj_str_t tx_ufrag;
00584 pj_str_t tx_uname;
00585 pj_str_t tx_pass;
00586 pj_str_t rx_ufrag;
00587 pj_str_t rx_uname;
00588 pj_str_t rx_pass;
00590
00591 unsigned comp_cnt;
00592 pj_ice_sess_comp comp[PJ_ICE_MAX_COMP];
00594
00595 unsigned lcand_cnt;
00596 pj_ice_sess_cand lcand[PJ_ICE_MAX_CAND];
00598
00599 unsigned rcand_cnt;
00600 pj_ice_sess_cand rcand[PJ_ICE_MAX_CAND];
00602
00603 pj_ice_msg_data tp_data[4];
00604
00605
00606 pj_ice_rx_check early_check;
00608
00609 pj_ice_sess_checklist clist;
00611
00612 pj_ice_sess_checklist valid_list;
00614
00615 union {
00616 char txt[128];
00617 char errmsg[PJ_ERR_MSG_SIZE];
00618 } tmp;
00619 };
00620
00621
00630 PJ_DECL(const char*) pj_ice_get_cand_type_name(pj_ice_cand_type type);
00631
00632
00641 PJ_DECL(const char*) pj_ice_sess_role_name(pj_ice_sess_role role);
00642
00643
00653 PJ_DECL(void) pj_ice_calc_foundation(pj_pool_t *pool,
00654 pj_str_t *foundation,
00655 pj_ice_cand_type type,
00656 const pj_sockaddr *base_addr);
00657
00658
00683 PJ_DECL(pj_status_t) pj_ice_sess_create(pj_stun_config *stun_cfg,
00684 const char *name,
00685 pj_ice_sess_role role,
00686 unsigned comp_cnt,
00687 const pj_ice_sess_cb *cb,
00688 const pj_str_t *local_ufrag,
00689 const pj_str_t *local_passwd,
00690 pj_ice_sess **p_ice);
00691
00701 PJ_DECL(pj_status_t) pj_ice_sess_destroy(pj_ice_sess *ice);
00702
00703
00715 PJ_DECL(pj_status_t) pj_ice_sess_change_role(pj_ice_sess *ice,
00716 pj_ice_sess_role new_role);
00717
00718
00736 PJ_DECL(pj_status_t) pj_ice_sess_set_prefs(pj_ice_sess *ice,
00737 const pj_uint8_t prefs[4]);
00738
00739
00740
00762 PJ_DECL(pj_status_t) pj_ice_sess_add_cand(pj_ice_sess *ice,
00763 unsigned comp_id,
00764 unsigned transport_id,
00765 pj_ice_cand_type type,
00766 pj_uint16_t local_pref,
00767 const pj_str_t *foundation,
00768 const pj_sockaddr_t *addr,
00769 const pj_sockaddr_t *base_addr,
00770 const pj_sockaddr_t *rel_addr,
00771 int addr_len,
00772 unsigned *p_cand_id);
00773
00788 PJ_DECL(pj_status_t) pj_ice_sess_find_default_cand(pj_ice_sess *ice,
00789 unsigned comp_id,
00790 int *p_cand_id);
00791
00813 PJ_DECL(pj_status_t)
00814 pj_ice_sess_create_check_list(pj_ice_sess *ice,
00815 const pj_str_t *rem_ufrag,
00816 const pj_str_t *rem_passwd,
00817 unsigned rem_cand_cnt,
00818 const pj_ice_sess_cand rem_cand[]);
00819
00829 PJ_DECL(pj_status_t) pj_ice_sess_start_check(pj_ice_sess *ice);
00830
00831
00849 PJ_DECL(pj_status_t) pj_ice_sess_send_data(pj_ice_sess *ice,
00850 unsigned comp_id,
00851 const void *data,
00852 pj_size_t data_len);
00853
00873 PJ_DECL(pj_status_t) pj_ice_sess_on_rx_pkt(pj_ice_sess *ice,
00874 unsigned comp_id,
00875 unsigned transport_id,
00876 void *pkt,
00877 pj_size_t pkt_size,
00878 const pj_sockaddr_t *src_addr,
00879 int src_addr_len);
00880
00881
00882
00888 PJ_END_DECL
00889
00890
00891 #endif
00892
PJNATH - Open Source NAT traversal helper library supporting STUN, TURN, and ICE
(C)2001-2008 Benny Prijono
|
|