diff --git a/mmupnp/src/main/java/net/mm2d/upnp/internal/parser/ServiceParser.kt b/mmupnp/src/main/java/net/mm2d/upnp/internal/parser/ServiceParser.kt index 38ed250b..6a1b7ec5 100644 --- a/mmupnp/src/main/java/net/mm2d/upnp/internal/parser/ServiceParser.kt +++ b/mmupnp/src/main/java/net/mm2d/upnp/internal/parser/ServiceParser.kt @@ -28,6 +28,15 @@ import javax.xml.parsers.ParserConfigurationException * @author [大前良介 (OHMAE Ryosuke)](mailto:ryo@mm2d.net) */ internal object ServiceParser { + private val deviceTypesThatAllowIoException = setOf( + // Some DIAL devices return XML, so try the download. + // But some DIAL devices return 404, so allow it. + "urn:dial-multiscreen-org:device:dial:1", + // Basic devices are allowed to have no Service. + // However, some devices have a Service but return 404, so allow it. + "urn:schemas-upnp-org:device:Basic:1", + ) + /** * Download Description from SCPDURL and parse it. * @@ -49,11 +58,10 @@ internal object ServiceParser { val description = try { client.downloadString(url) } catch (e: IOException) { - if (deviceBuilder.getDeviceType() != "urn:dial-multiscreen-org:device:dial:1") { + if (deviceTypesThatAllowIoException.contains(deviceBuilder.getDeviceType())) { throw e } - // Some DIAL devices return XML, so try the download. - // But some DIAL devices return 404, so ignore them. + // Allow certain "ill-behaved" devices "" } if (description.isEmpty()) { diff --git a/mmupnp/src/test/java/net/mm2d/upnp/internal/manager/DeviceHolderTest.kt b/mmupnp/src/test/java/net/mm2d/upnp/internal/manager/DeviceHolderTest.kt index 92d1cd8a..63a01d2d 100644 --- a/mmupnp/src/test/java/net/mm2d/upnp/internal/manager/DeviceHolderTest.kt +++ b/mmupnp/src/test/java/net/mm2d/upnp/internal/manager/DeviceHolderTest.kt @@ -121,7 +121,7 @@ class DeviceHolderTest { holder.run() } - @Test(timeout = 20000L) + @Test(timeout = 30000L) fun expireDevice_時間経過後に削除される() { val expireListener: (Device) -> Unit = mockk(relaxed = true) val holder = DeviceHolder(taskExecutors, expireListener) diff --git a/mmupnp/src/test/java/net/mm2d/upnp/internal/manager/SubscribeServiceHolderTest.kt b/mmupnp/src/test/java/net/mm2d/upnp/internal/manager/SubscribeServiceHolderTest.kt index 580c3e07..f114b588 100644 --- a/mmupnp/src/test/java/net/mm2d/upnp/internal/manager/SubscribeServiceHolderTest.kt +++ b/mmupnp/src/test/java/net/mm2d/upnp/internal/manager/SubscribeServiceHolderTest.kt @@ -159,7 +159,7 @@ class SubscribeServiceHolderTest { subscribeHolder.stop() } - @Test(timeout = 10000L) + @Test(timeout = 30000L) fun renew_失敗したら削除される() { val id = "id" val service: Service = mockk(relaxed = true)