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/src/pjsua-lib/pjsua_core.c | |
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/src/pjsua-lib/pjsua_core.c')
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_core.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c index 476e4cd7..31133b2c 100644 --- a/pjsip/src/pjsua-lib/pjsua_core.c +++ b/pjsip/src/pjsua-lib/pjsua_core.c @@ -150,6 +150,42 @@ PJ_DEF(void) pjsua_msg_data_init(pjsua_msg_data *msg_data) pj_list_init(&msg_data->multipart_parts); } +PJ_DEF(pjsua_msg_data*) pjsua_msg_data_clone(pj_pool_t *pool, + const pjsua_msg_data *rhs) +{ + pjsua_msg_data *msg_data; + const pjsip_hdr *hdr; + const pjsip_multipart_part *mpart; + + PJ_ASSERT_RETURN(pool && rhs, NULL); + + msg_data = PJ_POOL_ZALLOC_T(pool, pjsua_msg_data); + PJ_ASSERT_RETURN(msg_data != NULL, NULL); + + pj_list_init(&msg_data->hdr_list); + hdr = rhs->hdr_list.next; + while (hdr != &rhs->hdr_list) { + pj_list_push_back(&msg_data->hdr_list, pjsip_hdr_clone(pool, hdr)); + hdr = hdr->next; + } + + pj_strdup(pool, &msg_data->content_type, &rhs->content_type); + pj_strdup(pool, &msg_data->msg_body, &rhs->msg_body); + + pjsip_media_type_cp(pool, &msg_data->multipart_ctype, + &rhs->multipart_ctype); + + pj_list_init(&msg_data->multipart_parts); + mpart = rhs->multipart_parts.next; + while (mpart != &rhs->multipart_parts) { + pj_list_push_back(&msg_data->multipart_parts, + pjsip_multipart_clone_part(pool, mpart)); + mpart = mpart->next; + } + + return msg_data; +} + PJ_DEF(void) pjsua_transport_config_default(pjsua_transport_config *cfg) { pj_bzero(cfg, sizeof(*cfg)); |