diff options
author | Liong Sauw Ming <ming@teluu.com> | 2011-09-21 10:20:01 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2011-09-21 10:20:01 +0000 |
commit | 8a8b2bba54aedc161159225259b83e6d7c1d17b3 (patch) | |
tree | 45a096a1b1cb6f3d5c5d3e016ce6147969a0d9b0 /pjsip/include/pjsua-lib/pjsua_internal.h | |
parent | be8d37186b16150716f752883ae6857a0161db40 (diff) |
Re #1266: Asynchronous media transport creation
* Add feature that allows ICE media transport to be created asynchronously.
* Add new callback, e.g. on_call_media_transport_state(call_id, state_struct) to report media transport status.
* Handle outgoing calls while creating media transport asynchronously.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3763 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/include/pjsua-lib/pjsua_internal.h')
-rw-r--r-- | pjsip/include/pjsua-lib/pjsua_internal.h | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/pjsip/include/pjsua-lib/pjsua_internal.h b/pjsip/include/pjsua-lib/pjsua_internal.h index 01d32887..2a2dc095 100644 --- a/pjsip/include/pjsua-lib/pjsua_internal.h +++ b/pjsip/include/pjsua-lib/pjsua_internal.h @@ -27,28 +27,12 @@ PJ_BEGIN_DECL -/** - * Media transport state. - */ -typedef enum pjsua_med_tp_st -{ - /** Not initialized */ - PJSUA_MED_TP_IDLE, - - /** Initialized (media_create() has been called) */ - PJSUA_MED_TP_INIT, - - /** Running (media_start() has been called) */ - PJSUA_MED_TP_RUNNING, - - /** Disabled (transport is initialized, but media is being disabled) */ - PJSUA_MED_TP_DISABLED - -} pjsua_med_tp_st; - /** Forward decl of pjsua call */ typedef struct pjsua_call pjsua_call; +/** Forward decl of pjsua call media */ +typedef struct pjsua_call_media pjsua_call_media; + /** * Call's media stream. @@ -92,15 +76,23 @@ typedef struct pjsua_call_media pjmedia_transport *tp; /**< Current media transport (can be 0) */ pj_status_t tp_ready; /**< Media transport status. */ pjmedia_transport *tp_orig; /**< Original media transport */ - pj_bool_t tp_auto_del; /**< May delete media transport */ + pj_bool_t tp_auto_del; /**< May delete media transport */ pjsua_med_tp_st tp_st; /**< Media transport state */ pj_sockaddr rtp_addr; /**< Current RTP source address (used to update ICE default address) */ pjmedia_srtp_use rem_srtp_use; /**< Remote's SRTP usage policy. */ - pjmedia_event_subscription esub_rend;/**< Subscribe renderer events. */ + pjmedia_event_subscription esub_rend;/**< Subscribe renderer events. */ pjmedia_event_subscription esub_cap;/**< Subscribe capture events. */ + + pjsua_med_tp_state_cb med_init_cb;/**< Media transport + initialization callback. */ + + /** Media transport creation callback. */ + pj_status_t (*med_create_cb)(pjsua_call_media *call_med, + pj_status_t status, int security_level, + int *sip_err_code); } pjsua_call_media; /** @@ -132,6 +124,9 @@ struct pjsua_call unsigned med_cnt; /**< Number of media in SDP. */ pjsua_call_media media[PJSUA_MAX_CALL_MEDIA]; /**< Array of media */ int audio_idx; /**< First active audio media. */ + pj_mutex_t *med_ch_mutex;/**< Media channel callback's mutex. */ + pjsua_med_tp_state_cb med_ch_cb;/**< Media channel callback. */ + pjsua_med_tp_state_info med_ch_info;/**< Media channel info. */ pjsip_evsub *xfer_sub; /**< Xfer server subscription, if this call was triggered by xfer. */ @@ -147,6 +142,17 @@ struct pjsua_call } lock_codec; /**< Data for codec locking when answer contains multiple codecs. */ + struct { + pjsip_dialog *dlg; /**< Call dialog. */ + pjmedia_sdp_session *rem_sdp;/**< Remote SDP. */ + union { + struct { + unsigned options; /**< Outgoing call options. */ + pjsua_msg_data *msg_data;/**< Headers for outgoing INVITE. */ + } out_call; + } call_var; + } async_call; /**< Temporary storage for async + outgoing/incoming call. */ }; @@ -508,7 +514,9 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, int security_level, pj_pool_t *tmp_pool, const pjmedia_sdp_session *rem_sdp, - int *sip_err_code); + int *sip_err_code, + pj_bool_t async, + pjsua_med_tp_state_cb cb); pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id, pj_pool_t *pool, const pjmedia_sdp_session *rem_sdp, @@ -523,12 +531,15 @@ pj_status_t pjsua_call_media_init(pjsua_call_media *call_med, pjmedia_type type, const pjsua_transport_config *tcfg, int security_level, - int *sip_err_code); + int *sip_err_code, + pj_bool_t async, + pjsua_med_tp_state_cb cb); pj_status_t video_channel_update(pjsua_call_media *call_med, pj_pool_t *tmp_pool, const pjmedia_sdp_session *local_sdp, const pjmedia_sdp_session *remote_sdp); void stop_video_stream(pjsua_call_media *call_med); +void set_media_tp_state(pjsua_call_media *call_med, pjsua_med_tp_st tp_st); /** |