- Fix DTLS-SRTP interop issues
- Use DTLS-SRTP instead of SDES-SRTP when RTCWeb mode is enabled and certificates are present
This commit is contained in:
parent
4813b9287c
commit
70f4e36fd3
|
@ -537,6 +537,10 @@ bool MediaSessionMgr::defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max){
|
|||
return (tmedia_defaults_set_avpf_tail(tail_min, tail_max) == 0);
|
||||
}
|
||||
|
||||
bool MediaSessionMgr::defaultsSetUseAvpfEnabled(bool enabled){
|
||||
return (tmedia_defaults_set_avpf_enabled(enabled ? tsk_true : tsk_false) == 0);
|
||||
}
|
||||
|
||||
bool MediaSessionMgr::defaultsSetOpusMaxCaptureRate(uint32_t opus_maxcapturerate){
|
||||
return (tmedia_defaults_set_opus_maxcapturerate(opus_maxcapturerate) == 0);
|
||||
}
|
||||
|
|
|
@ -155,6 +155,7 @@ public:
|
|||
static bool defaultsSetRtpBuffSize(unsigned buffSize);
|
||||
static unsigned defaultsGetRtpBuffSize();
|
||||
static bool defaultsSetAvpfTail(unsigned tail_min, unsigned tail_max);
|
||||
static bool defaultsSetUseAvpfEnabled(bool enabled);
|
||||
static bool defaultsSetOpusMaxCaptureRate(uint32_t opus_maxcapturerate);
|
||||
static bool defaultsSetOpusMaxPlaybackRate(uint32_t opus_maxplaybackrate);
|
||||
static bool defaultsSetMaxFds(int32_t max_fds);
|
||||
|
|
|
@ -419,6 +419,11 @@ public class MediaSessionMgr : IDisposable {
|
|||
return ret;
|
||||
}
|
||||
|
||||
public static bool defaultsSetUseAvpfEnabled(bool enabled) {
|
||||
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetUseAvpfEnabled(enabled);
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static bool defaultsSetOpusMaxCaptureRate(uint opus_maxcapturerate) {
|
||||
bool ret = tinyWRAPPINVOKE.MediaSessionMgr_defaultsSetOpusMaxCaptureRate(opus_maxcapturerate);
|
||||
return ret;
|
||||
|
|
|
@ -516,6 +516,9 @@ class tinyWRAPPINVOKE {
|
|||
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetAvpfTail")]
|
||||
public static extern bool MediaSessionMgr_defaultsSetAvpfTail(uint jarg1, uint jarg2);
|
||||
|
||||
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetUseAvpfEnabled")]
|
||||
public static extern bool MediaSessionMgr_defaultsSetUseAvpfEnabled(bool jarg1);
|
||||
|
||||
[DllImport("tinyWRAP", EntryPoint="CSharp_MediaSessionMgr_defaultsSetOpusMaxCaptureRate")]
|
||||
public static extern bool MediaSessionMgr_defaultsSetOpusMaxCaptureRate(uint jarg1);
|
||||
|
||||
|
|
|
@ -2514,6 +2514,18 @@ SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetAvpfTail(u
|
|||
}
|
||||
|
||||
|
||||
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetUseAvpfEnabled(unsigned int jarg1) {
|
||||
unsigned int jresult ;
|
||||
bool arg1 ;
|
||||
bool result;
|
||||
|
||||
arg1 = jarg1 ? true : false;
|
||||
result = (bool)MediaSessionMgr::defaultsSetUseAvpfEnabled(arg1);
|
||||
jresult = result;
|
||||
return jresult;
|
||||
}
|
||||
|
||||
|
||||
SWIGEXPORT unsigned int SWIGSTDCALL CSharp_MediaSessionMgr_defaultsSetOpusMaxCaptureRate(unsigned int jarg1) {
|
||||
unsigned int jresult ;
|
||||
uint32_t arg1 ;
|
||||
|
|
|
@ -338,6 +338,10 @@ public class MediaSessionMgr {
|
|||
return tinyWRAPJNI.MediaSessionMgr_defaultsSetAvpfTail(tail_min, tail_max);
|
||||
}
|
||||
|
||||
public static boolean defaultsSetUseAvpfEnabled(boolean enabled) {
|
||||
return tinyWRAPJNI.MediaSessionMgr_defaultsSetUseAvpfEnabled(enabled);
|
||||
}
|
||||
|
||||
public static boolean defaultsSetOpusMaxCaptureRate(long opus_maxcapturerate) {
|
||||
return tinyWRAPJNI.MediaSessionMgr_defaultsSetOpusMaxCaptureRate(opus_maxcapturerate);
|
||||
}
|
||||
|
|
|
@ -338,6 +338,10 @@ public class MediaSessionMgr {
|
|||
return tinyWRAPJNI.MediaSessionMgr_defaultsSetAvpfTail(tail_min, tail_max);
|
||||
}
|
||||
|
||||
public static boolean defaultsSetUseAvpfEnabled(boolean enabled) {
|
||||
return tinyWRAPJNI.MediaSessionMgr_defaultsSetUseAvpfEnabled(enabled);
|
||||
}
|
||||
|
||||
public static boolean defaultsSetOpusMaxCaptureRate(long opus_maxcapturerate) {
|
||||
return tinyWRAPJNI.MediaSessionMgr_defaultsSetOpusMaxCaptureRate(opus_maxcapturerate);
|
||||
}
|
||||
|
|
|
@ -119,6 +119,7 @@ public class tinyWRAPJNI {
|
|||
public final static native boolean MediaSessionMgr_defaultsSetRtpBuffSize(long jarg1);
|
||||
public final static native long MediaSessionMgr_defaultsGetRtpBuffSize();
|
||||
public final static native boolean MediaSessionMgr_defaultsSetAvpfTail(long jarg1, long jarg2);
|
||||
public final static native boolean MediaSessionMgr_defaultsSetUseAvpfEnabled(boolean jarg1);
|
||||
public final static native boolean MediaSessionMgr_defaultsSetOpusMaxCaptureRate(long jarg1);
|
||||
public final static native boolean MediaSessionMgr_defaultsSetOpusMaxPlaybackRate(long jarg1);
|
||||
public final static native boolean MediaSessionMgr_defaultsSetMaxFds(int jarg1);
|
||||
|
|
|
@ -3704,6 +3704,20 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionM
|
|||
}
|
||||
|
||||
|
||||
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetUseAvpfEnabled(JNIEnv *jenv, jclass jcls, jboolean jarg1) {
|
||||
jboolean jresult = 0 ;
|
||||
bool arg1 ;
|
||||
bool result;
|
||||
|
||||
(void)jenv;
|
||||
(void)jcls;
|
||||
arg1 = jarg1 ? true : false;
|
||||
result = (bool)MediaSessionMgr::defaultsSetUseAvpfEnabled(arg1);
|
||||
jresult = (jboolean)result;
|
||||
return jresult;
|
||||
}
|
||||
|
||||
|
||||
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetOpusMaxCaptureRate(JNIEnv *jenv, jclass jcls, jlong jarg1) {
|
||||
jboolean jresult = 0 ;
|
||||
uint32_t arg1 ;
|
||||
|
|
|
@ -119,6 +119,7 @@ public class tinyWRAPJNI {
|
|||
public final static native boolean MediaSessionMgr_defaultsSetRtpBuffSize(long jarg1);
|
||||
public final static native long MediaSessionMgr_defaultsGetRtpBuffSize();
|
||||
public final static native boolean MediaSessionMgr_defaultsSetAvpfTail(long jarg1, long jarg2);
|
||||
public final static native boolean MediaSessionMgr_defaultsSetUseAvpfEnabled(boolean jarg1);
|
||||
public final static native boolean MediaSessionMgr_defaultsSetOpusMaxCaptureRate(long jarg1);
|
||||
public final static native boolean MediaSessionMgr_defaultsSetOpusMaxPlaybackRate(long jarg1);
|
||||
public final static native boolean MediaSessionMgr_defaultsSetMaxFds(int jarg1);
|
||||
|
|
|
@ -3704,6 +3704,20 @@ SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionM
|
|||
}
|
||||
|
||||
|
||||
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetUseAvpfEnabled(JNIEnv *jenv, jclass jcls, jboolean jarg1) {
|
||||
jboolean jresult = 0 ;
|
||||
bool arg1 ;
|
||||
bool result;
|
||||
|
||||
(void)jenv;
|
||||
(void)jcls;
|
||||
arg1 = jarg1 ? true : false;
|
||||
result = (bool)MediaSessionMgr::defaultsSetUseAvpfEnabled(arg1);
|
||||
jresult = (jboolean)result;
|
||||
return jresult;
|
||||
}
|
||||
|
||||
|
||||
SWIGEXPORT jboolean JNICALL Java_org_doubango_tinyWRAP_tinyWRAPJNI_MediaSessionMgr_1defaultsSetOpusMaxCaptureRate(JNIEnv *jenv, jclass jcls, jlong jarg1) {
|
||||
jboolean jresult = 0 ;
|
||||
uint32_t arg1 ;
|
||||
|
|
|
@ -304,6 +304,7 @@ sub DESTROY {
|
|||
*defaultsSetRtpBuffSize = *tinyWRAPc::MediaSessionMgr_defaultsSetRtpBuffSize;
|
||||
*defaultsGetRtpBuffSize = *tinyWRAPc::MediaSessionMgr_defaultsGetRtpBuffSize;
|
||||
*defaultsSetAvpfTail = *tinyWRAPc::MediaSessionMgr_defaultsSetAvpfTail;
|
||||
*defaultsSetUseAvpfEnabled = *tinyWRAPc::MediaSessionMgr_defaultsSetUseAvpfEnabled;
|
||||
*defaultsSetOpusMaxCaptureRate = *tinyWRAPc::MediaSessionMgr_defaultsSetOpusMaxCaptureRate;
|
||||
*defaultsSetOpusMaxPlaybackRate = *tinyWRAPc::MediaSessionMgr_defaultsSetOpusMaxPlaybackRate;
|
||||
*defaultsSetMaxFds = *tinyWRAPc::MediaSessionMgr_defaultsSetMaxFds;
|
||||
|
|
|
@ -5739,6 +5739,34 @@ XS(_wrap_MediaSessionMgr_defaultsSetAvpfTail) {
|
|||
}
|
||||
|
||||
|
||||
XS(_wrap_MediaSessionMgr_defaultsSetUseAvpfEnabled) {
|
||||
{
|
||||
bool arg1 ;
|
||||
bool val1 ;
|
||||
int ecode1 = 0 ;
|
||||
int argvi = 0;
|
||||
bool result;
|
||||
dXSARGS;
|
||||
|
||||
if ((items < 1) || (items > 1)) {
|
||||
SWIG_croak("Usage: MediaSessionMgr_defaultsSetUseAvpfEnabled(enabled);");
|
||||
}
|
||||
ecode1 = SWIG_AsVal_bool SWIG_PERL_CALL_ARGS_2(ST(0), &val1);
|
||||
if (!SWIG_IsOK(ecode1)) {
|
||||
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetUseAvpfEnabled" "', argument " "1"" of type '" "bool""'");
|
||||
}
|
||||
arg1 = static_cast< bool >(val1);
|
||||
result = (bool)MediaSessionMgr::defaultsSetUseAvpfEnabled(arg1);
|
||||
ST(argvi) = SWIG_From_bool SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
|
||||
|
||||
XSRETURN(argvi);
|
||||
fail:
|
||||
|
||||
SWIG_croak_null();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
XS(_wrap_MediaSessionMgr_defaultsSetOpusMaxCaptureRate) {
|
||||
{
|
||||
uint32_t arg1 ;
|
||||
|
@ -27676,6 +27704,7 @@ static swig_command_info swig_commands[] = {
|
|||
{"tinyWRAPc::MediaSessionMgr_defaultsSetRtpBuffSize", _wrap_MediaSessionMgr_defaultsSetRtpBuffSize},
|
||||
{"tinyWRAPc::MediaSessionMgr_defaultsGetRtpBuffSize", _wrap_MediaSessionMgr_defaultsGetRtpBuffSize},
|
||||
{"tinyWRAPc::MediaSessionMgr_defaultsSetAvpfTail", _wrap_MediaSessionMgr_defaultsSetAvpfTail},
|
||||
{"tinyWRAPc::MediaSessionMgr_defaultsSetUseAvpfEnabled", _wrap_MediaSessionMgr_defaultsSetUseAvpfEnabled},
|
||||
{"tinyWRAPc::MediaSessionMgr_defaultsSetOpusMaxCaptureRate", _wrap_MediaSessionMgr_defaultsSetOpusMaxCaptureRate},
|
||||
{"tinyWRAPc::MediaSessionMgr_defaultsSetOpusMaxPlaybackRate", _wrap_MediaSessionMgr_defaultsSetOpusMaxPlaybackRate},
|
||||
{"tinyWRAPc::MediaSessionMgr_defaultsSetMaxFds", _wrap_MediaSessionMgr_defaultsSetMaxFds},
|
||||
|
|
|
@ -315,6 +315,8 @@ class MediaSessionMgr(_object):
|
|||
if _newclass:defaultsGetRtpBuffSize = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsGetRtpBuffSize)
|
||||
__swig_getmethods__["defaultsSetAvpfTail"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetAvpfTail
|
||||
if _newclass:defaultsSetAvpfTail = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetAvpfTail)
|
||||
__swig_getmethods__["defaultsSetUseAvpfEnabled"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetUseAvpfEnabled
|
||||
if _newclass:defaultsSetUseAvpfEnabled = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetUseAvpfEnabled)
|
||||
__swig_getmethods__["defaultsSetOpusMaxCaptureRate"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetOpusMaxCaptureRate
|
||||
if _newclass:defaultsSetOpusMaxCaptureRate = staticmethod(_tinyWRAP.MediaSessionMgr_defaultsSetOpusMaxCaptureRate)
|
||||
__swig_getmethods__["defaultsSetOpusMaxPlaybackRate"] = lambda x: _tinyWRAP.MediaSessionMgr_defaultsSetOpusMaxPlaybackRate
|
||||
|
@ -576,6 +578,10 @@ def MediaSessionMgr_defaultsSetAvpfTail(*args):
|
|||
return _tinyWRAP.MediaSessionMgr_defaultsSetAvpfTail(*args)
|
||||
MediaSessionMgr_defaultsSetAvpfTail = _tinyWRAP.MediaSessionMgr_defaultsSetAvpfTail
|
||||
|
||||
def MediaSessionMgr_defaultsSetUseAvpfEnabled(*args):
|
||||
return _tinyWRAP.MediaSessionMgr_defaultsSetUseAvpfEnabled(*args)
|
||||
MediaSessionMgr_defaultsSetUseAvpfEnabled = _tinyWRAP.MediaSessionMgr_defaultsSetUseAvpfEnabled
|
||||
|
||||
def MediaSessionMgr_defaultsSetOpusMaxCaptureRate(*args):
|
||||
return _tinyWRAP.MediaSessionMgr_defaultsSetOpusMaxCaptureRate(*args)
|
||||
MediaSessionMgr_defaultsSetOpusMaxCaptureRate = _tinyWRAP.MediaSessionMgr_defaultsSetOpusMaxCaptureRate
|
||||
|
|
|
@ -8355,6 +8355,28 @@ fail:
|
|||
}
|
||||
|
||||
|
||||
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetUseAvpfEnabled(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
|
||||
PyObject *resultobj = 0;
|
||||
bool arg1 ;
|
||||
bool val1 ;
|
||||
int ecode1 = 0 ;
|
||||
PyObject * obj0 = 0 ;
|
||||
bool result;
|
||||
|
||||
if (!PyArg_ParseTuple(args,(char *)"O:MediaSessionMgr_defaultsSetUseAvpfEnabled",&obj0)) SWIG_fail;
|
||||
ecode1 = SWIG_AsVal_bool(obj0, &val1);
|
||||
if (!SWIG_IsOK(ecode1)) {
|
||||
SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "MediaSessionMgr_defaultsSetUseAvpfEnabled" "', argument " "1"" of type '" "bool""'");
|
||||
}
|
||||
arg1 = static_cast< bool >(val1);
|
||||
result = (bool)MediaSessionMgr::defaultsSetUseAvpfEnabled(arg1);
|
||||
resultobj = SWIG_From_bool(static_cast< bool >(result));
|
||||
return resultobj;
|
||||
fail:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
SWIGINTERN PyObject *_wrap_MediaSessionMgr_defaultsSetOpusMaxCaptureRate(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
|
||||
PyObject *resultobj = 0;
|
||||
uint32_t arg1 ;
|
||||
|
@ -26062,6 +26084,7 @@ static PyMethodDef SwigMethods[] = {
|
|||
{ (char *)"MediaSessionMgr_defaultsSetRtpBuffSize", _wrap_MediaSessionMgr_defaultsSetRtpBuffSize, METH_VARARGS, NULL},
|
||||
{ (char *)"MediaSessionMgr_defaultsGetRtpBuffSize", _wrap_MediaSessionMgr_defaultsGetRtpBuffSize, METH_VARARGS, NULL},
|
||||
{ (char *)"MediaSessionMgr_defaultsSetAvpfTail", _wrap_MediaSessionMgr_defaultsSetAvpfTail, METH_VARARGS, NULL},
|
||||
{ (char *)"MediaSessionMgr_defaultsSetUseAvpfEnabled", _wrap_MediaSessionMgr_defaultsSetUseAvpfEnabled, METH_VARARGS, NULL},
|
||||
{ (char *)"MediaSessionMgr_defaultsSetOpusMaxCaptureRate", _wrap_MediaSessionMgr_defaultsSetOpusMaxCaptureRate, METH_VARARGS, NULL},
|
||||
{ (char *)"MediaSessionMgr_defaultsSetOpusMaxPlaybackRate", _wrap_MediaSessionMgr_defaultsSetOpusMaxPlaybackRate, METH_VARARGS, NULL},
|
||||
{ (char *)"MediaSessionMgr_defaultsSetMaxFds", _wrap_MediaSessionMgr_defaultsSetMaxFds, METH_VARARGS, NULL},
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -49,6 +49,7 @@ typedef struct tdav_session_av_s
|
|||
tsk_bool_t use_rtcp;
|
||||
tsk_bool_t use_rtcpmux;
|
||||
tmedia_type_t media_type;
|
||||
tmedia_profile_t media_profile;
|
||||
tsk_bool_t use_avpf;
|
||||
tsk_bool_t use_srtp;
|
||||
tsk_bool_t is_webrtc2sip_mode_enabled;
|
||||
|
|
|
@ -202,8 +202,7 @@ static int _sdp_pcfgs_cat(const sdp_pcfg_xt (*pcfgs_src)[SDP_CAPS_COUNT_MAX], sd
|
|||
int tdav_session_av_init(tdav_session_av_t* self, tmedia_type_t media_type)
|
||||
{
|
||||
uint64_t session_id;
|
||||
tmedia_profile_t profile = tmedia_defaults_get_profile(); // default profile, will be updated by the SIP session
|
||||
|
||||
|
||||
if(!self){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
return -1;
|
||||
|
@ -212,16 +211,17 @@ int tdav_session_av_init(tdav_session_av_t* self, tmedia_type_t media_type)
|
|||
/* base::init(): called by tmedia_session_create() */
|
||||
|
||||
self->media_type = media_type;
|
||||
self->media_profile = tmedia_defaults_get_profile();
|
||||
self->use_rtcp = tmedia_defaults_get_rtcp_enabled();
|
||||
self->use_rtcpmux = tmedia_defaults_get_rtcpmux_enabled();
|
||||
self->use_avpf = (profile == tmedia_profile_rtcweb); // negotiate if not RTCWeb profile or RFC5939 is in action
|
||||
self->use_avpf = (self->media_profile == tmedia_profile_rtcweb) || tmedia_defaults_get_avpf_enabled(); // negotiate if not RTCWeb profile or RFC5939 is in action
|
||||
self->bandwidth_max_upload_kbps = (media_type == tmedia_video ? tmedia_defaults_get_bandwidth_video_upload_max() : INT_MAX); // INT_MAX or <=0 means undefined
|
||||
self->bandwidth_max_download_kbps = (media_type == tmedia_video ? tmedia_defaults_get_bandwidth_video_download_max() : INT_MAX); // INT_MAX or <=0 means undefined
|
||||
self->congestion_ctrl_enabled = tmedia_defaults_get_congestion_ctrl_enabled(); // whether to enable draft-alvestrand-rtcweb-congestion-03 and draft-alvestrand-rmcat-remb-01
|
||||
#if HAVE_SRTP
|
||||
// this is the default value and can be updated by the user using "session_set('srtp-mode', mode_e)"
|
||||
self->srtp_type = (profile == tmedia_profile_rtcweb) ? tmedia_srtp_type_sdes : tmedia_defaults_get_srtp_type();
|
||||
self->srtp_mode = (profile == tmedia_profile_rtcweb) ? tmedia_srtp_mode_mandatory : tmedia_defaults_get_srtp_mode();
|
||||
self->srtp_type = (self->media_profile == tmedia_profile_rtcweb) ? (tsk_strnullORempty(TMEDIA_SESSION(self)->dtls.file_pbk) ? tmedia_srtp_type_sdes : tmedia_srtp_type_dtls) : tmedia_defaults_get_srtp_type();
|
||||
self->srtp_mode = (self->media_profile == tmedia_profile_rtcweb) ? tmedia_srtp_mode_mandatory : tmedia_defaults_get_srtp_mode();
|
||||
self->use_srtp = (self->srtp_mode == tmedia_srtp_mode_mandatory); // if optional -> negotiate
|
||||
// remove DTLS-SRTP option if not supported
|
||||
if((self->srtp_type & tmedia_srtp_type_dtls) && !tnet_dtls_is_srtp_supported()){
|
||||
|
@ -407,6 +407,14 @@ int tdav_session_av_prepare(tdav_session_av_t* self)
|
|||
return -1;
|
||||
}
|
||||
|
||||
/* SRTPType */
|
||||
#if HAVE_SRTP
|
||||
// Now that SSL certs are defined update SRTPType before creating the RTP manager
|
||||
if (self->media_profile == tmedia_profile_rtcweb) {
|
||||
self->srtp_type = tsk_strnullORempty(TMEDIA_SESSION(self)->dtls.file_pbk) ? tmedia_srtp_type_sdes : tmedia_srtp_type_dtls;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* set local port */
|
||||
if(!self->rtp_manager){
|
||||
self->rtp_manager = self->ice_ctx ? trtp_manager_create_2(self->ice_ctx, self->srtp_type, self->srtp_mode)
|
||||
|
@ -429,6 +437,7 @@ int tdav_session_av_prepare(tdav_session_av_t* self)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if((self->srtp_type & tmedia_srtp_type_dtls) && (self->srtp_mode == tmedia_srtp_mode_optional || self->srtp_mode == tmedia_srtp_mode_mandatory)){
|
||||
if((ret = trtp_manager_set_dtls_certs(self->rtp_manager, TMEDIA_SESSION(self)->dtls.file_ca, TMEDIA_SESSION(self)->dtls.file_pbk, TMEDIA_SESSION(self)->dtls.file_pvk, TMEDIA_SESSION(self)->dtls.verify))){
|
||||
return ret;
|
||||
|
@ -931,14 +940,15 @@ const tsdp_header_M_t* tdav_session_av_get_lo(tdav_session_av_t* self, tsk_bool_
|
|||
const char* fp_str = trtp_manager_get_dtls_local_fingerprint(self->rtp_manager, TDAV_DFAULT_FP_HASH);
|
||||
if(fp_str){
|
||||
tsk_sprintf(&str, "%s %s", TNET_DTLS_HASH_NAMES[TDAV_DFAULT_FP_HASH], fp_str);
|
||||
//!\ From RFC 5763 (DTLS-SRTP Framework) §5: The endpoint MUST NOT use the connection attribute defined in [RFC4145].
|
||||
#if TDAV_FIXME_MEDIA_LEVEL_DTLS_ATT
|
||||
tsdp_header_M_add_headers(base->M.lo, TSDP_HEADER_A_VA_ARGS("fingerprint", str), tsk_null);
|
||||
tsdp_header_M_add_headers(base->M.lo, TSDP_HEADER_A_VA_ARGS("setup", "active"), tsk_null);
|
||||
tsdp_header_M_add_headers(base->M.lo, TSDP_HEADER_A_VA_ARGS("connection", "new"), tsk_null);
|
||||
tsdp_header_M_add_headers(base->M.lo, TSDP_HEADER_A_VA_ARGS("setup", TNET_DTLS_SETUP_NAMES[self->dtls.local.setup]), tsk_null);
|
||||
// tsdp_header_M_add_headers(base->M.lo, TSDP_HEADER_A_VA_ARGS("connection", self->dtls.local.connection_new ? "new" : "existing"), tsk_null);
|
||||
#else
|
||||
_first_media_add_headers(self->local_sdp, TSDP_HEADER_A_VA_ARGS("fingerprint", str), tsk_null);
|
||||
_first_media_add_headers(self->local_sdp, TSDP_HEADER_A_VA_ARGS("setup", TNET_DTLS_SETUP_NAMES[self->dtls.local.setup]), tsk_null);
|
||||
_first_media_add_headers(self->local_sdp, TSDP_HEADER_A_VA_ARGS("connection", self->dtls.local.connection_new ? "new" : "existing"), tsk_null);
|
||||
// _first_media_add_headers(self->local_sdp, TSDP_HEADER_A_VA_ARGS("connection", self->dtls.local.connection_new ? "new" : "existing"), tsk_null);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,16 +24,16 @@
|
|||
static tipsec_ipproto_t __ipproto = tipsec_ipproto_udp;
|
||||
static tsk_bool_t __use_ipv6 = tsk_false;
|
||||
static tipsec_mode_t __mode = tipsec_mode_trans;
|
||||
static tipsec_ealg_t __ealg = tipsec_ealg_des_ede3_cbc;
|
||||
static tipsec_ealg_t __ealg = tipsec_ealg_null;
|
||||
static tipsec_alg_t __alg = tipsec_alg_hmac_md5_96;
|
||||
static tipsec_proto_t __proto = tipsec_proto_ah;
|
||||
static tipsec_proto_t __proto = tipsec_proto_esp;
|
||||
|
||||
static const char* __addr_local = "0.0.0.0";
|
||||
static const char* __addr_remote = "192.168.0.34";
|
||||
static tipsec_port_t __port_local_out = 5062; // PORT_UC
|
||||
static const char* __addr_local = "192.168.0.37"; // overrided using command line args
|
||||
static const char* __addr_remote = "192.168.0.31"; // overrided using command line args
|
||||
static tipsec_port_t __port_local_in = 5064; // PORT_US
|
||||
static tipsec_port_t __port_remote_out = 5066; // PORT_PC
|
||||
static tipsec_port_t __port_local_out = 5062; // PORT_UC
|
||||
static tipsec_port_t __port_remote_in = 5068; // PORT_PS
|
||||
static tipsec_port_t __port_remote_out = 5066; // PORT_PC
|
||||
static tipsec_spi_t __spi_remote_out = 3333; // SPI_PC
|
||||
static tipsec_spi_t __spi_remote_in = 4444; // SPI_PS
|
||||
static tipsec_lifetime_t __lifetime = 1800; /* always set it to the maximum value. (Not possible to update the value after REGISTER 200OK. ) */
|
||||
|
@ -75,10 +75,10 @@ static tsk_bool_t test_ipsec_is_winvista_or_later()
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
int _tmain(int argc, _TCHAR* argv[])
|
||||
#if defined(_WIN32_WCE)
|
||||
int _tmain()
|
||||
#else
|
||||
int main()
|
||||
int main(int argc, const char* argv[])
|
||||
#endif
|
||||
{
|
||||
int err = 0;
|
||||
|
@ -93,6 +93,26 @@ int main()
|
|||
};
|
||||
static const tsk_size_t __plugins_count = sizeof(__plugins_path)/sizeof(__plugins_path[0]);
|
||||
|
||||
#define BUF_SIZE 1024
|
||||
char buffer[BUF_SIZE];
|
||||
|
||||
/* Set debug level to INFO */
|
||||
tsk_debug_set_level(DEBUG_LEVEL_INFO);
|
||||
|
||||
// Command line "local_ip" "local_port_in" "local_port_out" "remote_ip" "remote_port_in" "remote_port_out"
|
||||
if (argc == (6 + 1)) {
|
||||
__addr_local = argv[1];
|
||||
__port_local_in = atoi(argv[2]);
|
||||
__port_local_out = atoi(argv[3]);
|
||||
__addr_remote = argv[4];
|
||||
__port_remote_in = atoi(argv[5]);
|
||||
__port_remote_out = atoi(argv[6]);
|
||||
}
|
||||
|
||||
TSK_DEBUG_INFO("Local node=%s:%d/%d, remote node=%s:%d/%d",
|
||||
__addr_local, __port_local_in, __port_local_out,
|
||||
__addr_remote, __port_remote_in, __port_remote_out);
|
||||
|
||||
/* Create the plugin */
|
||||
for (i = 0; i < __plugins_count; ++i) {
|
||||
if (tsk_plugin_file_exist(__plugins_path[i])) {
|
||||
|
@ -121,6 +141,24 @@ int main()
|
|||
// Dump SPIs created by the OS after calling set_local()
|
||||
TSK_DEBUG_INFO("SPI-UC=%u, SPI-US=%u", p_ctx->spi_uc, p_ctx->spi_us);
|
||||
|
||||
// Enter Remote SPI in
|
||||
TSK_DEBUG_INFO("Enter remote SPI in:");
|
||||
if (fgets(buffer, BUF_SIZE, stdin)) {
|
||||
if (buffer[0] != 10 && buffer[1] != 0) {
|
||||
__spi_remote_in = strtoul (buffer, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Enter Remote SPI out
|
||||
TSK_DEBUG_INFO("Enter remote SPI out:");
|
||||
if (fgets(buffer, BUF_SIZE, stdin)) {
|
||||
if (buffer[0] != 10 && buffer[1] != 0) {
|
||||
__spi_remote_out = strtoul (buffer, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
TSK_DEBUG_INFO("SPI remote %u/%u", __spi_remote_in, __spi_remote_out);
|
||||
|
||||
/* Set remote */
|
||||
err = tipsec_ctx_set_remote(p_ctx, __spi_remote_out, __spi_remote_in, __port_remote_out, __port_remote_in, __lifetime);
|
||||
if (err) {
|
||||
|
|
|
@ -120,7 +120,7 @@
|
|||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="..\..\thirdparties\win32\include;"$(SolutionDir)\src";..\..\tinySAK\src"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
PreprocessorDefinitions="DEBUG_LEVEL=DEBUG_LEVEL_INFO;WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
|
|
|
@ -120,6 +120,8 @@ TINYMEDIA_API tsk_bool_t tmedia_defaults_get_video_zeroartifacts_enabled();
|
|||
TINYMEDIA_API int tmedia_defaults_set_rtpbuff_size(tsk_size_t rtpbuff_size);
|
||||
TINYMEDIA_API tsk_size_t tmedia_defaults_get_rtpbuff_size();
|
||||
TINYMEDIA_API int tmedia_defaults_set_avpf_tail(tsk_size_t tail_min, tsk_size_t tail_max);
|
||||
TINYMEDIA_API int tmedia_defaults_set_avpf_enabled(tsk_bool_t enabled);
|
||||
TINYMEDIA_API tsk_bool_t tmedia_defaults_get_avpf_enabled();
|
||||
TINYMEDIA_API tsk_size_t tmedia_defaults_get_avpf_tail_min();
|
||||
TINYMEDIA_API tsk_size_t tmedia_defaults_get_avpf_tail_max();
|
||||
TINYMEDIA_API int tmedia_defaults_set_opus_maxcapturerate(uint32_t opus_maxcapturerate);
|
||||
|
|
|
@ -80,6 +80,7 @@ static tsk_bool_t __video_zeroartifacts_enabled = tsk_false; // Requires from re
|
|||
static tsk_size_t __rtpbuff_size = 0x1FFFE; // Network buffer size use for RTP (SO_RCVBUF, SO_SNDBUF)
|
||||
static tsk_size_t __avpf_tail_min = 20; // Min size for tail used to honor RTCP-NACK requests
|
||||
static tsk_size_t __avpf_tail_max = 160; // Max size for tail used to honor RTCP-NACK requests
|
||||
static tsk_bool_t __avpf_enabled = tsk_false; // Whether to use AVPF instead of AVP
|
||||
static uint32_t __opus_maxcapturerate = 16000; // supported: 8k,12k,16k,24k,48k. IMPORTANT: only 8k and 16k will work with WebRTC AEC
|
||||
static uint32_t __opus_maxplaybackrate = 48000; // supported: 8k,12k,16k,24k,48k
|
||||
static char* __ssl_certs_priv_path = tsk_null;
|
||||
|
@ -515,6 +516,13 @@ tsk_size_t tmedia_defaults_get_avpf_tail_max(){
|
|||
return __avpf_tail_max;
|
||||
}
|
||||
|
||||
int tmedia_defaults_set_avpf_enabled(tsk_bool_t enabled){
|
||||
__avpf_enabled = enabled;
|
||||
return 0;
|
||||
}
|
||||
tsk_bool_t tmedia_defaults_get_avpf_enabled(){
|
||||
return __avpf_enabled;
|
||||
}
|
||||
|
||||
int tmedia_defaults_set_opus_maxcapturerate(uint32_t opus_maxcapturerate){
|
||||
switch(opus_maxcapturerate){
|
||||
|
|
|
@ -40,6 +40,7 @@ typedef struct tnet_dtls_socket_s
|
|||
tsk_bool_t verify_peer;
|
||||
tsk_bool_t use_srtp;
|
||||
tsk_bool_t handshake_completed;
|
||||
tsk_bool_t handshake_started;
|
||||
tnet_dtls_setup_t setup;
|
||||
|
||||
struct{
|
||||
|
@ -460,17 +461,20 @@ int tnet_dtls_socket_do_handshake(tnet_dtls_socket_handle_t* handle, const struc
|
|||
return 0;
|
||||
}
|
||||
|
||||
if((ret = SSL_do_handshake(socket->ssl)) != 1){
|
||||
switch((ret = SSL_get_error(socket->ssl, ret))){
|
||||
case SSL_ERROR_WANT_READ:
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
case SSL_ERROR_NONE:
|
||||
break;
|
||||
default:
|
||||
TSK_DEBUG_ERROR("DTLS handshake failed [%s]", ERR_error_string(ERR_get_error(), tsk_null));
|
||||
_tnet_dtls_socket_raise_event_dataless(socket, tnet_dtls_socket_event_type_handshake_failed);
|
||||
return -2;
|
||||
if (!socket->handshake_started) {
|
||||
if((ret = SSL_do_handshake(socket->ssl)) != 1){
|
||||
switch((ret = SSL_get_error(socket->ssl, ret))){
|
||||
case SSL_ERROR_WANT_READ:
|
||||
case SSL_ERROR_WANT_WRITE:
|
||||
case SSL_ERROR_NONE:
|
||||
break;
|
||||
default:
|
||||
TSK_DEBUG_ERROR("DTLS handshake failed [%s]", ERR_error_string(ERR_get_error(), tsk_null));
|
||||
_tnet_dtls_socket_raise_event_dataless(socket, tnet_dtls_socket_event_type_handshake_failed);
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
socket->handshake_started = (ret == SSL_ERROR_NONE); // TODO: reset for renegotiation
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#include <string.h> /* memcpy, ...(<#void * #>, <#const void * #>, <#tsk_size_t #>) */
|
||||
|
||||
#ifndef TNET_CIPHER_LIST
|
||||
# define TNET_CIPHER_LIST "DEFAULT:!LOW:!EXP:!MD5"
|
||||
# define TNET_CIPHER_LIST "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"
|
||||
#endif
|
||||
|
||||
extern int tnet_transport_prepare(tnet_transport_t *transport);
|
||||
|
@ -100,9 +100,9 @@ static int _tnet_transport_ssl_init(tnet_transport_t* transport)
|
|||
return -5;
|
||||
}
|
||||
SSL_CTX_set_read_ahead(transport->dtls.ctx, 1);
|
||||
SSL_CTX_set_options(transport->dtls.ctx, SSL_OP_ALL);
|
||||
SSL_CTX_set_mode(transport->dtls.ctx, SSL_MODE_AUTO_RETRY);
|
||||
SSL_CTX_set_verify(transport->dtls.ctx, SSL_VERIFY_NONE, tsk_null); // to be updated by tnet_transport_tls_set_certs()
|
||||
// SSL_CTX_set_options(transport->dtls.ctx, SSL_OP_ALL);
|
||||
// SSL_CTX_set_mode(transport->dtls.ctx, SSL_MODE_AUTO_RETRY);
|
||||
SSL_CTX_set_verify(transport->dtls.ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, tsk_null); // to be updated by tnet_transport_tls_set_certs()
|
||||
if(SSL_CTX_set_cipher_list(transport->dtls.ctx, TNET_CIPHER_LIST) <= 0){
|
||||
TSK_DEBUG_ERROR("SSL_CTX_set_cipher_list failed [%s]", ERR_error_string(ERR_get_error(), tsk_null));
|
||||
return -6;
|
||||
|
|
Loading…
Reference in New Issue