diff options
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_media.c')
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index eab0b524..e1aec508 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -746,7 +746,8 @@ PJ_DEF(pj_status_t) pjsua_media_transports_create( pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, pjsip_role_e role, - int security_level) + int security_level, + int *sip_err_code) { pjsua_call *call = &pjsua_var.calls[call_id]; @@ -773,6 +774,8 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, /* Check if SRTP requires secure signaling */ if (acc->cfg.use_srtp != PJMEDIA_SRTP_DISABLED) { if (security_level < acc->cfg.srtp_secure_signaling) { + if (sip_err_code) + *sip_err_code = PJSIP_SC_NOT_ACCEPTABLE; return PJSIP_ESESSIONINSECURE; } } @@ -784,8 +787,11 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, status = pjmedia_transport_srtp_create(pjsua_var.med_endpt, call->med_tp, &srtp_opt, &srtp); - if (status != PJ_SUCCESS) + if (status != PJ_SUCCESS) { + if (sip_err_code) + *sip_err_code = PJSIP_SC_INTERNAL_SERVER_ERROR; return status; + } /* Set SRTP as current media transport */ call->med_orig = call->med_tp; @@ -801,7 +807,8 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id, pj_pool_t *pool, const pjmedia_sdp_session *rem_sdp, - pjmedia_sdp_session **p_sdp) + pjmedia_sdp_session **p_sdp, + int *sip_status_code) { enum { MAX_MEDIA = 1, MEDIA_IDX = 0 }; pjmedia_sdp_session *sdp; @@ -822,8 +829,10 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id, /* Create SDP */ status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, pool, MAX_MEDIA, &skinfo, &sdp); - if (status != PJ_SUCCESS) + if (status != PJ_SUCCESS) { + if (sip_status_code) *sip_status_code = 500; goto on_error; + } /* Add NAT info in the SDP */ if (pjsua_var.ua_cfg.nat_type_in_sdp) { @@ -852,8 +861,10 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id, /* Give the SDP to media transport */ status = pjmedia_transport_media_create(call->med_tp, pool, sdp, rem_sdp, MEDIA_IDX); - if (status != PJ_SUCCESS) + if (status != PJ_SUCCESS) { + if (sip_status_code) *sip_status_code = PJSIP_SC_NOT_ACCEPTABLE; goto on_error; + } *p_sdp = sdp; return PJ_SUCCESS; |