diff --git a/contrib/scripts/sip_to_pjsip/astconfigparser.py b/contrib/scripts/sip_to_pjsip/astconfigparser.py index dc79e803218ebb2622ca23609eb6109ad2cb5283..949acdb5ab8fecee14081806764fbeb09ac8bf69 100644 --- a/contrib/scripts/sip_to_pjsip/astconfigparser.py +++ b/contrib/scripts/sip_to_pjsip/astconfigparser.py @@ -49,7 +49,7 @@ class Section(MultiOrderedDict): """ Use self.id as means of determining equality """ - return cmp(self.id, other.id) + return (self.id > other.id) - (self.id < other.id) def __eq__(self, other): """ @@ -445,7 +445,7 @@ class MultiOrderedConfigParser: with open(filename, 'rt') as config_file: self._read(config_file, sect) except IOError: - print "Could not open file ", filename, " for reading" + print("Could not open file " + filename + " for reading") def _read(self, config_file, sect): """Parse configuration information from the config_file""" @@ -490,4 +490,4 @@ class MultiOrderedConfigParser: with open(config_file, 'wt') as fp: self.write(fp) except IOError: - print "Could not open file ", config_file, " for writing" + print("Could not open file " + config_file + " for writing") diff --git a/contrib/scripts/sip_to_pjsip/astdicts.py b/contrib/scripts/sip_to_pjsip/astdicts.py index ae630755d7234ba57bfd63f4c505c6f2e490db10..39cab98c42d9e79067175e406d1ff0873f4ab9f6 100644 --- a/contrib/scripts/sip_to_pjsip/astdicts.py +++ b/contrib/scripts/sip_to_pjsip/astdicts.py @@ -3,10 +3,12 @@ # copied from http://code.activestate.com/recipes/576693/ try: - from thread import get_ident as _get_ident + from threading import get_ident as _get_ident except ImportError: - from dummy_thread import get_ident as _get_ident - + try: + from thread import get_ident as _get_ident + except ImportError: + from dummy_thread import get_ident as _get_ident try: from _abcoll import KeysView, ValuesView, ItemsView except ImportError: @@ -267,11 +269,11 @@ class MultiOrderedDict(OrderedDict): def __setitem__(self, key, val, i=None): if key not in self: -# print "__setitem__ key = ", key, " val = ", val +# print("__setitem__ key = " + key + " val = " + val) OrderedDict.__setitem__( self, key, val if isinstance(val, list) else [val]) return -# print "inserting key = ", key, " val = ", val +# print("inserting key = " + key + " val = " + val) vals = self[key] if i is None: i = len(vals) diff --git a/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py b/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py index 9f7d99104342761e8c548d37b3ad235549fd89c9..d05f97d5fbf5d68f33a4e4e0324335ca46dfc52f 100755 --- a/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py +++ b/contrib/scripts/sip_to_pjsip/sip_to_pjsip.py @@ -1,9 +1,11 @@ -#!/usr/bin/python +#!/usr/bin/env python import optparse import socket -import urlparse # Python 2.7 required for Literal IPv6 Addresses - +try: + from urllib.parse import urlparse +except ImportError: + from urlparse import urlparse # Python 2.7 required for Literal IPv6 Addresses import astdicts import astconfigparser @@ -90,32 +92,32 @@ def merge_codec_value(key=None, val=None, section=None, pjsip=None, 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 + 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 + 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) + merge_value(key, val, section, pjsip, nmapped, type, section_to, key_to) def non_mapped(nmapped): @@ -162,9 +164,9 @@ def setup_udptl(section, pjsip, nmapped): val = sip.get(section, 't38pt_udptl')[0] except LookupError: try: - val = sip.get('general', 't38pt_udptl')[0] + val = sip.get('general', 't38pt_udptl')[0] except LookupError: - return + return ec = 'none' if 'yes' in val: @@ -291,7 +293,7 @@ def build_host(config, host, section='general', port_key=None): # Literal IPv6 (like [::]), IPv4, or hostname # does not work for IPv6 without brackets; case catched above - url = urlparse.urlparse('sip://' + host) + url = urlparse('sip://' + host) if port_key: try: @@ -435,8 +437,7 @@ def from_dtlsenable(key, val, section, pjsip, nmapped): ############################################################################### # options in pjsip.conf on an endpoint that have no sip.conf equivalent: -# type, 100rel, trust_id_outbound, aggregate_mwi, -# connected_line_method +# type, 100rel, trust_id_outbound, aggregate_mwi, connected_line_method # known sip.conf peer keys that can be mapped to a pjsip.conf section/key peer_map = [ @@ -591,7 +592,7 @@ def split_hostport(addr): # Literal IPv6 (like [::]), IPv4, or hostname # does not work for IPv6 without brackets; case catched above - url = urlparse.urlparse('sip://' + addr) + url = urlparse('sip://' + addr) # TODO Does not compress IPv6, for example 0:0:0:0:0:0:0:0 should get [::] return (url.hostname, url.port) @@ -839,11 +840,11 @@ def create_tls(sip, pjsip, nmapped): method = sip.multi_get('general', ['tlsclientmethod', 'sslclientmethod'])[0] if section != 'transport-' + protocol + '6': # print only once - print 'In chan_sip, you specified the TLS version. With chan_sip,' \ + print('In chan_sip, you specified the TLS version. With chan_sip,' \ ' this was just for outbound client connections. In' \ ' chan_pjsip, this value is for client and server. Instead,' \ ' consider not to specify \'tlsclientmethod\' for chan_sip' \ - ' and \'method = sslv23\' for chan_pjsip.' + ' and \'method = sslv23\' for chan_pjsip.') except LookupError: """ OpenSSL emerged during the 90s. SSLv2 and SSLv3 were the only @@ -1246,7 +1247,7 @@ def write_pjsip(filename, pjsip, non_mappings): pjsip.write(fp) except IOError: - print "Could not open file ", filename, " for writing" + print("Could not open file " + filename + " for writing") ############################################################################### @@ -1277,11 +1278,11 @@ if __name__ == "__main__": sip_filename, pjsip_filename = cli_options() # configuration parser for sip.conf sip = astconfigparser.MultiOrderedConfigParser() - print 'Please, report any issue at:' - print ' https://issues.asterisk.org/' - print 'Reading', sip_filename + print('Please, report any issue at:') + print(' https://issues.asterisk.org/') + print('Reading ' + sip_filename) sip.read(sip_filename) - print 'Converting to PJSIP...' + print('Converting to PJSIP...') pjsip, non_mappings = convert(sip, pjsip_filename, dict(), False) - print 'Writing', pjsip_filename + print('Writing ' + pjsip_filename) write_pjsip(pjsip_filename, pjsip, non_mappings) diff --git a/contrib/scripts/sip_to_pjsip/sip_to_pjsql.py b/contrib/scripts/sip_to_pjsip/sip_to_pjsql.py index d93bca500ad51e7727c31fcb5bc128a6c992ade3..71ddd45b64ddbb2fc2c68021eefc7dc3596808b8 100755 --- a/contrib/scripts/sip_to_pjsip/sip_to_pjsql.py +++ b/contrib/scripts/sip_to_pjsip/sip_to_pjsql.py @@ -1,6 +1,5 @@ -#!/usr/bin/python +#!/usr/bin/env python -from sip_to_pjsip import cli_options from sip_to_pjsip import convert import sip_to_pjsip import optparse @@ -18,7 +17,7 @@ def write_pjsip(filename, pjsip, non_mappings): pjsip.write(fp) except IOError: - print "Could not open file ", filename, " for writing" + print("Could not open file " + filename + " for writing") def cli_options(): """ @@ -70,12 +69,12 @@ if __name__ == "__main__": sip = sqlconfigparser.SqlConfigParser(table) sip_to_pjsip.sip = sip sip.connect(user,password,host,port,database) - print 'Please, report any issue at:' - print ' https://issues.asterisk.org/' - print 'Reading', sip_filename + print('Please, report any issue at:') + print(' https://issues.asterisk.org/') + print('Reading ' + sip_filename) sip.read(sip_filename) - print 'Converting to PJSIP realtime sql...' + print('Converting to PJSIP realtime sql...') pjsip, non_mappings = convert(sip, pjsip_filename, dict(), False) - print 'Writing', pjsip_filename + print('Writing ' + pjsip_filename) write_pjsip(pjsip_filename, pjsip, non_mappings) diff --git a/contrib/scripts/sip_to_pjsip/sqlconfigparser.py b/contrib/scripts/sip_to_pjsip/sqlconfigparser.py index e87224ff182516b1c59548e6c082562361e6bf98..55c6910939eb056eb723c2fe5a3fac12f6b393bd 100644 --- a/contrib/scripts/sip_to_pjsip/sqlconfigparser.py +++ b/contrib/scripts/sip_to_pjsip/sqlconfigparser.py @@ -1,6 +1,13 @@ from astconfigparser import MultiOrderedConfigParser -import MySQLdb +try: + import pymysql as MySQLdb + MySQLdb.install_as_MySQLdb() +except ImportError: + # MySQLdb is compatible with Python 2 only. Try it as a + # fallback if pymysql is unavailable. + import MySQLdb + import traceback class SqlConfigParser(MultiOrderedConfigParser): @@ -61,9 +68,6 @@ class SqlConfigParser(MultiOrderedConfigParser): """Write configuration information out to a file""" try: self.write_dicts(config_file, self._sections) - except Exception,e: - print "Could not open file ", config_file, " for writing" + except: + print("Could not open file " + config_file + " for writing") traceback.print_exc() - - -