コード例 #1
0
ファイル: SipAddress.py プロジェクト: LaoHanTeam/sippy
class SipAddress(object):
    name = None
    url = None
    params = None
    params_order = None
    hadbrace = None
    transtable = maketrans('-.!%*_+`\'~', 'a' * 10)

    def __init__(self, address = None, name = None, url = None, params = None,
      hadbrace = None, params_order = None, relaxedparser = False):
        self.params = {}
        self.params_order = []
        self.hadbrace = True
        if address == None:
            self.name = name
            self.url = url
            if params != None:
                self.params = params
            if params_order != None:
                self.params_order = params_order
            if hadbrace != None:
                self.hadbrace = hadbrace
            return
        # simple 'sip:foo' case
        if address.lower().startswith('sip:') and address.find('<') == -1:
            parts = address.split(';', 1)
            self.url = SipURL(parts[0], relaxedparser = relaxedparser)
            if len(parts) == 2:
                for l in parts[1].split(';'):
                    if not l:
                        continue
                    k_v = l.split('=', 1)
                    if len(k_v) == 2:
                        k, v = k_v
                    else:
                        k = k_v[0]
                        v = None
                    self.params[k] = v
                    if self.params_order.count(k) > 0:
                        self.params_order.remove(k)
                    self.params_order.append(k)
            self.hadbrace = False
            return
        if address.startswith('"'):
            qpos = findquotes(address)
            url = None
            if len(qpos) == 1:
                self.name = address[1:qpos[0]]
                url = address[qpos[0] + 1:].strip()
            else:
                for i in range(1, len(qpos)):
                    if address.find('<', 1, qpos[i]) != -1:
                        self.name = address[1:qpos[i - 1]]
                        url = address[qpos[i - 1] + 1:].strip()
                        break
                else:
                    self.name = address[1:qpos[i]]
                    url = address[qpos[i] + 1:].strip()
            if url == None:
                raise ValueError('Cannot separate name from URI: %s' % address)
            if url.startswith('<'):
                url = url[1:]
        else:
            self.name, url = address.split('<', 1)
            self.name = self.name.strip()
        url, paramstring = url.split('>', 1)
        self.url = SipURL(url, relaxedparser = relaxedparser)
        paramstring = paramstring.strip()
        if paramstring:
            for l in paramstring.split(';'):
                if not l:
                    continue
                k_v = l.split('=', 1)
                if len(k_v) == 2:
                    k, v = k_v
                else:
                    k = k_v[0]
                    v = None
                self.params[k] = v
                if self.params_order.count(k) > 0:
                    self.params_order.remove(k)
                self.params_order.append(k)

    def __str__(self):
        return self.localStr()

    def localStr(self, local_addr = None, local_port = None):
        if self.hadbrace:
            od = '<'
            cd = '>'
        else:
            od = ''
            cd = ''
        s = ''
        if self.name != None and len(self.name) > 0:
            if not self.name.translate(self.transtable).isalnum():
                s += '"%s" ' % self.name
            else:
                s += self.name + ' '
            od = '<'
            cd = '>'
        s += od + self.url.localStr(local_addr, local_port) + cd
        for k in self.params_order:
            v = self.params[k]
            if v != None:
                s += ';' + k + '=' + v
            else:
                s += ';' + k
        return s

    def getCopy(self):
        return SipAddress(name = self.name, url = self.url.getCopy(), params = self.params.copy(), \
          hadbrace = self.hadbrace, params_order = self.params_order[:])

    def getParam(self, name):
        return self.params.get(name, None)

    def setParam(self, name, value = None):
        self.params[name] = value
        if self.params_order.count(name) == 0:
            self.params_order.append(name)

    def delParam(self, name):
        del self.params[name]
        self.params_order.remove(name)
コード例 #2
0
class SipAddress(object):
    name = None
    url = None
    params = None
    hadbrace = None
    transtable = maketrans('-.!%*_+`\'~', 'a' * 10)

    def __init__(self,
                 address=None,
                 name=None,
                 url=None,
                 params=None,
                 hadbrace=None):
        self.params = {}
        self.hadbrace = True
        if address == None:
            self.name = name
            self.url = url
            if params != None:
                self.params = params
            if hadbrace != None:
                self.hadbrace = hadbrace
            return
        # simple 'sip:foo' case
        if address.lower().startswith('sip:') and address.find('<') == -1:
            parts = address.split(';', 1)
            self.url = SipURL(parts[0])
            if len(parts) == 2:
                for l in parts[1].split(';'):
                    if not l:
                        continue
                    k, v = l.split('=')
                    self.params[k] = v
            self.hadbrace = False
            return
        self.name, url = address.split('<', 1)
        self.name = self.name.strip()
        if self.name.startswith('"'):
            self.name = self.name[1:]
        if self.name.endswith('"'):
            self.name = self.name[:-1]
        url, paramstring = url.split('>', 1)
        self.url = SipURL(url)
        paramstring = paramstring.strip()
        if paramstring:
            for l in paramstring.split(';'):
                if not l:
                    continue
                k, v = l.split('=')
                self.params[k] = v

    def __str__(self):
        return self.localStr()

    def localStr(self, local_addr=None, local_port=None):
        if self.hadbrace:
            od = '<'
            cd = '>'
        else:
            od = ''
            cd = ''
        s = ''
        if self.name != None and len(self.name) > 0:
            if not self.name.translate(self.transtable).isalnum():
                s += '"%s" ' % self.name
            else:
                s += self.name + ' '
            od = '<'
            cd = '>'
        s += od + self.url.localStr(local_addr, local_port) + cd
        for k, v in self.params.items():
            s += ';' + k + '=' + v
        return s

    def getCopy(self):
        return SipAddress(name=self.name,
                          url=self.url.getCopy(),
                          params=self.params.copy(),
                          hadbrace=self.hadbrace)

    def getParam(self, name):
        try:
            return self.params[name]
        except KeyError:
            return None

    def setParam(self, name, value):
        self.params[name] = value

    def delParam(self, name):
        del self.params[name]
コード例 #3
0
ファイル: SipAddress.py プロジェクト: zhongz/b2bua
class SipAddress(object):
    name = None
    url = None
    params = None
    params_order = None
    hadbrace = None
    transtable = maketrans('-.!%*_+`\'~', 'a' * 10)

    def __init__(self,
                 address=None,
                 name=None,
                 url=None,
                 params=None,
                 hadbrace=None,
                 params_order=None,
                 relaxedparser=False):
        self.params = {}
        self.params_order = []
        self.hadbrace = True
        if address == None:
            self.name = name
            self.url = url
            if params != None:
                self.params = params
            if params_order != None:
                self.params_order = params_order
            if hadbrace != None:
                self.hadbrace = hadbrace
            return
        # simple 'sip:foo' case
        if address.lower().startswith('sip:') and address.find('<') == -1:
            parts = address.split(';', 1)
            self.url = SipURL(parts[0], relaxedparser=relaxedparser)
            if len(parts) == 2:
                for l in parts[1].split(';'):
                    if not l:
                        continue
                    k_v = l.split('=', 1)
                    if len(k_v) == 2:
                        k, v = k_v
                    else:
                        k = k_v[0]
                        v = None
                    self.params[k] = v
                    if self.params_order.count(k) > 0:
                        self.params_order.remove(k)
                    self.params_order.append(k)
            self.hadbrace = False
            return
        if address.startswith('"'):
            qpos = findquotes(address)
            url = None
            if len(qpos) == 1:
                self.name = address[1:qpos[0]]
                url = address[qpos[0] + 1:].strip()
            else:
                for i in range(1, len(qpos)):
                    if address.find('<', 1, qpos[i]) != -1:
                        self.name = address[1:qpos[i - 1]]
                        url = address[qpos[i - 1] + 1:].strip()
                        break
                else:
                    self.name = address[1:qpos[i]]
                    url = address[qpos[i] + 1:].strip()
            if url == None:
                raise ValueError('Cannot separate name from URI: %s' % address)
            if url.startswith('<'):
                url = url[1:]
        else:
            self.name, url = address.split('<', 1)
            self.name = self.name.strip()
        url, paramstring = url.split('>', 1)
        self.url = SipURL(url, relaxedparser=relaxedparser)
        paramstring = paramstring.strip()
        if paramstring:
            for l in paramstring.split(';'):
                if not l:
                    continue
                k_v = l.split('=', 1)
                if len(k_v) == 2:
                    k, v = k_v
                else:
                    k = k_v[0]
                    v = None
                self.params[k] = v
                if self.params_order.count(k) > 0:
                    self.params_order.remove(k)
                self.params_order.append(k)

    def __str__(self):
        return self.localStr()

    def localStr(self, local_addr=None, local_port=None):
        if self.hadbrace:
            od = '<'
            cd = '>'
        else:
            od = ''
            cd = ''
        s = ''
        if self.name != None and len(self.name) > 0:
            if not self.name.translate(self.transtable).isalnum():
                s += '"%s" ' % self.name
            else:
                s += self.name + ' '
            od = '<'
            cd = '>'
        s += od + self.url.localStr(local_addr, local_port) + cd
        for k in self.params_order:
            v = self.params[k]
            if v != None:
                s += ';' + k + '=' + v
            else:
                s += ';' + k
        return s

    def getCopy(self):
        return SipAddress(name = self.name, url = self.url.getCopy(), params = self.params.copy(), \
          hadbrace = self.hadbrace, params_order = self.params_order[:])

    def getParam(self, name):
        return self.params.get(name, None)

    def setParam(self, name, value=None):
        self.params[name] = value
        if self.params_order.count(name) == 0:
            self.params_order.append(name)

    def delParam(self, name):
        del self.params[name]
        self.params_order.remove(name)
コード例 #4
0
ファイル: SipAddress.py プロジェクト: BackupTheBerlios/sippy
class SipAddress(object):
    name = None
    url = None
    params = None
    hadbrace = None
    transtable = maketrans('-.!%*_+`\'~', 'a' * 10)

    def __init__(self, address = None, name = None, url = None, params = None, hadbrace = None):
        self.params = {}
        self.hadbrace = True
        if address == None:
            self.name = name
            self.url = url
            if params != None:
                self.params = params
            if hadbrace != None:
                self.hadbrace = hadbrace
            return
        # simple 'sip:foo' case
        if address.lower().startswith('sip:') and address.find('<') == -1:
            parts = address.split(';', 1)
            self.url = SipURL(parts[0])
            if len(parts) == 2:
                for l in parts[1].split(';'):
                    if not l:
                        continue
                    k, v = l.split('=')
                    self.params[k] = v
            self.hadbrace = False
            return
        self.name, url = address.split('<', 1)
        self.name = self.name.strip()
        if self.name.startswith('"'):
            self.name = self.name[1:]
        if self.name.endswith('"'):
            self.name = self.name[:-1]
        url, paramstring = url.split('>', 1)
        self.url = SipURL(url)
        paramstring = paramstring.strip()
        if paramstring:
            for l in paramstring.split(';'):
                if not l:
                    continue
                k, v = l.split('=')
                self.params[k] = v

    def __str__(self):
        return self.localStr()

    def localStr(self, local_addr = None, local_port = None):
        if self.hadbrace:
            od = '<'
            cd = '>'
        else:
            od = ''
            cd = ''
        s = ''
        if self.name != None and len(self.name) > 0:
            if not self.name.translate(self.transtable).isalnum():
                s += '"%s" ' % self.name
            else:
                s += self.name + ' '
            od = '<'
            cd = '>'
        s += od + self.url.localStr(local_addr, local_port) + cd
        for k, v in self.params.items():
            s += ';' + k + '=' + v
        return s

    def getCopy(self):
        return SipAddress(name = self.name, url = self.url.getCopy(), params = self.params.copy(), hadbrace = self.hadbrace)

    def getParam(self, name):
        try:
            return self.params[name]
        except KeyError:
            return None

    def setParam(self, name, value):
        self.params[name] = value

    def delParam(self, name):
        del self.params[name]