Example #1
0
def test_via_branch():
    branch_value = 'z9hG4bK776asdhds'
    branch = Branch(branch_value)
    via = ViaHeader('SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=' +
                    branch_value)
    assert via.branch == branch
    assert via.branch.make_key() == branch.make_key()
Example #2
0
def test_via_params():
    via = ViaHeader(
        'SIP/2.0/TCP 192.168.1.1:5090;branch=z9hG4bK77ef4c2312983.1;rport;x=1;some'
    )
    assert Branch('z9hG4bK77ef4c2312983.1') == via.branch
    assert via.rport is True
    assert via.get_raw_param('x') == '1'
    assert via.get_raw_param('rport') is None
    assert via.get_raw_param('some') is None
Example #3
0
def test_via_params_2():
    hdr = Header('Via')
    hdr.add_value(
        "SIP/2.0/TCP 192.168.1.1:5090;branch=branch_v;ttl=200;received=1.1.1.1;maddr=x.com"
    )
    via = ViaHeader.topmost_via(hdr)
    assert via.branch == Branch('branch_v')
    assert via.ttl == 200
    assert via.received == ipaddress.IPv4Address('1.1.1.1')
    assert via.maddr == 'x.com'
Example #4
0
def test_topmost_via_with_spaces():
    hdr = Header('Via')
    hdr.add_value(
        'SIP / 2.0 / UDP first.example.com: 4000;ttl=16 ;maddr=224.2.0.1 ;branch=z9hG4bKa7c6a8dlze.1'
    )
    via = ViaHeader.topmost_via(hdr)
    assert via.sent_protocol.name == 'SIP'
    assert via.sent_protocol.version == '2.0'
    assert via.sent_protocol.transport == Transport('UDP')
    assert via.branch == Branch('z9hG4bKa7c6a8dlze.1')
    assert via.maddr == ipaddress.IPv4Address('224.2.0.1')
    assert via.ttl == 16
    assert via.sent_by.host == 'first.example.com'
    assert via.sent_by.port == 4000
Example #5
0
def test_is_rfc3261(branch):
    assert is_rfc3261(Branch(branch))
Example #6
0
    def parse_known_param_fun(param, value):
        """Filtering function that is passed as argument to HParams.parse_known method.

        Args:
            param (str): parameter name.
            value (str): parameter value.

        Returns:
            str:parsed_name, :obj:parsed_value
            None, None: if lowercase parameter name is not in (PARAM_TTL, PARAM_RECEIVED, PARAM_MADDR, PARAM_BRANCH, PARAM_RPORT)
        """
        if param == PARAM_TTL:
            ttl, rest = parse_non_negative_integer(value.strip())
            if rest or ttl < 0 or ttl > 255:
                raise ViaHeaderError(
                    f'Cannot parse via header TTL {param}={value}: value should be 0..255 integer'
                )
            return PARAM_TTL, ttl
        elif param == PARAM_RECEIVED:
            try:
                host = PARSER.parse_host(value)
            except Exception as e:
                raise ViaHeaderError(
                    f'Cannot parse Via RECEIVED {param}={value}: invalid host {e}'
                )
            if isinstance(host, IPv4Address) or isinstance(host, IPv6Address):
                return PARAM_RECEIVED, host
            else:
                raise ViaHeaderError(
                    f'Cannot set Via RECEIVED {param}={value}: invalid IPv4 or IPv6 host'
                )
        elif param == PARAM_MADDR:
            try:
                host = PARSER.parse_host(value)
            except Exception as e:
                raise ViaHeaderError(
                    f'Cannot parse Via MADDR {param}={value}: invalid host {e}'
                )
            return PARAM_MADDR, host
        elif param == PARAM_BRANCH:
            try:
                branch, rest = parse_token(value)
                if rest:
                    raise ViaHeaderError(
                        f'Cannot parse Via BRANCH {param}={value}: value should be token'
                    )
                return PARAM_BRANCH, Branch(branch)
            except Exception as e:
                raise ViaHeaderError(
                    f'Cannot parse Via BRANCH {param}={value}: {e}')
        elif param == PARAM_RPORT:
            if value is None:
                port, rest = True, ''
            else:
                port, rest = parse_non_negative_integer(value)
            if rest or (port is not None and (port <= 0 or port > 65535)):
                raise ViaHeaderError(
                    f'Cannot parse via header RPORT {param}={value}: value should be 1..65535 integer'
                )
            return PARAM_RPORT, port
        else:
            return None, None
Example #7
0
def test_branch_key_idempotent():
    key = BranchKey(Branch('z9hG4bK776asdhds'))
    assert key == BranchKey(key)
Example #8
0
def test_reassemble(branch):
    assert branch == Branch(branch).binary
Example #9
0
def test_ne():
    assert Branch('z9hG4bK77_6asdhds') != Branch('z9hG4bK776asdhds')
Example #10
0
def test_eq():
    assert Branch('z9hG4bK776asdhds') == Branch('z9hg4bk776asdhds')
Example #11
0
def test_key_not_rfc3621(branch):
    assert not is_rfc3261(BranchKey(Branch(branch)))
Example #12
0
def test_key_is_rfc3261(branch):
    assert is_rfc3261(BranchKey(Branch(branch)))
Example #13
0
def test_not_rfc3261(branch):
    assert not is_rfc3261(Branch(branch))