|
|
|
@ -484,22 +484,9 @@ INLINE void call_ngb_hold_ref(call_t *c, ng_buffer *ngb) { |
|
|
|
ngb->call = obj_get(c); |
|
|
|
} |
|
|
|
|
|
|
|
INLINE void str_hyphenate(str *s_ori) { |
|
|
|
str s; |
|
|
|
s = *s_ori; |
|
|
|
while (s.len) { |
|
|
|
if (!str_chr_str(&s, &s, ' ')) |
|
|
|
break; |
|
|
|
*s.s = '-'; |
|
|
|
str_shift(&s, 1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
INLINE void ng_sdes_option(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
sdp_ng_flags *out = arg.flags; |
|
|
|
|
|
|
|
str_hyphenate(s); |
|
|
|
|
|
|
|
/* Accept only certain individual crypto suites */ |
|
|
|
if (call_ng_flags_prefix(s, "only-", call_ng_flags_str_ht, &out->sdes_only)) |
|
|
|
return; |
|
|
|
@ -734,7 +721,6 @@ INLINE void ng_el_option(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
#ifdef WITH_TRANSCODING |
|
|
|
INLINE void ng_t38_option(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
sdp_ng_flags *out = arg.flags; |
|
|
|
str_hyphenate(s); |
|
|
|
switch (__csh_lookup(s)) { |
|
|
|
case CSH_LOOKUP("decode"): |
|
|
|
out->t38_decode = 1; |
|
|
|
@ -747,34 +733,54 @@ INLINE void ng_t38_option(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-ecm"): |
|
|
|
case CSH_LOOKUP("no-ECM"): |
|
|
|
case CSH_LOOKUP("no ecm"): |
|
|
|
case CSH_LOOKUP("no ECM"): |
|
|
|
out->t38_no_ecm = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-V17"): |
|
|
|
case CSH_LOOKUP("no-V.17"): |
|
|
|
case CSH_LOOKUP("no-v17"): |
|
|
|
case CSH_LOOKUP("no-v.17"): |
|
|
|
case CSH_LOOKUP("no V17"): |
|
|
|
case CSH_LOOKUP("no V.17"): |
|
|
|
case CSH_LOOKUP("no v17"): |
|
|
|
case CSH_LOOKUP("no v.17"): |
|
|
|
out->t38_no_v17 = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-V.27ter"): |
|
|
|
case CSH_LOOKUP("no-V27ter"): |
|
|
|
case CSH_LOOKUP("no-v.27ter"): |
|
|
|
case CSH_LOOKUP("no-v27ter"): |
|
|
|
case CSH_LOOKUP("no V.27ter"): |
|
|
|
case CSH_LOOKUP("no V27ter"): |
|
|
|
case CSH_LOOKUP("no v.27ter"): |
|
|
|
case CSH_LOOKUP("no v27ter"): |
|
|
|
out->t38_no_v27ter = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-V29"): |
|
|
|
case CSH_LOOKUP("no-V.29"): |
|
|
|
case CSH_LOOKUP("no-v29"): |
|
|
|
case CSH_LOOKUP("no-v.29"): |
|
|
|
case CSH_LOOKUP("no V29"): |
|
|
|
case CSH_LOOKUP("no V.29"): |
|
|
|
case CSH_LOOKUP("no v29"): |
|
|
|
case CSH_LOOKUP("no v.29"): |
|
|
|
out->t38_no_v29 = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-V34"): |
|
|
|
case CSH_LOOKUP("no-V.34"): |
|
|
|
case CSH_LOOKUP("no-v34"): |
|
|
|
case CSH_LOOKUP("no-v.34"): |
|
|
|
case CSH_LOOKUP("no V34"): |
|
|
|
case CSH_LOOKUP("no V.34"): |
|
|
|
case CSH_LOOKUP("no v34"): |
|
|
|
case CSH_LOOKUP("no v.34"): |
|
|
|
out->t38_no_v34 = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-IAF"): |
|
|
|
case CSH_LOOKUP("no-iaf"): |
|
|
|
case CSH_LOOKUP("no IAF"): |
|
|
|
case CSH_LOOKUP("no iaf"): |
|
|
|
out->t38_no_iaf = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("FEC"): |
|
|
|
@ -868,33 +874,41 @@ static void call_ng_flags_moh(const ng_parser_t *parser, str *key, parser_arg va |
|
|
|
} |
|
|
|
static void call_ng_flags_replace(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
sdp_ng_flags *out = arg.flags; |
|
|
|
str_hyphenate(s); |
|
|
|
switch (__csh_lookup(s)) { |
|
|
|
case CSH_LOOKUP("force-increment-sdp-ver"): |
|
|
|
case CSH_LOOKUP("force-increment-SDP-ver"): |
|
|
|
case CSH_LOOKUP("force increment sdp ver"): |
|
|
|
case CSH_LOOKUP("force increment SDP ver"): |
|
|
|
out->force_inc_sdp_ver = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("origin"): |
|
|
|
out->replace_origin = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("origin full"): |
|
|
|
case CSH_LOOKUP("origin-full"): |
|
|
|
case CSH_LOOKUP("origin_full"): |
|
|
|
out->replace_origin_full = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("sdp-version"): |
|
|
|
case CSH_LOOKUP("SDP-version"): |
|
|
|
case CSH_LOOKUP("sdp version"): |
|
|
|
case CSH_LOOKUP("SDP version"): |
|
|
|
out->replace_sdp_version = 1; |
|
|
|
break; |
|
|
|
/* TODO: after a while remove silent support for this flag */ |
|
|
|
case CSH_LOOKUP("session-connection"): |
|
|
|
case CSH_LOOKUP("session connection"): |
|
|
|
ilog(LOG_INFO, "replace-session-connection flag encountered, but not supported anymore."); |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("session-name"): |
|
|
|
case CSH_LOOKUP("session name"): |
|
|
|
out->replace_sess_name = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("username"): |
|
|
|
out->replace_username = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("zero-address"): |
|
|
|
case CSH_LOOKUP("zero address"): |
|
|
|
out->replace_zero_address = 1; |
|
|
|
break; |
|
|
|
default: |
|
|
|
@ -1022,26 +1036,32 @@ INLINE int call_ng_flags_prefix(str *s_ori, const char *prefix, |
|
|
|
void call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
sdp_ng_flags *out = arg.flags; |
|
|
|
|
|
|
|
str_hyphenate(s); |
|
|
|
|
|
|
|
switch (__csh_lookup(s)) { |
|
|
|
case CSH_LOOKUP("all"): |
|
|
|
out->all = ALL_ALL; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("allow-asymmetric-codecs"): |
|
|
|
case CSH_LOOKUP("allow-asymmetric-codec"): |
|
|
|
case CSH_LOOKUP("allow asymmetric codecs"): |
|
|
|
case CSH_LOOKUP("allow asymmetric codec"): |
|
|
|
out->allow_asymmetric_codecs = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("allow-no-codec-media"): |
|
|
|
case CSH_LOOKUP("allow-no-codec-medias"): |
|
|
|
case CSH_LOOKUP("allow-empty-codec-media"): |
|
|
|
case CSH_LOOKUP("allow-empty-codec-medias"): |
|
|
|
case CSH_LOOKUP("allow no codec media"): |
|
|
|
case CSH_LOOKUP("allow no codec medias"): |
|
|
|
case CSH_LOOKUP("allow empty codec media"): |
|
|
|
case CSH_LOOKUP("allow empty codec medias"): |
|
|
|
out->allow_no_codec_media = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("allow-transcoding"): |
|
|
|
case CSH_LOOKUP("allow transcoding"): |
|
|
|
out->allow_transcoding = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("always-transcode"):; |
|
|
|
case CSH_LOOKUP("always transcode"):; |
|
|
|
static const str str_all = STR_CONST("all"); |
|
|
|
call_ng_flags_esc_str_list((str *) &str_all, 0, &out->codec_accept); |
|
|
|
break; |
|
|
|
@ -1049,22 +1069,30 @@ void call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
out->asymmetric = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("asymmetric-codecs"): |
|
|
|
case CSH_LOOKUP("asymmetric codecs"): |
|
|
|
ilog(LOG_INFO, "Ignoring obsolete flag `asymmetric-codecs`"); |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("audio-player"): |
|
|
|
case CSH_LOOKUP("audio player"): |
|
|
|
case CSH_LOOKUP("player"): |
|
|
|
out->audio_player = AP_TRANSCODING; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("block-dtmf"): |
|
|
|
case CSH_LOOKUP("block-DTMF"): |
|
|
|
case CSH_LOOKUP("block dtmf"): |
|
|
|
case CSH_LOOKUP("block DTMF"): |
|
|
|
out->block_dtmf = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("block-egress"): |
|
|
|
case CSH_LOOKUP("block egress"): |
|
|
|
out->block_egress = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("block-short"): |
|
|
|
case CSH_LOOKUP("block-shorts"): |
|
|
|
case CSH_LOOKUP("block-short-packets"): |
|
|
|
case CSH_LOOKUP("block short"): |
|
|
|
case CSH_LOOKUP("block shorts"): |
|
|
|
case CSH_LOOKUP("block short packets"): |
|
|
|
out->block_short = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("debug"): |
|
|
|
@ -1073,21 +1101,26 @@ void call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("detect-DTMF"): |
|
|
|
case CSH_LOOKUP("detect-dtmf"): |
|
|
|
case CSH_LOOKUP("detect DTMF"): |
|
|
|
case CSH_LOOKUP("detect dtmf"): |
|
|
|
out->detect_dtmf = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("directional"): |
|
|
|
out->directional = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("discard-recording"): |
|
|
|
case CSH_LOOKUP("discard recording"): |
|
|
|
out->discard_recording = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("early-media"): |
|
|
|
case CSH_LOOKUP("early media"): |
|
|
|
out->early_media = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("egress"): |
|
|
|
out->egress = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("exclude-recording"): |
|
|
|
case CSH_LOOKUP("exclude recording"): |
|
|
|
out->exclude_recording = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("fatal"): |
|
|
|
@ -1098,19 +1131,28 @@ void call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("full-rtcp-attribute"): |
|
|
|
case CSH_LOOKUP("full-RTCP-attribute"): |
|
|
|
case CSH_LOOKUP("full rtcp attribute"): |
|
|
|
case CSH_LOOKUP("full RTCP attribute"): |
|
|
|
out->full_rtcp_attr = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("generate-mid"): |
|
|
|
case CSH_LOOKUP("generate mid"): |
|
|
|
out->generate_mid = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("generate-RTCP"): |
|
|
|
case CSH_LOOKUP("generate-rtcp"): |
|
|
|
case CSH_LOOKUP("generate RTCP"): |
|
|
|
case CSH_LOOKUP("generate rtcp"): |
|
|
|
out->generate_rtcp = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("ICE-reject"): |
|
|
|
case CSH_LOOKUP("ice-reject"): |
|
|
|
case CSH_LOOKUP("reject-ice"): |
|
|
|
case CSH_LOOKUP("reject-ICE"): |
|
|
|
case CSH_LOOKUP("ICE reject"): |
|
|
|
case CSH_LOOKUP("ice reject"): |
|
|
|
case CSH_LOOKUP("reject ice"): |
|
|
|
case CSH_LOOKUP("reject ICE"): |
|
|
|
out->ice_reject = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("inactive"): |
|
|
|
@ -1118,55 +1160,78 @@ void call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("inject-DTMF"): |
|
|
|
case CSH_LOOKUP("inject-dtmf"): |
|
|
|
case CSH_LOOKUP("inject DTMF"): |
|
|
|
case CSH_LOOKUP("inject dtmf"): |
|
|
|
out->inject_dtmf = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("loop-protect"): |
|
|
|
case CSH_LOOKUP("loop protect"): |
|
|
|
out->loop_protect = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("media-handover"): |
|
|
|
case CSH_LOOKUP("media handover"): |
|
|
|
out->media_handover = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("mirror-RTCP"): |
|
|
|
case CSH_LOOKUP("mirror-rtcp"): |
|
|
|
case CSH_LOOKUP("RTCP-mirror"): |
|
|
|
case CSH_LOOKUP("rtcp-mirror"): |
|
|
|
case CSH_LOOKUP("mirror RTCP"): |
|
|
|
case CSH_LOOKUP("mirror rtcp"): |
|
|
|
case CSH_LOOKUP("RTCP mirror"): |
|
|
|
case CSH_LOOKUP("rtcp mirror"): |
|
|
|
out->rtcp_mirror = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("NAT-wait"): |
|
|
|
case CSH_LOOKUP("nat-wait"): |
|
|
|
case CSH_LOOKUP("NAT wait"): |
|
|
|
case CSH_LOOKUP("nat wait"): |
|
|
|
out->nat_wait = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("new-branch"): |
|
|
|
case CSH_LOOKUP("new branch"): |
|
|
|
out->new_branch = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-codec-renegotiation"): |
|
|
|
case CSH_LOOKUP("reuse-codecs"): |
|
|
|
case CSH_LOOKUP("no codec renegotiation"): |
|
|
|
case CSH_LOOKUP("reuse codecs"): |
|
|
|
out->reuse_codec = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-passthrough"): |
|
|
|
case CSH_LOOKUP("no passthrough"): |
|
|
|
out->passthrough_off = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-player"): |
|
|
|
case CSH_LOOKUP("no-audio-player"): |
|
|
|
case CSH_LOOKUP("no player"): |
|
|
|
case CSH_LOOKUP("no audio player"): |
|
|
|
out->audio_player = AP_OFF; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-port-latching"): |
|
|
|
case CSH_LOOKUP("no port latching"): |
|
|
|
out->no_port_latching = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-redis-update"): |
|
|
|
case CSH_LOOKUP("no redis update"): |
|
|
|
out->no_redis_update = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-rtcp-attribute"): |
|
|
|
case CSH_LOOKUP("no-RTCP-attribute"): |
|
|
|
case CSH_LOOKUP("no rtcp attribute"): |
|
|
|
case CSH_LOOKUP("no RTCP attribute"): |
|
|
|
out->no_rtcp_attr = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("no-jitter-buffer"): |
|
|
|
case CSH_LOOKUP("no jitter buffer"): |
|
|
|
out->disable_jb = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("original-sendrecv"): |
|
|
|
case CSH_LOOKUP("original sendrecv"): |
|
|
|
out->original_sendrecv = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("pad-crypto"): |
|
|
|
case CSH_LOOKUP("pad crypto"): |
|
|
|
out->sdes_pad = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("passthrough"): |
|
|
|
@ -1174,35 +1239,46 @@ void call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("pierce-NAT"): |
|
|
|
case CSH_LOOKUP("pierce-nat"): |
|
|
|
case CSH_LOOKUP("pierce NAT"): |
|
|
|
case CSH_LOOKUP("pierce nat"): |
|
|
|
out->pierce_nat = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("port-latching"): |
|
|
|
case CSH_LOOKUP("port latching"): |
|
|
|
out->port_latching = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("provisional"): |
|
|
|
out->provisional = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("record-call"): |
|
|
|
case CSH_LOOKUP("record call"): |
|
|
|
out->record_call = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("recording-vsc"): |
|
|
|
case CSH_LOOKUP("recording-VSC"): |
|
|
|
case CSH_LOOKUP("recording vsc"): |
|
|
|
case CSH_LOOKUP("recording VSC"): |
|
|
|
out->recording_vsc = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("recording-announcement"): |
|
|
|
case CSH_LOOKUP("recording announcement"): |
|
|
|
out->recording_announcement = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("reorder-codecs"): |
|
|
|
case CSH_LOOKUP("reorder codecs"): |
|
|
|
ilog(LOG_INFO, "Ignoring obsolete flag `reorder-codecs`"); |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("reset"): |
|
|
|
out->reset = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("single-codec"): |
|
|
|
case CSH_LOOKUP("single codec"): |
|
|
|
out->single_codec = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("SIP-source-address"): |
|
|
|
case CSH_LOOKUP("sip-source-address"): |
|
|
|
case CSH_LOOKUP("SIP source address"): |
|
|
|
case CSH_LOOKUP("sip source address"): |
|
|
|
out->trust_address = 0; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("SIPREC"): |
|
|
|
@ -1211,21 +1287,29 @@ void call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("skip-recording-db"): |
|
|
|
case CSH_LOOKUP("skip-recording-database"): |
|
|
|
case CSH_LOOKUP("skip recording db"): |
|
|
|
case CSH_LOOKUP("skip recording database"): |
|
|
|
out->skip_recording_db = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("static-codec"): |
|
|
|
case CSH_LOOKUP("static-codecs"): |
|
|
|
case CSH_LOOKUP("static codec"): |
|
|
|
case CSH_LOOKUP("static codecs"): |
|
|
|
out->static_codecs = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("strict-source"): |
|
|
|
case CSH_LOOKUP("strict source"): |
|
|
|
out->strict_source = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("strip-extmap"): |
|
|
|
case CSH_LOOKUP("strip extmap"): |
|
|
|
out->strip_extmap = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("symmetric-codecs"): |
|
|
|
case CSH_LOOKUP("symmetric codecs"): |
|
|
|
ilog(LOG_INFO, "Ignoring obsolete flag `symmetric-codecs`"); |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("to tag"): |
|
|
|
case CSH_LOOKUP("to-tag"): |
|
|
|
case CSH_LOOKUP("to_tag"): |
|
|
|
/* including the “To” tag in the “delete” message allows to be more selective |
|
|
|
@ -1234,9 +1318,12 @@ void call_ng_flags_flags(str *s, unsigned int idx, helper_arg arg) { |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("trickle-ICE"): |
|
|
|
case CSH_LOOKUP("trickle-ice"): |
|
|
|
case CSH_LOOKUP("trickle ICE"): |
|
|
|
case CSH_LOOKUP("trickle ice"): |
|
|
|
out->trickle_ice = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("trust-address"): |
|
|
|
case CSH_LOOKUP("trust address"): |
|
|
|
out->trust_address = 1; |
|
|
|
break; |
|
|
|
case CSH_LOOKUP("unidirectional"): |
|
|
|
|