use libsip::{headers::parse::parse_via_header, *}; use nom::error::VerboseError; #[test] fn write() { let header = ViaHeader { version: Version::default(), transport: Transport::Udp, uri: Uri::new_schemaless(domain!("example.com")), }; assert_eq!( "Via: SIP/2.0/UDP example.com".to_string(), format!("{}", header) ); } #[test] fn read() { let remains = vec!['\r' as u8, '\n' as u8]; let header = ViaHeader { version: Version::default(), transport: Transport::Udp, uri: Uri::new_schemaless(domain!("example.com")), }; assert_eq!( Ok((remains.as_ref(), Header::Via(header))), parse_via_header::>(b"Via: SIP/2.0/UDP example.com\r\n") ); let input = b"Via: SIP/2.0/UDP 192.168.1.120;rport;branch=z9hG4bK7Q6y313Qrt6Uc\r\n"; let remains = vec!['\r' as u8, '\n' as u8]; let header = ViaHeader { version: Version::default(), transport: Transport::Udp, uri: Uri::new_schemaless(ip_domain!(192, 168, 1, 120)) .parameter(UriParam::RPort(None)) .parameter(UriParam::Branch("z9hG4bK7Q6y313Qrt6Uc".into())), }; assert_eq!( Ok((remains.as_ref(), Header::Via(header))), parse_via_header::>(input) ); let input = b"Via: SIP/2.0/UDP 192.168.1.1:5060;rport=5060;received=192.168.1.1;branch=8e7ec4e3d1e1380bc111f8723341ca70;transport=UDP\r\n"; let remains = vec!['\r' as u8, '\n' as u8]; let header = ViaHeader { version: Version::default(), transport: Transport::Udp, uri: Uri::new_schemaless(ip_domain!(192, 168, 1, 1, 5060)) .parameter(UriParam::RPort(Some(5060))) .parameter(UriParam::Received(ip_domain!(192, 168, 1, 1))) .parameter(UriParam::Branch("8e7ec4e3d1e1380bc111f8723341ca70".into())) .parameter(UriParam::Transport(Transport::Udp)), }; assert_eq!( Ok((remains.as_ref(), Header::Via(header))), parse_via_header::>(input) ); let input = b"Via: SIP/2.0/UDP 192.168.1.120;branch=03395ed83a7b9502c671c769bbe369cb;received=192.168.1.76\r\n"; let remains = vec!['\r' as u8, '\n' as u8]; let header = ViaHeader { version: Version::default(), transport: Transport::Udp, uri: Uri::new_schemaless(ip_domain!(192, 168, 1, 120)) .parameter(UriParam::Branch("03395ed83a7b9502c671c769bbe369cb".into())) .parameter(UriParam::Received(ip_domain!(192, 168, 1, 76))), }; assert_eq!( Ok((remains.as_ref(), Header::Via(header))), parse_via_header::>(input) ); }