Ticket #610: Added sample to create a media transport adapter, similar to how SRTP media transport works

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@2262 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 02f32a3..eab2985 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -543,10 +543,10 @@
 	if (pjsua_var.calls[i].med_tp_st != PJSUA_MED_TP_IDLE) {
 	    pjsua_media_channel_deinit(i);
 	}
-	if (pjsua_var.calls[i].med_tp) {
-	    (*pjsua_var.calls[i].med_tp->op->destroy)(pjsua_var.calls[i].med_tp);
-	    pjsua_var.calls[i].med_tp = NULL;
+	if (pjsua_var.calls[i].med_tp && pjsua_var.calls[i].med_tp_auto_del) {
+	    pjmedia_transport_close(pjsua_var.calls[i].med_tp);
 	}
+	pjsua_var.calls[i].med_tp = NULL;
     }
 
     /* Destroy media endpoint. */
@@ -841,7 +841,9 @@
 
     /* Delete existing media transports */
     for (i=0; i<pjsua_var.ua_cfg.max_calls; ++i) {
-	if (pjsua_var.calls[i].med_tp != NULL) {
+	if (pjsua_var.calls[i].med_tp != NULL && 
+	    pjsua_var.calls[i].med_tp_auto_del) 
+	{
 	    pjmedia_transport_close(pjsua_var.calls[i].med_tp);
 	    pjsua_var.calls[i].med_tp = NULL;
 	}
@@ -850,18 +852,49 @@
     /* Copy config */
     pjsua_transport_config_dup(pjsua_var.pool, &cfg, app_cfg);
 
+    /* Create the transports */
     if (pjsua_var.media_cfg.enable_ice) {
 	status = create_ice_media_transports();
     } else {
 	status = create_udp_media_transports(&cfg);
     }
 
+    /* Set media transport auto_delete to True */
+    for (i=0; i<pjsua_var.ua_cfg.max_calls; ++i) {
+	pjsua_var.calls[i].med_tp_auto_del = PJ_TRUE;
+    }
 
     PJSUA_UNLOCK();
 
     return status;
 }
 
+/*
+ * Attach application's created media transports.
+ */
+PJ_DEF(pj_status_t) pjsua_media_transports_attach(pjsua_media_transport tp[],
+						  unsigned count,
+						  pj_bool_t auto_delete)
+{
+    unsigned i;
+
+    PJ_ASSERT_RETURN(tp && count==pjsua_var.ua_cfg.max_calls, PJ_EINVAL);
+
+    /* Assign the media transports */
+    for (i=0; i<pjsua_var.ua_cfg.max_calls; ++i) {
+	if (pjsua_var.calls[i].med_tp != NULL && 
+	    pjsua_var.calls[i].med_tp_auto_del) 
+	{
+	    pjmedia_transport_close(pjsua_var.calls[i].med_tp);
+	}
+
+	pjsua_var.calls[i].med_tp = tp[i].transport;
+	pjsua_var.calls[i].med_tp_auto_del = auto_delete;
+    }
+
+    return PJ_SUCCESS;
+}
+
 
 pj_status_t pjsua_media_channel_init(pjsua_call_id call_id,
 				     pjsip_role_e role,