|
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
stun_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_STUN_SESSION_H__
00020 #define __PJNATH_STUN_SESSION_H__
00021
00027 #include <pjnath/stun_msg.h>
00028 #include <pjnath/stun_auth.h>
00029 #include <pjnath/stun_config.h>
00030 #include <pjnath/stun_transaction.h>
00031 #include <pj/list.h>
00032 #include <pj/timer.h>
00033
00034 PJ_BEGIN_DECL
00035
00036
00037
00047 typedef struct pj_stun_tx_data pj_stun_tx_data;
00048
00050 typedef struct pj_stun_rx_data pj_stun_rx_data;
00051
00053 typedef struct pj_stun_session pj_stun_session;
00054
00055
00061 typedef struct pj_stun_session_cb
00062 {
00084 pj_status_t (*on_send_msg)(pj_stun_session *sess,
00085 void *token,
00086 const void *pkt,
00087 pj_size_t pkt_size,
00088 const pj_sockaddr_t *dst_addr,
00089 unsigned addr_len);
00090
00114 pj_status_t (*on_rx_request)(pj_stun_session *sess,
00115 const pj_uint8_t *pkt,
00116 unsigned pkt_len,
00117 const pj_stun_rx_data *rdata,
00118 void *token,
00119 const pj_sockaddr_t *src_addr,
00120 unsigned src_addr_len);
00121
00152 void (*on_request_complete)(pj_stun_session *sess,
00153 pj_status_t status,
00154 void *token,
00155 pj_stun_tx_data *tdata,
00156 const pj_stun_msg *response,
00157 const pj_sockaddr_t *src_addr,
00158 unsigned src_addr_len);
00159
00160
00180 pj_status_t (*on_rx_indication)(pj_stun_session *sess,
00181 const pj_uint8_t *pkt,
00182 unsigned pkt_len,
00183 const pj_stun_msg *msg,
00184 void *token,
00185 const pj_sockaddr_t *src_addr,
00186 unsigned src_addr_len);
00187
00188 } pj_stun_session_cb;
00189
00190
00194 struct pj_stun_rx_data
00195 {
00199 pj_stun_msg *msg;
00200
00206 pj_stun_req_cred_info info;
00207 };
00208
00209
00214 struct pj_stun_tx_data
00215 {
00217 PJ_DECL_LIST_MEMBER(struct pj_stun_tx_data);
00218
00219 pj_pool_t *pool;
00220 pj_stun_session *sess;
00221 pj_stun_msg *msg;
00223 void *token;
00225 pj_stun_client_tsx *client_tsx;
00226 pj_bool_t retransmit;
00227 pj_uint32_t msg_magic;
00228 pj_uint8_t msg_key[12];
00230 pj_stun_req_cred_info auth_info;
00232 void *pkt;
00233 unsigned max_len;
00234 unsigned pkt_size;
00236 unsigned addr_len;
00237 const pj_sockaddr_t *dst_addr;
00239 pj_timer_entry res_timer;
00240 };
00241
00242
00246 typedef enum pj_stun_sess_msg_log_flag
00247 {
00248 PJ_STUN_SESS_LOG_TX_REQ=1,
00249 PJ_STUN_SESS_LOG_TX_RES=2,
00250 PJ_STUN_SESS_LOG_TX_IND=4,
00252 PJ_STUN_SESS_LOG_RX_REQ=8,
00253 PJ_STUN_SESS_LOG_RX_RES=16,
00254 PJ_STUN_SESS_LOG_RX_IND=32
00255 } pj_stun_sess_msg_log_flag;
00256
00257
00270 PJ_DECL(pj_status_t) pj_stun_session_create(pj_stun_config *cfg,
00271 const char *name,
00272 const pj_stun_session_cb *cb,
00273 pj_bool_t fingerprint,
00274 pj_stun_session **p_sess);
00275
00288 PJ_DECL(pj_status_t) pj_stun_session_destroy(pj_stun_session *sess);
00289
00299 PJ_DECL(pj_status_t) pj_stun_session_set_user_data(pj_stun_session *sess,
00300 void *user_data);
00301
00310 PJ_DECL(void*) pj_stun_session_get_user_data(pj_stun_session *sess);
00311
00324 PJ_DECL(pj_status_t) pj_stun_session_set_lock(pj_stun_session *sess,
00325 pj_lock_t *lock,
00326 pj_bool_t auto_del);
00327
00336 PJ_DECL(pj_status_t) pj_stun_session_set_server_name(pj_stun_session *sess,
00337 const pj_str_t *srv_name);
00338
00354 PJ_DECL(pj_status_t) pj_stun_session_set_credential(pj_stun_session *sess,
00355 pj_stun_auth_type auth_type,
00356 const pj_stun_auth_cred *cred);
00363 PJ_DECL(void) pj_stun_session_set_log(pj_stun_session *sess,
00364 unsigned flags);
00365
00381 PJ_DECL(pj_status_t) pj_stun_session_create_req(pj_stun_session *sess,
00382 int msg_type,
00383 pj_uint32_t magic,
00384 const pj_uint8_t tsx_id[12],
00385 pj_stun_tx_data **p_tdata);
00386
00401 PJ_DECL(pj_status_t) pj_stun_session_create_ind(pj_stun_session *sess,
00402 int msg_type,
00403 pj_stun_tx_data **p_tdata);
00404
00426 PJ_DECL(pj_status_t) pj_stun_session_create_res(pj_stun_session *sess,
00427 const pj_stun_rx_data *rdata,
00428 unsigned err_code,
00429 const pj_str_t *err_msg,
00430 pj_stun_tx_data **p_tdata);
00431
00468 PJ_DECL(pj_status_t) pj_stun_session_send_msg(pj_stun_session *sess,
00469 void *token,
00470 pj_bool_t cache_res,
00471 pj_bool_t retransmit,
00472 const pj_sockaddr_t *dst_addr,
00473 unsigned addr_len,
00474 pj_stun_tx_data *tdata);
00475
00511 PJ_DECL(pj_status_t) pj_stun_session_respond(pj_stun_session *sess,
00512 const pj_stun_rx_data *rdata,
00513 unsigned code,
00514 const char *err_msg,
00515 void *token,
00516 pj_bool_t cache,
00517 const pj_sockaddr_t *dst_addr,
00518 unsigned addr_len);
00519
00538 PJ_DECL(pj_status_t) pj_stun_session_cancel_req(pj_stun_session *sess,
00539 pj_stun_tx_data *tdata,
00540 pj_bool_t notify,
00541 pj_status_t status);
00542
00556 PJ_DECL(pj_status_t) pj_stun_session_retransmit_req(pj_stun_session *sess,
00557 pj_stun_tx_data *tdata);
00558
00559
00596 PJ_DECL(pj_status_t) pj_stun_session_on_rx_pkt(pj_stun_session *sess,
00597 const void *packet,
00598 pj_size_t pkt_size,
00599 unsigned options,
00600 void *token,
00601 unsigned *parsed_len,
00602 const pj_sockaddr_t *src_addr,
00603 unsigned src_addr_len);
00604
00615 PJ_DECL(void) pj_stun_msg_destroy_tdata(pj_stun_session *sess,
00616 pj_stun_tx_data *tdata);
00617
00618
00624 PJ_END_DECL
00625
00626 #endif
00627
PJNATH - Open Source NAT traversal helper library supporting STUN, TURN, and ICE
(C)2001-2008 Benny Prijono
|
|