From 15bed5392495f3c3c0b71a2daaf6588168ac8ee8 Mon Sep 17 00:00:00 2001
From: Maxime Bizon <mbizon@freebox.fr>
Date: Tue, 29 Sep 2020 18:29:24 +0200
Subject: [PATCH 5/5] pjsua: allow passing option to media transport attach

---
 pjsip/include/pjsua-lib/pjsua.h          | 2 +-
 pjsip/include/pjsua-lib/pjsua_internal.h | 1 +
 pjsip/src/pjsua-lib/pjsua_media.c        | 9 ++++++---
 pjsip/src/pjsua-lib/pjsua_vid.c          | 4 ++--
 4 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/pjsip/include/pjsua-lib/pjsua.h b/pjsip/include/pjsua-lib/pjsua.h
index 155725217..73154500c 100644
--- a/pjsip/include/pjsua-lib/pjsua.h
+++ b/pjsip/include/pjsua-lib/pjsua.h
@@ -2845,7 +2845,6 @@ typedef struct pjsua_transport_config
      * 
      */
     pj_sockopt_params	sockopt_params;
-
 } pjsua_transport_config;
 
 
@@ -3842,6 +3841,7 @@ typedef struct pjsua_acc_config
      * Media transport config.
      */
     pjsua_transport_config rtp_cfg;
+    unsigned		rtp_options;
 
     /**
      * Specify NAT64 options.
diff --git a/pjsip/include/pjsua-lib/pjsua_internal.h b/pjsip/include/pjsua-lib/pjsua_internal.h
index fa18b251d..df9232f7a 100644
--- a/pjsip/include/pjsua-lib/pjsua_internal.h
+++ b/pjsip/include/pjsua-lib/pjsua_internal.h
@@ -694,6 +694,7 @@ pj_bool_t   pjsua_call_media_is_changing(pjsua_call *call);
 pj_status_t pjsua_call_media_init(pjsua_call_media *call_med,
                                   pjmedia_type type,
 				  const pjsua_transport_config *tcfg,
+				  unsigned options,
 				  int security_level,
 				  int *sip_err_code,
                                   pj_bool_t async,
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index c55ab8050..d4cf94b23 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -617,6 +617,7 @@ on_error:
 
 /* Create normal UDP media transports */
 static pj_status_t create_udp_media_transport(const pjsua_transport_config *cfg,
+					      unsigned options,
 					      pjsua_call_media *call_med)
 {
     pjmedia_sock_info skinfo;
@@ -630,7 +631,7 @@ static pj_status_t create_udp_media_transport(const pjsua_transport_config *cfg,
     }
 
     status = pjmedia_transport_udp_attach(pjsua_var.med_endpt, NULL,
-					  &skinfo, 0, &call_med->tp);
+					  &skinfo, options, &call_med->tp);
     if (status != PJ_SUCCESS) {
 	pjsua_perror(THIS_FILE, "Unable to create media transport",
 		     status);
@@ -714,7 +715,7 @@ static pj_status_t create_udp_media_transports(pjsua_transport_config *cfg)
 	for (strm_idx=0; strm_idx < call->med_cnt; ++strm_idx) {
 	    pjsua_call_media *call_med = &call->media[strm_idx];
 
-	    status = create_udp_media_transport(cfg, &call_med->tp);
+	    status = create_udp_media_transport(cfg, 0, &call_med->tp);
 	    if (status != PJ_SUCCESS)
 		goto on_error;
 	}
@@ -1844,6 +1845,7 @@ pj_bool_t  pjsua_call_media_is_changing(pjsua_call *call)
 pj_status_t pjsua_call_media_init(pjsua_call_media *call_med,
                                   pjmedia_type type,
 				  const pjsua_transport_config *tcfg,
+				  unsigned int tcfg_options,
 				  int security_level,
 				  int *sip_err_code,
                                   pj_bool_t async,
@@ -1899,7 +1901,7 @@ pj_status_t pjsua_call_media_init(pjsua_call_media *call_med,
 	        return PJ_EPENDING;
 	    }
 	} else {
-	    status = create_udp_media_transport(tcfg, call_med);
+		status = create_udp_media_transport(tcfg, tcfg_options, call_med);
 	}
 
         if (status != PJ_SUCCESS) {
@@ -2352,6 +2354,7 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id,
 
 	    status = pjsua_call_media_init(call_med, media_type,
 	                                   &acc->cfg.rtp_cfg,
+					   acc->cfg.rtp_options,
 					   security_level, sip_err_code,
                                            async,
                                            (async? &media_channel_init_cb:
diff --git a/pjsip/src/pjsua-lib/pjsua_vid.c b/pjsip/src/pjsua-lib/pjsua_vid.c
index 604a8dcc1..57c464ca9 100644
--- a/pjsip/src/pjsua-lib/pjsua_vid.c
+++ b/pjsip/src/pjsua-lib/pjsua_vid.c
@@ -1901,7 +1901,7 @@ static pj_status_t call_add_video(pjsua_call *call,
     /* Initialize call media */
     call_med = &call->media_prov[call->med_prov_cnt++];
     status = pjsua_call_media_init(call_med, PJMEDIA_TYPE_VIDEO,
-				   &acc_cfg->rtp_cfg, call->secure_level,
+				   &acc_cfg->rtp_cfg, 0, call->secure_level,
 				   NULL, PJ_FALSE, NULL);
     if (status != PJ_SUCCESS)
 	goto on_error;
@@ -2055,7 +2055,7 @@ static pj_status_t call_modify_video(pjsua_call *call,
 	}
 
 	status = pjsua_call_media_init(call_med, PJMEDIA_TYPE_VIDEO,
-				       &acc_cfg->rtp_cfg, call->secure_level,
+				       &acc_cfg->rtp_cfg, 0, call->secure_level,
 				       NULL, PJ_FALSE, NULL);
 	if (status != PJ_SUCCESS)
 	    goto on_error;
-- 
2.17.1

