From da24d425eb3082b4da639174c4e9814036b0e869 Mon Sep 17 00:00:00 2001 From: Torrey Searle <torrey@voxbone.com> Date: Wed, 11 Oct 2017 13:04:12 +0200 Subject: [PATCH] contrib/script/sip_to_pjsip: implement 'all' for allow/disallow when 'all' is specified in an allow or disallow section, it should erase all values from the inverse section in the default config. E.G. allow=all should erase any deny values from default config & vice-versa ASTERISK-27333 #close Change-Id: I99219478fb98f08751d769daaee0b7795118a5a6 --- contrib/scripts/sip_to_pjsip/sip_to_pjsip.py | 44 +++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py b/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py index eb3aab3b85..533e4baecb 100755 --- a/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py +++ b/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py @@ -77,6 +77,46 @@ def merge_value(key=None, val=None, section=None, pjsip=None, section_to if section_to else section, pjsip, nmapped, type) +def merge_codec_value(key=None, val=None, section=None, pjsip=None, + nmapped=None, type='endpoint', section_to=None, + key_to=None): + """Merge values from allow/deny with those from the default. Special treatment for all""" + def _merge_codec_value(k, v, s, r, n): + merge_codec_value(key if key else k, v, s, r, n, type, section_to, key_to) + + # if no value or section return the merge_codec_value + # function with the enclosed key and type + if not val and not section: + return _merge_codec_value + + if key == 'allow': + try: + disallow = sip.get(section, 'disallow')[0] + if disallow == 'all': + #don't inherit + for i in sip.get(section, 'allow'): + set_value(key, i, section, pjsip, nmapped, type) + else: + merge_value(key, val, section, pjsip, nmapped, type, section_to, key_to) + except LookupError: + print "lookup error" + merge_value(key, val, section, pjsip, nmapped, type, section_to, key_to) + return + elif key == 'disallow': + try: + allow = sip.get(section, 'allow')[0] + if allow == 'all': + #don't inherit + for i in sip.get(section, 'disallow'): + set_value(key, i, section, pjsip, nmapped, type) + else: + merge_value(key, val, section, pjsip, nmapped, type, section_to, key_to) + except LookupError: + merge_value(key, val, section, pjsip, nmapped, type, section_to, key_to) + return + else: + merge_value(key, val, section, pjsip, nmapped, type, section_to, key_to) + def non_mapped(nmapped): """Write non-mapped sip.conf values to the non-mapped object""" @@ -404,8 +444,8 @@ peer_map = [ ########################################################################### ['context', set_value], ['dtmfmode', set_dtmfmode], - ['disallow', merge_value], - ['allow', merge_value], + ['disallow', merge_codec_value], + ['allow', merge_codec_value], ['nat', from_nat], # rtp_symmetric, force_rport, # rewrite_contact ['rtptimeout', set_value('rtp_timeout')], -- GitLab