Parser panics when device has no serviceList
seijikun opened this issue · comments
Markus Ebner commented
Thank you very much for this awesome library!
I was searching for a lib that I can use to send media urls to my Kodi instance...
Opened the crate page of upnp-client, scrolled down and was very surprised to see a code example of exactly what I need!
Unfortunately, we seem to have a device in our network that doesn't have a serviceList
entry, which sometimes makes the parser crash in line 100.
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /home/seiji/.cargo/registry/src/github.com-1ecc6299db9ec823/upnp-client-0.1.7/src/parser.rs:100:33
stack backtrace:
0: rust_begin_unwind
at /rustc/f15f0ea73972786e426732c5b92ba9a904b866c4/library/std/src/panicking.rs:579:5
1: core::panicking::panic_fmt
at /rustc/f15f0ea73972786e426732c5b92ba9a904b866c4/library/core/src/panicking.rs:64:14
2: core::panicking::panic
at /rustc/f15f0ea73972786e426732c5b92ba9a904b866c4/library/core/src/panicking.rs:114:5
3: core::option::Option<T>::unwrap
at /rustc/f15f0ea73972786e426732c5b92ba9a904b866c4/library/core/src/option.rs:942:21
4: upnp_client::parser::parse_services::{{closure}}
at /home/seiji/.cargo/registry/src/github.com-1ecc6299db9ec823/upnp-client-0.1.7/src/parser.rs:100:20
5: upnp_client::parser::parse_location::{{closure}}
at /home/seiji/.cargo/registry/src/github.com-1ecc6299db9ec823/upnp-client-0.1.7/src/parser.rs:70:59
6: upnp_client::discovery::discover_pnp_locations::{{closure}}
at /home/seiji/.cargo/registry/src/github.com-1ecc6299db9ec823/upnp-client-0.1.7/src/discovery.rs:53:41
7: <async_stream::async_stream::AsyncStream<T,U> as futures_core::stream::Stream>::poll_next
at /home/seiji/.cargo/registry/src/github.com-1ecc6299db9ec823/async-stream-0.3.5/src/async_stream.rs:56:13
8: <core::pin::Pin<P> as futures_core::stream::Stream>::poll_next
at /home/seiji/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-core-0.3.28/src/stream.rs:120:9
9: futures_util::stream::stream::StreamExt::poll_next_unpin
at /home/seiji/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-util-0.3.28/src/stream/stream/mod.rs:1632:9
10: <futures_util::stream::stream::next::Next<St> as core::future::future::Future>::poll
at /home/seiji/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-util-0.3.28/src/stream/stream/next.rs:32:9
11: my_upnp_test::main::{{closure}}
at ./src/main.rs:17:44
...
This is the value of xml_root
when it crashes:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:WLANAccessPointDevice:1</deviceType>
<friendlyName>NETGEAR47B64C</friendlyName>
<manufacturer>NETGEAR</manufacturer>
<manufacturerURL>https://www.netgear.com</manufacturerURL>
<modelDescription>NETGEAR Dual Band Access Point</modelDescription>
<modelName>WAX214</modelName>
<modelNumber>WAX214</modelNumber>
<modelURL>https://www.netgear.com</modelURL>
<firmwareVersion>2.1.1.3</firmwareVersion>
<insightMode>0</insightMode>
<serialNumber>XXXXXXXXX</serialNumber>
<UDN>uuid:919ba4ec-ec93-490f-b0e3-80CC9C47B64C</UDN>
<presentationURL>http://xxxxxx/</presentationURL>
</device>
</root>
Tsiry Sandratraina commented
Thank you for your interest in the project, I'm very happy that it will help other people :-) I looked at the solution you proposed and it looks good to me