diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/upnp.rs | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/upnp.rs b/src/upnp.rs index a4628ab..f6afe06 100644 --- a/src/upnp.rs +++ b/src/upnp.rs @@ -22,19 +22,20 @@ User-Agent: slingr/0.1.0\r\n\r\n"; pub struct Device { usn: String, - host: String, xml: String, } const USN_REGEX: &'static str = r"uuid:([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})"; +const XML_REGEX: &'static str = r"Location: (http(s?)://.*)"; fn parse_udp_message(msg: &str) -> Device { - let re = Regex::new(USN_REGEX).unwrap(); - let usn = re.captures(msg).unwrap().get(1).unwrap().as_str().to_string(); + let usn_re = Regex::new(USN_REGEX).unwrap(); + let xml_re = Regex::new(XML_REGEX).unwrap(); + let usn = usn_re.captures(msg).unwrap().get(1).unwrap().as_str().to_string(); + let xml = xml_re.captures(msg).unwrap().get(1).unwrap().as_str().to_string(); Device { usn, - host: "192.168.33.44:38400".to_string(), - xml: "http://192.168.33.44:38400/deviceDescription/MediaRenderer".to_string() + xml } } @@ -44,7 +45,7 @@ pub fn discover() { socket.send_to(SEARCH_REQUEST.as_bytes(), MULTICAST_ADDRESS).expect("couldn't send data"); let mut devices = HashMap::new(); - let d = Device {usn: "a".to_string(), host: "b".to_string(), xml: "c".to_string()}; + let d = Device {usn: "a".to_string(), xml: "c".to_string()}; devices.insert("foo", d); let mut buf = [0; 1024]; @@ -73,10 +74,10 @@ mod tests { Date: Fri, 02 Jan 1970 22:25:35 GMT ST: urn:schemas-upnp-org:service:ConnectionManager:1 USN: uuid:9acb38e1-09cc-dba0-ffff-ffffe156cab7::urn:schemas-upnp-org:service:ConnectionManager:1 - Location: http://192.168.33.44:38400/deviceDescription/MediaRenderer"#); + Location: http://192.168.33.44:38400/deviceDescription/MediaRenderer + Foo: foo"#); let d = parse_udp_message(msg); assert_eq!(d.usn, "9acb38e1-09cc-dba0-ffff-ffffe156cab7"); assert_eq!(d.xml, "http://192.168.33.44:38400/deviceDescription/MediaRenderer"); - assert_eq!(d.host, "192.168.33.44:38400") } } |
