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()
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
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'
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
def test_is_rfc3261(branch): assert is_rfc3261(Branch(branch))
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
def test_branch_key_idempotent(): key = BranchKey(Branch('z9hG4bK776asdhds')) assert key == BranchKey(key)
def test_reassemble(branch): assert branch == Branch(branch).binary
def test_ne(): assert Branch('z9hG4bK77_6asdhds') != Branch('z9hG4bK776asdhds')
def test_eq(): assert Branch('z9hG4bK776asdhds') == Branch('z9hg4bk776asdhds')
def test_key_not_rfc3621(branch): assert not is_rfc3261(BranchKey(Branch(branch)))
def test_key_is_rfc3261(branch): assert is_rfc3261(BranchKey(Branch(branch)))
def test_not_rfc3261(branch): assert not is_rfc3261(Branch(branch))