PFLAG_NDLB_TO_IN_200_CONTACT = (1 << 0),
PFLAG_NDLB_BROKEN_AUTH_HASH = (1 << 1),
PFLAG_NDLB_SENDRECV_IN_SESSION = (1 << 2),
- PFLAG_NDLB_ALLOW_BAD_IANANAME = (1 << 3)
+ PFLAG_NDLB_ALLOW_BAD_IANANAME = (1 << 3),
+ PFLAG_NDLB_ALLOW_NONDUP_SDP = (1 << 4)
} sofia_NDLB_t;
typedef enum {
} else {
profile->ndlb &= ~PFLAG_NDLB_ALLOW_BAD_IANANAME;
}
+ } else if (!strcasecmp(var, "NDLB-allow-nondup-sdp")) {
+ if (switch_true(val)) {
+ profile->ndlb |= PFLAG_NDLB_ALLOW_NONDUP_SDP;
+ } else {
+ profile->ndlb &= ~PFLAG_NDLB_ALLOW_NONDUP_SDP;
+ }
} else if (!strcasecmp(var, "aggressive-nat-detection")) {
if (switch_true(val)) {
sofia_set_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION);
} else {
profile->ndlb &= ~PFLAG_NDLB_ALLOW_BAD_IANANAME;
}
+ } else if (!strcasecmp(var, "NDLB-allow-nondup-sdp")) {
+ if (switch_true(val)) {
+ profile->ndlb |= PFLAG_NDLB_ALLOW_NONDUP_SDP;
+ } else {
+ profile->ndlb &= ~PFLAG_NDLB_ALLOW_NONDUP_SDP;
+ }
} else if (!strcasecmp(var, "pass-rfc2833")) {
if (switch_true(val)) {
sofia_set_pflag(profile, PFLAG_PASS_RFC2833);
sdp_parser_t *parser;
sdp_session_t *sdp;
- if (!zstr(tech_pvt->remote_sdp_str) && !strcmp(tech_pvt->remote_sdp_str, r_sdp)) {
+ if ((profile->ndlb & PFLAG_NDLB_ALLOW_NONDUP_SDP) || !zstr(tech_pvt->remote_sdp_str) && !strcmp(tech_pvt->remote_sdp_str, r_sdp)) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Duplicate SDP\n%s\n", r_sdp);
is_dup_sdp = 1;
} else {