use sipmsg::*; #[test] fn status_code_from_bytes_str() { assert_eq!( SipResponseStatusCode::from_bytes_str("100".as_bytes()), SipResponseStatusCode::Trying ); assert_eq!( SipResponseStatusCode::from_bytes_str("181".as_bytes()), SipResponseStatusCode::CallIsBeingForwarded ); } #[test] fn status_code_from_str() { assert_eq!( SipResponseStatusCode::from_str("500"), SipResponseStatusCode::ServerInternalError ); } #[test] fn status_line() { match SipResponseStatusLine::parse(b"SIP/2.0 401 Unauthorized\r\n") { Ok((left, status_line)) => { assert_eq!(left.len(), 0); assert_eq!(status_line.sip_version, sipmsg::SipVersion(2, 0)); assert_eq!(status_line.status_code, SipResponseStatusCode::Unauthorized); assert_eq!(status_line.reason_phrase, "Unauthorized"); } Err(_e) => panic!(), } } #[test] fn parse_response() { let response_msg = "SIP/2.0 401 Unauthorized\r\n\ Via: SIP/2.0/UDP 192.168.178.69:60686;branch=z9hG4bKPj7IVefnk0j6Wn9oUM78ubmcURGDehvKEc;received=192.168.178.69;rport=60686\r\n\ From: ;tag=XOO-LeGIwZmwa2UROKMXEhZGA5mKcY0b\r\n\ To: ;tag=as68275e50\r\n\ Call-ID: p8gpcmxSdWwcM5xV89nm2LkEbcTPUdT1\r\n\ CSeq: 62833 REGISTER\r\n\ Server: FPBX-2.11.0(11.6.0)\r\n\ Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH\r\n\ Supported: replaces, timer\r\n\ Content-Length: 0\r\n\r\n"; match SipResponse::parse(response_msg.as_bytes()) { Ok((_, response)) => { assert_eq!(response.sl.sip_version, SipVersion(2, 0)); assert_eq!(response.sl.status_code, SipResponseStatusCode::Unauthorized); assert_eq!(response.sl.reason_phrase, "Unauthorized"); assert_eq!(response.headers.len(), 9); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::Via) .unwrap() .value .vstr, "SIP/2.0/UDP 192.168.178.69:60686" ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::Via) .unwrap() .params() .unwrap() .get(&"branch"), Some(&Some("z9hG4bKPj7IVefnk0j6Wn9oUM78ubmcURGDehvKEc")) ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::Via) .unwrap() .params() .unwrap() .get(&"received"), Some(&Some("192.168.178.69")) ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::Via) .unwrap() .params() .unwrap() .get(&"rport"), Some(&Some("60686")) ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::From) .unwrap() .value .vstr, "" ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::From) .unwrap() .params() .unwrap() .get(&"tag"), Some(&Some("XOO-LeGIwZmwa2UROKMXEhZGA5mKcY0b")) ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::To) .unwrap() .value .vstr, "" ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::To) .unwrap() .params() .unwrap() .get(&"tag"), Some(&Some("as68275e50")) ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::CallID) .unwrap() .value .vstr, "p8gpcmxSdWwcM5xV89nm2LkEbcTPUdT1" ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::CSeq) .unwrap() .value .vstr, "62833 REGISTER" ); assert_eq!( response .headers .get_rfc_s(SipRFCHeader::Server) .unwrap() .value .vstr, "FPBX-2.11.0(11.6.0)" ); let allow_headers = response.headers.get_rfc(SipRFCHeader::Allow).unwrap(); assert_eq!(allow_headers.len(), 10); assert_eq!(allow_headers[0].name, "Allow"); assert_eq!(allow_headers[0].value.vstr, "INVITE"); assert_eq!(allow_headers[1].value.vstr, "ACK"); assert_eq!(allow_headers[2].value.vstr, "CANCEL"); assert_eq!(allow_headers[3].value.vstr, "OPTIONS"); assert_eq!(allow_headers[4].value.vstr, "BYE"); assert_eq!(allow_headers[5].value.vstr, "REFER"); assert_eq!(allow_headers[6].value.vstr, "SUBSCRIBE"); assert_eq!(allow_headers[7].value.vstr, "NOTIFY"); assert_eq!(allow_headers[8].value.vstr, "INFO"); assert_eq!(allow_headers[9].value.vstr, "PUBLISH"); let supported_headers = response.headers.get_rfc(SipRFCHeader::Supported).unwrap(); assert_eq!(supported_headers[0].value.vstr, "replaces"); assert_eq!(supported_headers[1].value.vstr, "timer"); } Err(_e) => panic!(), } }