summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_core.c
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2011-09-21 10:20:01 +0000
committerLiong Sauw Ming <ming@teluu.com>2011-09-21 10:20:01 +0000
commit8a8b2bba54aedc161159225259b83e6d7c1d17b3 (patch)
tree45a096a1b1cb6f3d5c5d3e016ce6147969a0d9b0 /pjsip/src/pjsua-lib/pjsua_core.c
parentbe8d37186b16150716f752883ae6857a0161db40 (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.c36
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));