Code Monkey home page Code Monkey logo

jupnp's Introduction

GitHub Actions Build Status GitHub Actions Website Status CDDL-1.0 Maven Central Javadocs

Introduction

jUPnP is a Java UPnP library and has been forked from the no-longer maintained Cling project.

You can use jUPnP in your code by adding a dependency on it. See the Maven, Gradle etc. dependency examples on Maven Central.

Additional documentation is available on www.jupnp.org.

Build Instructions

Building and running the project is fairly easy if you follow the steps detailed below.

Prerequisites

The build infrastructure is based on Maven in order to make it as easy as possible to get up to speed. If you know Maven already then there won't be any surprises for you. If you have not worked with Maven yet, just follow the instructions and everything will miraculously work ;-)

What you need before you start:

Make sure that the "mvn" command is available on your path

Checkout

Checkout the source code from GitHub, e.g. by running:

git clone https://github.com/jupnp/jupnp.git

Building with Maven

To build jUPnP from the sources, Maven takes care of everything:

  • change into the jupnp directory (cd jupnp)
  • run mvn clean install to compile and package all sources

The build result will be available in the folder target.

To improve build times you can add the following options to the command:

Option Description
-DskipTests Skip the execution of tests
-Dmaven.test.skip=true Skip the compilation and execution of tests
-Dmaven.javadoc.skip=true Skip the creation of Javadoc JARs
-Dmaven.source.skip=true Skip the creation of source code JARs
-Dlicense.skip=true Skip the license header checks
-Dsort.skip=true Skip the POM sort order checks
-Dspotless.check.skip=true Skip the Spotless code style checks
-T 1C Build in parallel, using 1 thread per core

For example you can skip tests and the Spotless checks during development with:

mvn clean install -DskipTests -Dspotless.check.skip=true

Adding these options improves the build time but could hide problems in your code. Parallel builds are also less easy to debug and the increased load may cause timing sensitive tests to fail.

Code style

The code style used by jUPnP is available as an Eclipse XML configuration in codestyle.xml. To use this configuration while coding, import the code style configuration into an IDE such as Eclipse or IntelliJ.

To check if your code is following the code style run:

mvn spotless:check

To reformat your code so it conforms to the code style you can run:

mvn spotless:apply

Integration tests

The OSGi integration tests in the "itests" directory use specific versions of bundles in the runbundles of itest.bndrun. You may need to update these runbundles after creating a new jupnp release or when changing dependencies. Maven can resolve the runbundles automatically by executing:

mvn clean install -DwithResolver

Working with Eclipse

When using Eclipse ensure that the JDK is set via the -vm option in eclipse.ini. Otherwise m2e might fail to resolve the system scoped dependency to tools.jar.

jupnp's People

Contributors

adetaylor avatar afuechsel avatar amitjoy avatar benediktniehues avatar bergstr11 avatar geroyche avatar gubatron avatar hmerk avatar htreu avatar iilievdev avatar j-n-k avatar jochenhiller avatar joerg1985 avatar jomarmar avatar kaikreuzer avatar koush avatar kurisuke avatar lolodomo avatar maggu2810 avatar morph166955 avatar notlesh avatar sjsf avatar themarstonconnell avatar triller-telekom avatar velichkos avatar vitoni avatar wborn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jupnp's Issues

Problem with device of type upnp:rootdevice

I have a device that describes itself as being of type "upnp:rootdevice":

HTTP/1.1 200 OK
CACHE-CONTROL: max-age=300
DATE: Thu, 20 Oct 2016 14:33:10 GMT
EXT:
LOCATION: http://172.17.40.215:49152/description.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: 4d0d10f6-1dd2-11b2-965f-9d90905d85dd
SERVER: Linux/3.14.25, UPnP/1.0, Portable SDK for UPnP devices/1.6.19
X-User-Agent: redsonic
ST: upnp:rootdevice
USN: uuid:ee36a044-89ce-49e3-9a9e-7e154f9ca806::upnp:rootdevice
<root xmlns="urn:schemas-upnp-org:device-1-0">
    ...
  <device>
    <deviceType>upnp:rootdevice</deviceType>
    <UDN>uuid:ee36a044-89ce-49e3-9a9e-7e154f9ca806</UDN>
      ...
  </device>
    ...
</root>

However the framework always throws an exception: Regular parsing failed: Can't parse device type string (namespace/type/version): upnp:rootdevice.

I managed to catch the exception by extending the DeviceType.valueOf(String s) function with an extra if but I don't think this is the best solution.

How to fix this?

error through multiple servlet registrations

After changing the start levels of the OSGi bundles I got the following error:

2015-02-09 18:18:14,290 | ERROR | FelixStartLevel  | tpServiceServletContainerAdapter | 132 - org.jupnp - 2.0.0.201501291005 | Failed to register UPnP servlet!
org.osgi.service.http.NamespaceException: Servlet with alias already registered
    at org.apache.felix.http.base.internal.handler.HandlerRegistry.addServlet(HandlerRegistry.java:63)
    at org.apache.felix.http.base.internal.service.HttpServiceImpl.registerServlet(HttpServiceImpl.java:102)
    at org.jupnp.transport.impl.osgi.HttpServiceServletContainerAdapter.registerServlet(HttpServiceServletContainerAdapter.java:71)
    at org.jupnp.transport.impl.AsyncServletStreamServerImpl.init(AsyncServletStreamServerImpl.java:71)
    at org.jupnp.transport.RouterImpl.startAddressBasedTransports(RouterImpl.java:426)
    at org.jupnp.transport.RouterImpl.enable(RouterImpl.java:129)
    at org.jupnp.UpnpServiceImpl.startup(UpnpServiceImpl.java:201)
    at org.jupnp.UpnpServiceImpl.activate(UpnpServiceImpl.java:218)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_31]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_31]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_31]
    at java.lang.reflect.Method.invoke(Method.java:483)[:1.8.0_31]
    at org.apache.felix.scr.impl.helper.BaseMethod.invokeMethod(BaseMethod.java:231)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.helper.BaseMethod.access$500(BaseMethod.java:39)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.helper.BaseMethod$Resolved.invoke(BaseMethod.java:624)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.helper.BaseMethod.invoke(BaseMethod.java:508)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.helper.ActivateMethod.invoke(ActivateMethod.java:149)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.SingleComponentManager.createImplementationObject(SingleComponentManager.java:315)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.SingleComponentManager.createComponent(SingleComponentManager.java:127)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:871)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:838)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:777)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.framework.ServiceRegistrationImpl.getFactoryUnchecked(ServiceRegistrationImpl.java:320)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:231)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:327)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.Felix.getService(Felix.java:3576)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:468)[org.apache.felix.framework-4.4.1.jar:]
    at com.eclipsesource.jaxrs.publisher.internal.ResourceTracker.addingService(ResourceTracker.java:38)[117:com.eclipsesource.jaxrs.publisher:4.1.0.201407131319]
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932)[karaf-org.osgi.core.jar:]
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:864)[karaf-org.osgi.core.jar:]
    at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)[karaf-org.osgi.core.jar:]
    at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)[karaf-org.osgi.core.jar:]
    at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:894)[karaf-org.osgi.core.jar:]
    at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:943)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:794)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:544)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4445)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.Felix.registerService(Felix.java:3431)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:1003)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:992)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:134)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:1044)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:841)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:419)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.config.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:376)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.BundleComponentActivator.initialize(BundleComponentActivator.java:172)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.BundleComponentActivator.(BundleComponentActivator.java:120)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:258)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.Activator.access$000(Activator.java:45)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:185)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.utils.extender.AbstractExtender.createExtension(AbstractExtender.java:259)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.utils.extender.AbstractExtender.modifiedBundle(AbstractExtender.java:232)[81:org.apache.felix.scr:1.8.2]
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:479)[81:org.apache.felix.scr:1.8.2]
    at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:414)[81:org.apache.felix.scr:1.8.2]
    at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232)[karaf-org.osgi.core.jar:]
    at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:443)[81:org.apache.felix.scr:1.8.2]
    at org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:869)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:790)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:515)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4429)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2100)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1299)[org.apache.felix.framework-4.4.1.jar:]
    at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)[org.apache.felix.framework-4.4.1.jar:]
    at java.lang.Thread.run(Thread.java:745)[:1.8.0_31]

The init function of org.jupnp.transport.impl.AsyncServletStreamServerImpl log to info, so I set the jupnp log level to info and grep for upnp (ignore case) on startup.

2015-02-10 09:50:39,388 | INFO  | FelixStartLevel  | UpnpServiceImpl                  | 135 - org.jupnp - 2.0.0.201501291005 | Starting UPnP service...
2015-02-10 09:50:39,415 | INFO  | FelixStartLevel  | tpServiceServletContainerAdapter | 135 - org.jupnp - 2.0.0.201501291005 | Registering UPnP callback servlet as /upnpcallback
2015-02-10 09:50:39,419 | INFO  | FelixStartLevel  | tpServiceServletContainerAdapter | 135 - org.jupnp - 2.0.0.201501291005 | Registering UPnP callback servlet as /upnpcallback
2015-02-10 09:50:39,422 | ERROR | FelixStartLevel  | tpServiceServletContainerAdapter | 135 - org.jupnp - 2.0.0.201501291005 | Failed to register UPnP servlet!
        at org.jupnp.transport.impl.osgi.HttpServiceServletContainerAdapter.registerServlet(HttpServiceServletContainerAdapter.java:71)
        at org.jupnp.transport.impl.AsyncServletStreamServerImpl.init(AsyncServletStreamServerImpl.java:71)
        at org.jupnp.transport.RouterImpl.startAddressBasedTransports(RouterImpl.java:426)
        at org.jupnp.transport.RouterImpl.enable(RouterImpl.java:129)
        at org.jupnp.UpnpServiceImpl.startup(UpnpServiceImpl.java:201)
        at org.jupnp.UpnpServiceImpl.activate(UpnpServiceImpl.java:218)

So, the UPnP callback servlet is registered twice.

There are a lot of bundles, so I could be wrong, but the sonos and hue binding are using jupnp.
If the start level of jupnp is lower then the ESH / OH2 stuff, the error does not hit.
If the start level of jupnp, sonos, hue (and a lot of other stuff) is set to the same level the error hits.

So, I think it is not intendet to ignore error messages, is there a better way as changing the start level?

Major problems with library version 2.3

New version 2.3 of the library has broken the Eclipse Smarthome Sonos binding.
It looks like sometimes device.findService returns null and when it does not, service.getAction returns null.
The behaviour is random.

The ESH binding is working perfectly with library version 2.2.

ESH issue: eclipse-archived/smarthome#4531

Bug in DIDLObject.getFirstResource ()

public Res getFirstResource() { return getResources().isEmpty() ? getResources().get(0) : null; }

should be:

public Res getFirstResource() { return !getResources().isEmpty() ? getResources().get(0) : null; }

thx

Martin

Migrate from java.util.logging to slf4j logging API?

jUPnP uses (based on cling) java.util.logging as its primary logging API.
Some parts of jUPnP have yet been changed to use slf4j logging API.

Reading http://www.slf4j.org/legacy.html states:

NOTE ON PERFORMANCE Contrary to other bridging modules, namely jcl-over-slf4j and log4j-over-slf4j, which reimplement JCL and respectively log4j, the jul-to-slf4j module does not reimplement the java.util.logging because packages under the java.* namespace cannot be replaced. Instead, jul-to-slf4j translates LogRecord objects into their SLF4J equivalent. Please note this translation process incurs the cost of constructing a LogRecord instance regardless of whether the SLF4J logger is disabled for the given level or nor. Consequently, j.u.l. to SLF4J translation can seriously increase the cost of disabled logging statements (60 fold or 6000%) and measurably impact the performance of enabled log statements (20% overall increase). As of logback version 0.9.25, it is possible to completely eliminate the 60 fold translation overhead for disabled log statements with the help of LevelChangePropagator.

As maybe most users of jUPnP will use slf4j/logback/jul-slf4j bridge, shall we consider to change from java.util.logging completely to slf4j API?

Executing actions failing due to SOAPAction header

Executing actions seem to fail for certain remote devices due to the SOAPAction header being sent as Soapaction.

The problem was encountered while trying to open ports on an Internet Gateway Device. The remote device, a router in my case, responds with the router login page instead of a correct SOAP response. I pinpointed the problem by capturing the traffic with Wireshark and repeating it with a simple client socket in python. Changing the soapaction http header field name from Soapaction to SOAPAction fixed the issue and the router returned an expected response.

While according to the HTTP/1.1 standard this should not be an issue, as HTTP header field names are case-insensitive , the SOAP standard does not mention this case-insensitivity requirement. This means that manufacturers who implement SOAP according to the SOAP documentation may mistakenly require a case-sensitive header field name. Changing jUPnP to accommodate for this will increase the number of devices that will be supported, while not affecting the already supported devices.

My quick and dirty fix was to change the header field name value in the Type enum in org.jupnp.model.message.headerUpnpHeader from SOAPACTION("SOAPACTION", SoapActionHeader.class) to SOAPACTION("SOAPAction", SoapActionHeader.class) and skipping the header field name normalisation in org.jupnp.http.Headers by removing the contents of the normalize(String key) function. This fix is definitely not ideal, as I am not sure if it will break anything else in the library, but it seems to work correctly for me for now.

Is this an issue you would consider pursuing? And if so, what would be the ideal way to fix this?

NullPointerException

Hi,

I followed the instructions in the Docs (StartingApp.xhtml), I could compile the files (using javac) but I couldn't start the server or client. The error appears as follows:

fev 04, 2015 5:52:48 PM org.jupnp.DefaultUpnpServiceConfiguration$JUPnPExecutor afterExecute

Thread terminated org.jupnp.registry.LocalItems$4@d42cbc abruptly with exception: java.lang.RuntimeException: Fatal error
while executing protocol 'SendingNotificationAlive': java.lang.NullPointerException
fev 04, 2015 5:52:48 PM org.jupnp.DefaultUpnpServiceConfiguration$JUPnPExecutor afterExecute

Root cause: java.lang.NullPointerException
Exception in thread "jupnp-2" java.lang.RuntimeException: Fatal error while executing protocol 'SendingNotificationAlive': java.lang.Nu
llPointerException
        at org.jupnp.protocol.SendingAsync.run(SendingAsync.java:59)
        at org.jupnp.registry.LocalItems$4.run(LocalItems.java:297)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
        at org.jupnp.protocol.async.SendingNotification.execute(SendingNotification.java:62)
        at org.jupnp.protocol.async.SendingNotificationAlive.execute(SendingNotificationAlive.java:40)
        at org.jupnp.protocol.SendingAsync.run(SendingAsync.java:53)
        ... 4 more

Did I forgot something? Some library?

Maven Central

Any change to get released artifacts published on Maven Central?

NullPointerException in org.jupnp.registry.RegistryItems.getResources(RegistryItems.java:172)

We get a NPE in jUPnP, see stacktrack below.
This may be related due to starting/stopping the bundles within an OSGi framework.

See also https://github.com/openhab/jupnp/blob/master/bundles/org.jupnp/src/main/java/org/jupnp/registry/RegistryItems.java#L172
I assume that configuration/namespace is missing which results in a NPE.

#0  INFO    > Bundle with id #224 org.eclipse.smarthome.binding.hue, 0.8.0.201504271320 was started.
Exception in thread "jupnp-10" java.lang.NullPointerException
at org.jupnp.registry.RegistryItems.getResources(RegistryItems.java:172)
at org.jupnp.registry.RemoteItems.add(RemoteItems.java:69)
at org.jupnp.registry.RegistryImpl.addDevice(RegistryImpl.java:171)
at org.jupnp.protocol.RetrieveRemoteDescriptors.describe(RetrieveRemoteDescriptors.java:227)
at org.jupnp.protocol.RetrieveRemoteDescriptors.describe(RetrieveRemoteDescriptors.java:184)
at org.jupnp.protocol.RetrieveRemoteDescriptors.run(RetrieveRemoteDescriptors.java:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

UpnpService fails trying to create stream client

Background:Trying to write an Audio Control Point the code was able to find media servers but not media renderers, so I then tried using the jupnp vesion of the lib instead, but my first problem is that starting up the uPnpService fails

UpnpService upnpService = new UpnpServiceImpl(new DefaultUpnpServiceConfiguration());
upnpService.startup();

fails with

Exception in thread "main" java.lang.NullPointerException
	at org.jupnp.transport.impl.jetty.JettyTransportConfiguration.createStreamClient(JettyTransportConfiguration.java:26)
	at org.jupnp.DefaultUpnpServiceConfiguration.createStreamClient(DefaultUpnpServiceConfiguration.java:178)
	at org.jupnp.transport.RouterImpl.enable(RouterImpl.java:135)
	at org.jupnp.UpnpServiceImpl.startup(UpnpServiceImpl.java:258)

No more multicast datagrams received after a while.

I have developed a openHAB binding (upnpcontrol) that relies on the jupnp bundle. All works well in my development environment on a PC. When I run this on a RPi on OH 2.6, jupnp stops receiving messages after about 10 minutes of operation without any apparent message in the log.
The registery maintenance thread keeps on running, but the MultiCastReceiver loop seems to end.
Here is part of a TRACE log when the receiving ends.

2020-07-03 16:23:14.770 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Parsing all HTTP headers for known UPnP headers: 11
2020-07-03 16:23:14.771 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Content-encoding
2020-07-03 16:23:14.773 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'SERVER' with class: ServerHeader
2020-07-03 16:23:14.774 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (ServerHeader) 'UNKNOWN/UNKNOWN UPnP/1.0 UNKNOWN/UNKNOWN'
2020-07-03 16:23:14.776 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Access-control-allow-headers
2020-07-03 16:23:14.777 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Connection
2020-07-03 16:23:14.778 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Date
2020-07-03 16:23:14.779 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Transfer-encoding
2020-07-03 16:23:14.781 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Access-control-allow-methods
2020-07-03 16:23:14.782 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'CONTENT_TYPE' with class: ContentTypeHeader
2020-07-03 16:23:14.783 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (ContentTypeHeader) 'text/xml;charset="UTF-8"'
2020-07-03 16:23:14.785 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Access-control-allow-origin
2020-07-03 16:23:14.786 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Vary
2020-07-03 16:23:14.787 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Expires
2020-07-03 16:23:14.789 [TRACE] [org.jupnp.transport.spi.StreamClient] - HTTP response message contains text entity
2020-07-03 16:23:14.790 [TRACE] [org.jupnp.transport.spi.StreamClient] - Got HTTP response in 177 ms: (OutgoingActionRequestMessage) POST http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/connectionmanager/control
2020-07-03 16:23:14.791 [TRACE] [org.jupnp.transport.Router          ] - Releasing router lock: ReadLock
2020-07-03 16:23:14.793 [TRACE] [rg.jupnp.protocol.sync.SendingAction] - Received response for outgoing call, reading SOAP response body: (IncomingActionResponseMessage) 200 OK
2020-07-03 16:23:14.794 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading body of (IncomingActionResponseMessage) 200 OK for: (ActionInvocation) (Action, Arguments: 2) GetProtocolInfo
2020-07-03 16:23:14.795 [TRACE] [np.transport.spi.SOAPActionProcessor] - ===================================== SOAP BODY BEGIN ============================================
2020-07-03 16:23:14.797 [TRACE] [np.transport.spi.SOAPActionProcessor] - <?xml version="1.0" encoding="utf-8" standalone="yes"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><u:GetProtocolInfoResponse xmlns:u="urn:schemas-upnp-org:service:ConnectionManager:1"><Source>http-get:*:video/mpeg:*,http-get:*:video/mp4:*,http-get:*:video/vnd.dlna.mpeg-tts:*,http-get:*:video/avi:*,http-get:*:video/x-matroska:*,http-get:*:video/x-ms-wmv:*,http-get:*:video/wtv:*,http-get:*:audio/mpeg:*,http-get:*:audio/mp3:*,http-get:*:audio/mp4:*,http-get:*:audio/x-ms-wma:*,http-get:*:audio/wav:*,http-get:*:audio/L16:*,http-get:*:image/jpeg:*,http-get:*:image/png:*,http-get:*:image/gif:*,http-get:*:image/tiff:*</Source><Sink /></u:GetProtocolInfoResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
2020-07-03 16:23:14.798 [TRACE] [np.transport.spi.SOAPActionProcessor] - -===================================== SOAP BODY END ============================================
2020-07-03 16:23:14.802 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading action response element: GetProtocolInfoResponse
2020-07-03 16:23:14.803 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading action argument: Source
2020-07-03 16:23:14.805 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading action argument: Sink
2020-07-03 16:23:14.807 [DEBUG] [control.internal.handler.UpnpHandler] - Upnp device Jellyfin - MARTINE-PC invoke upnp action GetProtocolInfo on service ConnectionManager with inputs {}
2020-07-03 16:23:14.808 [DEBUG] [control.internal.handler.UpnpHandler] - Upnp device Jellyfin - MARTINE-PC invoke upnp action GetProtocolInfo on service ConnectionManager reply {Source=http-get:*:video/mpeg:*,http-get:*:video/mp4:*,http-get:*:video/vnd.dlna.mpeg-tts:*,http-get:*:video/avi:*,http-get:*:video/x-matroska:*,http-get:*:video/x-ms-wmv:*,http-get:*:video/wtv:*,http-get:*:audio/mpeg:*,http-get:*:audio/mp3:*,http-get:*:audio/mp4:*,http-get:*:audio/x-ms-wma:*,http-get:*:audio/wav:*,http-get:*:audio/L16:*,http-get:*:image/jpeg:*,http-get:*:image/png:*,http-get:*:image/gif:*,http-get:*:image/tiff:*}
2020-07-03 16:23:14.810 [DEBUG] [l.internal.handler.UpnpServerHandler] - Upnp device Jellyfin - MARTINE-PC received variable Source with value http-get:*:video/mpeg:*,http-get:*:video/mp4:*,http-get:*:video/vnd.dlna.mpeg-tts:*,http-get:*:video/avi:*,http-get:*:video/x-matroska:*,http-get:*:video/x-ms-wmv:*,http-get:*:video/wtv:*,http-get:*:audio/mpeg:*,http-get:*:audio/mp3:*,http-get:*:audio/mp4:*,http-get:*:audio/x-ms-wma:*,http-get:*:audio/wav:*,http-get:*:audio/L16:*,http-get:*:image/jpeg:*,http-get:*:image/png:*,http-get:*:image/gif:*,http-get:*:image/tiff:* from service ConnectionManager
2020-07-03 16:23:15.237 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:15.239 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1611
2020-07-03 16:23:15.240 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1611
2020-07-03 16:23:15.242 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 692
2020-07-03 16:23:15.243 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1592
2020-07-03 16:23:15.245 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1595
2020-07-03 16:23:15.247 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 95
2020-07-03 16:23:15.248 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1799
2020-07-03 16:23:15.250 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 691
2020-07-03 16:23:15.252 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 691
2020-07-03 16:23:15.253 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 692
2020-07-03 16:23:15.255 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1592
2020-07-03 16:23:15.257 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1589
2020-07-03 16:23:15.259 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1708
2020-07-03 16:23:15.261 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0
2020-07-03 16:23:15.278 [DEBUG] [ikoHomeControlBridgeDiscoveryService] - Niko Home Control: discovery broadcast on 192.168.0.255
2020-07-03 16:23:15.284 [DEBUG] [nal.protocol.NikoHomeControlDiscover] - Niko Home Control: IP address is /192.168.0.187, unique ID is 443b00ee751d
2020-07-03 16:23:15.286 [DEBUG] [ikoHomeControlBridgeDiscoveryService] - Niko Home Control: NHC II bridge found at /192.168.0.187
2020-07-03 16:23:15.773 [DEBUG] [upnp.transport.spi.MulticastReceiver] - UDP datagram received from: 192.168.0.20:61292 on local interface: br0 and address: 192.168.0.10
2020-07-03 16:23:15.777 [TRACE] [upnp.transport.spi.DatagramProcessor] - ===================================== DATAGRAM BEGIN ============================================
2020-07-03 16:23:15.781 [TRACE] [upnp.transport.spi.DatagramProcessor] - M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1
Man: "ssdp:discover"
MX: 3

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
2020-07-03 16:23:15.784 [TRACE] [upnp.transport.spi.DatagramProcessor] - -===================================== DATAGRAM END =============================================
2020-07-03 16:23:15.787 [TRACE] [org.jupnp.protocol.ProtocolFactory  ] - Creating protocol for incoming asynchronous: (IncomingDatagramMessage) M-SEARCH
2020-07-03 16:23:15.790 [DEBUG] [org.jupnp.transport.Router          ] - Received asynchronous message: (IncomingDatagramMessage) M-SEARCH
2020-07-03 16:23:15.792 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Parsing all HTTP headers for known UPnP headers: 4
2020-07-03 16:23:15.795 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: STAllHeader
2020-07-03 16:23:15.798 [TRACE] [upnp.model.message.header.UpnpHeader] - Invalid header value for tested type: STAllHeader - Invalid ST header value (not ALL): urn:schemas-upnp-org:device:InternetGatewayDevice:1
2020-07-03 16:23:15.800 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: RootDeviceHeader
2020-07-03 16:23:15.803 [TRACE] [upnp.model.message.header.UpnpHeader] - Invalid header value for tested type: RootDeviceHeader - Invalid root device NT header value: urn:schemas-upnp-org:device:InternetGatewayDevice:1
2020-07-03 16:23:15.804 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: UDADeviceTypeHeader
2020-07-03 16:23:15.807 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (UDADeviceTypeHeader) 'urn:schemas-upnp-org:device:InternetGatewayDevice:1'
2020-07-03 16:23:15.809 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'HOST' with class: HostHeader
2020-07-03 16:23:15.812 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (HostHeader) '239.255.255.250:1900'
2020-07-03 16:23:15.816 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'MX' with class: MXHeader
2020-07-03 16:23:15.818 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (MXHeader) '3'
2020-07-03 16:23:15.820 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'MAN' with class: MANHeader
2020-07-03 16:23:15.822 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (MANHeader) 'ssdp:discover'
2020-07-03 16:23:15.824 [TRACE] [org.jupnp.transport.Router          ] - Trying to obtain lock with timeout milliseconds '6000': ReadLock
2020-07-03 16:23:15.826 [TRACE] [org.jupnp.transport.Router          ] - Acquired router lock: ReadLock
2020-07-03 16:23:15.829 [TRACE] [org.jupnp.transport.Router          ] - Releasing router lock: ReadLock
2020-07-03 16:23:15.830 [TRACE] [jupnp.protocol.async.ReceivingSearch] - Responding to device type search: urn:schemas-upnp-org:device:InternetGatewayDevice:1
2020-07-03 16:23:15.840 [TRACE] [org.jupnp.transport.spi.StreamClient] - Received HTTP response: OK
2020-07-03 16:23:15.843 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Parsing all HTTP headers for known UPnP headers: 11
2020-07-03 16:23:15.845 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Content-encoding
2020-07-03 16:23:15.848 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'SERVER' with class: ServerHeader
2020-07-03 16:23:15.851 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (ServerHeader) 'UNKNOWN/UNKNOWN UPnP/1.0 UNKNOWN/UNKNOWN'
2020-07-03 16:23:15.852 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Access-control-allow-headers
2020-07-03 16:23:15.853 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Connection
2020-07-03 16:23:15.854 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Date
2020-07-03 16:23:15.856 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Transfer-encoding
2020-07-03 16:23:15.857 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Access-control-allow-methods
2020-07-03 16:23:15.859 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'CONTENT_TYPE' with class: ContentTypeHeader
2020-07-03 16:23:15.860 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (ContentTypeHeader) 'text/xml;charset="UTF-8"'
2020-07-03 16:23:15.862 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Access-control-allow-origin
2020-07-03 16:23:15.863 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Vary
2020-07-03 16:23:15.864 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Ignoring non-UPNP HTTP header: Expires
2020-07-03 16:23:15.865 [TRACE] [org.jupnp.transport.spi.StreamClient] - HTTP response message contains text entity
2020-07-03 16:23:15.867 [TRACE] [org.jupnp.transport.spi.StreamClient] - Got HTTP response in 1241 ms: (OutgoingActionRequestMessage) POST http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/contentdirectory/control
2020-07-03 16:23:15.868 [TRACE] [org.jupnp.transport.Router          ] - Releasing router lock: ReadLock
2020-07-03 16:23:15.870 [TRACE] [rg.jupnp.protocol.sync.SendingAction] - Received response for outgoing call, reading SOAP response body: (IncomingActionResponseMessage) 200 OK
2020-07-03 16:23:15.872 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading body of (IncomingActionResponseMessage) 200 OK for: (ActionInvocation) (Action, Arguments: 10) Browse
2020-07-03 16:23:15.873 [TRACE] [np.transport.spi.SOAPActionProcessor] - ===================================== SOAP BODY BEGIN ============================================
2020-07-03 16:23:15.875 [TRACE] [np.transport.spi.SOAPActionProcessor] - <?xml version="1.0" encoding="utf-8" standalone="yes"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><u:BrowseResponse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1"><Result>&lt;DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"&gt;&lt;container restricted="1" searchable="1" childCount="6" id="db4c1708cbb5dd1676284a40f2950aba" parentID="e9d5075a555c1cbc394eec4cef295274"&gt;&lt;dc:title&gt;Films&lt;/dc:title&gt;&lt;upnp:class&gt;object.container.storageFolder&lt;/upnp:class&gt;&lt;/container&gt;&lt;container restricted="1" searchable="1" childCount="10" id="7e64e319657a9516ec78490da03edccb" parentID="e9d5075a555c1cbc394eec4cef295274"&gt;&lt;dc:title&gt;Music&lt;/dc:title&gt;&lt;upnp:class&gt;object.container.storageFolder&lt;/upnp:class&gt;&lt;upnp:albumArtURI dlna:profileID="JPEG_SM"&gt;http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/480/480/0/0&lt;/upnp:albumArtURI&gt;&lt;upnp:icon&gt;http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/48/48/0/0&lt;/upnp:icon&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/4096/4096/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/1024/768/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360"&gt;http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/640/480/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/png/4096/4096/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90"&gt;http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/png/160/160/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90"&gt;http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/160/160/0/0&lt;/res&gt;&lt;/container&gt;&lt;container restricted="1" searchable="1" childCount="472" id="52f1cc5cfe5ba8c9452cebe7bca9e026" parentID="e9d5075a555c1cbc394eec4cef295274"&gt;&lt;dc:title&gt;Photos&lt;/dc:title&gt;&lt;upnp:class&gt;object.container.storageFolder&lt;/upnp:class&gt;&lt;upnp:albumArtURI dlna:profileID="JPEG_SM"&gt;http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/480/480/0/0&lt;/upnp:albumArtURI&gt;&lt;upnp:icon&gt;http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/48/48/0/0&lt;/upnp:icon&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/4096/4096/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/1024/768/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360"&gt;http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/640/480/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/png/4096/4096/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90"&gt;http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/png/160/160/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90"&gt;http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/160/160/0/0&lt;/res&gt;&lt;/container&gt;&lt;container restricted="1" searchable="1" childCount="6" id="09790ec4c9712e6dfb0961f34680b352" parentID="e9d5075a555c1cbc394eec4cef295274"&gt;&lt;dc:title&gt;Videos&lt;/dc:title&gt;&lt;upnp:class&gt;object.container.storageFolder&lt;/upnp:class&gt;&lt;upnp:albumArtURI dlna:profileID="JPEG_SM"&gt;http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/480/480/0/0&lt;/upnp:albumArtURI&gt;&lt;upnp:icon&gt;http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/48/48/0/0&lt;/upnp:icon&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/4096/4096/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/1024/768/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360"&gt;http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/640/480/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540"&gt;http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/png/4096/4096/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90"&gt;http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/png/160/160/0/0&lt;/res&gt;&lt;res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90"&gt;http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/160/160/0/0&lt;/res&gt;&lt;/container&gt;&lt;/DIDL-Lite&gt;</Result><NumberReturned>4</NumberReturned><TotalMatches>4</TotalMatches><UpdateID>2219</UpdateID></u:BrowseResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
2020-07-03 16:23:15.877 [TRACE] [np.transport.spi.SOAPActionProcessor] - -===================================== SOAP BODY END ============================================
2020-07-03 16:23:15.884 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading action response element: BrowseResponse
2020-07-03 16:23:15.886 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading action argument: Result
2020-07-03 16:23:15.890 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading action argument: NumberReturned
2020-07-03 16:23:15.891 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading action argument: TotalMatches
2020-07-03 16:23:15.893 [TRACE] [np.transport.spi.SOAPActionProcessor] - Reading action argument: UpdateID
2020-07-03 16:23:15.894 [DEBUG] [control.internal.handler.UpnpHandler] - Upnp device Jellyfin - MARTINE-PC invoke upnp action Browse on service ContentDirectory with inputs {SortCriteria=+dc:title, ObjectID=0, Filter=*, BrowseFlag=BrowseDirectChildren, RequestedCount=0, StartingIndex=0}
2020-07-03 16:23:15.896 [DEBUG] [control.internal.handler.UpnpHandler] - Upnp device Jellyfin - MARTINE-PC invoke upnp action Browse on service ContentDirectory reply {TotalMatches=4, UpdateID=2219, NumberReturned=4, Result=<DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><container restricted="1" searchable="1" childCount="6" id="db4c1708cbb5dd1676284a40f2950aba" parentID="e9d5075a555c1cbc394eec4cef295274"><dc:title>Films</dc:title><upnp:class>object.container.storageFolder</upnp:class></container><container restricted="1" searchable="1" childCount="10" id="7e64e319657a9516ec78490da03edccb" parentID="e9d5075a555c1cbc394eec4cef295274"><dc:title>Music</dc:title><upnp:class>object.container.storageFolder</upnp:class><upnp:albumArtURI dlna:profileID="JPEG_SM">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/480/480/0/0</upnp:albumArtURI><upnp:icon>http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/48/48/0/0</upnp:icon><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/4096/4096/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/1024/768/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/640/480/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/png/4096/4096/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/png/160/160/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/160/160/0/0</res></container><container restricted="1" searchable="1" childCount="472" id="52f1cc5cfe5ba8c9452cebe7bca9e026" parentID="e9d5075a555c1cbc394eec4cef295274"><dc:title>Photos</dc:title><upnp:class>object.container.storageFolder</upnp:class><upnp:albumArtURI dlna:profileID="JPEG_SM">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/480/480/0/0</upnp:albumArtURI><upnp:icon>http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/48/48/0/0</upnp:icon><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/4096/4096/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/1024/768/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/640/480/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/png/4096/4096/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/png/160/160/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/160/160/0/0</res></container><container restricted="1" searchable="1" childCount="6" id="09790ec4c9712e6dfb0961f34680b352" parentID="e9d5075a555c1cbc394eec4cef295274"><dc:title>Videos</dc:title><upnp:class>object.container.storageFolder</upnp:class><upnp:albumArtURI dlna:profileID="JPEG_SM">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/480/480/0/0</upnp:albumArtURI><upnp:icon>http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/48/48/0/0</upnp:icon><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/4096/4096/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/1024/768/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/640/480/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/png/4096/4096/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/png/160/160/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/160/160/0/0</res></container></DIDL-Lite>}
2020-07-03 16:23:15.898 [DEBUG] [l.internal.handler.UpnpServerHandler] - Upnp device Jellyfin - MARTINE-PC received variable TotalMatches with value 4 from service ContentDirectory
2020-07-03 16:23:15.900 [DEBUG] [l.internal.handler.UpnpServerHandler] - Upnp device Jellyfin - MARTINE-PC received variable UpdateID with value 2219 from service ContentDirectory
2020-07-03 16:23:15.902 [DEBUG] [l.internal.handler.UpnpServerHandler] - Upnp device Jellyfin - MARTINE-PC received variable NumberReturned with value 4 from service ContentDirectory
2020-07-03 16:23:15.903 [DEBUG] [l.internal.handler.UpnpServerHandler] - Upnp device Jellyfin - MARTINE-PC received variable Result with value <DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"><container restricted="1" searchable="1" childCount="6" id="db4c1708cbb5dd1676284a40f2950aba" parentID="e9d5075a555c1cbc394eec4cef295274"><dc:title>Films</dc:title><upnp:class>object.container.storageFolder</upnp:class></container><container restricted="1" searchable="1" childCount="10" id="7e64e319657a9516ec78490da03edccb" parentID="e9d5075a555c1cbc394eec4cef295274"><dc:title>Music</dc:title><upnp:class>object.container.storageFolder</upnp:class><upnp:albumArtURI dlna:profileID="JPEG_SM">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/480/480/0/0</upnp:albumArtURI><upnp:icon>http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/48/48/0/0</upnp:icon><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/4096/4096/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/1024/768/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/640/480/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/png/4096/4096/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/png/160/160/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/7e64e319657a9516ec78490da03edccb/Images/Primary/0/68a1a4eab798cc3dc0347ce09232ccc1/jpg/160/160/0/0</res></container><container restricted="1" searchable="1" childCount="472" id="52f1cc5cfe5ba8c9452cebe7bca9e026" parentID="e9d5075a555c1cbc394eec4cef295274"><dc:title>Photos</dc:title><upnp:class>object.container.storageFolder</upnp:class><upnp:albumArtURI dlna:profileID="JPEG_SM">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/480/480/0/0</upnp:albumArtURI><upnp:icon>http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/48/48/0/0</upnp:icon><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/4096/4096/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/1024/768/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/640/480/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/png/4096/4096/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/png/160/160/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/52f1cc5cfe5ba8c9452cebe7bca9e026/Images/Primary/0/70f9f8b0cd0d93756ea6edf62fb208e2/jpg/160/160/0/0</res></container><container restricted="1" searchable="1" childCount="6" id="09790ec4c9712e6dfb0961f34680b352" parentID="e9d5075a555c1cbc394eec4cef295274"><dc:title>Videos</dc:title><upnp:class>object.container.storageFolder</upnp:class><upnp:albumArtURI dlna:profileID="JPEG_SM">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/480/480/0/0</upnp:albumArtURI><upnp:icon>http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/48/48/0/0</upnp:icon><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/4096/4096/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/1024/768/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="640x360">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/640/480/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_LRG;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="960x540">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/png/4096/4096/0/0</res><res protocolInfo="http-get:*:image/png:DLNA.ORG_PN=PNG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/png/160/160/0/0</res><res protocolInfo="http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=00D00000000000000000000000000000" resolution="160x90">http://192.168.0.20:8096/Items/09790ec4c9712e6dfb0961f34680b352/Images/Primary/0/333c84c8bb781f67b72354ec7224e537/jpg/160/160/0/0</res></container></DIDL-Lite> from service ContentDirectory
2020-07-03 16:23:15.930 [DEBUG] [l.internal.handler.UpnpServerHandler] - Navigating to node 0 on server Jellyfin - MARTINE-PC
2020-07-03 16:23:15.932 [DEBUG] [l.internal.handler.UpnpServerHandler] - Filtering content on server Jellyfin - MARTINE-PC: false
2020-07-03 16:23:15.939 [DEBUG] [l.internal.handler.UpnpServerHandler] - UP added to selection list on server Jellyfin - MARTINE-PC
2020-07-03 16:23:15.944 [DEBUG] [l.internal.handler.UpnpServerHandler] - 5 entries added to selection list on server Jellyfin - MARTINE-PC
2020-07-03 16:23:15.951 [DEBUG] [pnpDynamicCommandDescriptionProvider] - Adding command description for channel upnpcontrol:upnpserver:d7d5b2abfeb24a908dbbf721a796b99d:browse
2020-07-03 16:23:15.953 [WARN ] [l.internal.handler.UpnpServerHandler] - Cannot serve media from server Jellyfin - MARTINE-PC, no renderer selected
2020-07-03 16:23:16.263 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:16.264 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1610
2020-07-03 16:23:16.265 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1610
2020-07-03 16:23:16.266 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 691
2020-07-03 16:23:16.267 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1591
2020-07-03 16:23:16.269 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1594
2020-07-03 16:23:16.270 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 94
2020-07-03 16:23:16.271 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1798
2020-07-03 16:23:16.272 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 690
2020-07-03 16:23:16.273 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 690
2020-07-03 16:23:16.275 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 691
2020-07-03 16:23:16.276 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1591
2020-07-03 16:23:16.277 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1588
2020-07-03 16:23:16.278 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1707
2020-07-03 16:23:16.280 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0
2020-07-03 16:23:17.281 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:17.283 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1609
2020-07-03 16:23:17.284 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1609
2020-07-03 16:23:17.286 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 690
2020-07-03 16:23:17.288 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1590
2020-07-03 16:23:17.290 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1593
2020-07-03 16:23:17.292 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 93
2020-07-03 16:23:17.294 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1797
2020-07-03 16:23:17.295 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 689
2020-07-03 16:23:17.297 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 689
2020-07-03 16:23:17.299 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 690
2020-07-03 16:23:17.301 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1590
2020-07-03 16:23:17.303 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1587
2020-07-03 16:23:17.305 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1706
2020-07-03 16:23:17.307 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0
2020-07-03 16:23:18.309 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:18.310 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1608
2020-07-03 16:23:18.312 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1608
2020-07-03 16:23:18.314 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 689
2020-07-03 16:23:18.316 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1589
2020-07-03 16:23:18.318 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1592
2020-07-03 16:23:18.320 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 92
2020-07-03 16:23:18.322 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1796
2020-07-03 16:23:18.324 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 688
2020-07-03 16:23:18.326 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 688
2020-07-03 16:23:18.328 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 689
2020-07-03 16:23:18.330 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1589
2020-07-03 16:23:18.332 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1586
2020-07-03 16:23:18.334 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1705
2020-07-03 16:23:18.336 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0
2020-07-03 16:23:18.786 [DEBUG] [upnp.transport.spi.MulticastReceiver] - UDP datagram received from: 192.168.0.20:61292 on local interface: br0 and address: 192.168.0.10
2020-07-03 16:23:18.787 [TRACE] [upnp.transport.spi.DatagramProcessor] - ===================================== DATAGRAM BEGIN ============================================
2020-07-03 16:23:18.790 [TRACE] [upnp.transport.spi.DatagramProcessor] - M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1
Man: "ssdp:discover"
MX: 3

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
2020-07-03 16:23:18.792 [TRACE] [upnp.transport.spi.DatagramProcessor] - -===================================== DATAGRAM END =============================================
2020-07-03 16:23:18.795 [TRACE] [org.jupnp.protocol.ProtocolFactory  ] - Creating protocol for incoming asynchronous: (IncomingDatagramMessage) M-SEARCH
2020-07-03 16:23:18.798 [DEBUG] [org.jupnp.transport.Router          ] - Received asynchronous message: (IncomingDatagramMessage) M-SEARCH
2020-07-03 16:23:18.799 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Parsing all HTTP headers for known UPnP headers: 4
2020-07-03 16:23:18.802 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: STAllHeader
2020-07-03 16:23:18.804 [TRACE] [upnp.model.message.header.UpnpHeader] - Invalid header value for tested type: STAllHeader - Invalid ST header value (not ALL): urn:schemas-upnp-org:device:InternetGatewayDevice:1
2020-07-03 16:23:18.805 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: RootDeviceHeader
2020-07-03 16:23:18.808 [TRACE] [upnp.model.message.header.UpnpHeader] - Invalid header value for tested type: RootDeviceHeader - Invalid root device NT header value: urn:schemas-upnp-org:device:InternetGatewayDevice:1
2020-07-03 16:23:18.809 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'ST' with class: UDADeviceTypeHeader
2020-07-03 16:23:18.812 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (UDADeviceTypeHeader) 'urn:schemas-upnp-org:device:InternetGatewayDevice:1'
2020-07-03 16:23:18.813 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'HOST' with class: HostHeader
2020-07-03 16:23:18.816 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (HostHeader) '239.255.255.250:1900'
2020-07-03 16:23:18.818 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'MX' with class: MXHeader
2020-07-03 16:23:18.820 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (MXHeader) '3'
2020-07-03 16:23:18.822 [TRACE] [upnp.model.message.header.UpnpHeader] - Trying to parse 'MAN' with class: MANHeader
2020-07-03 16:23:18.824 [TRACE] [org.jupnp.model.message.UpnpHeaders ] - Adding parsed header: (MANHeader) 'ssdp:discover'
2020-07-03 16:23:18.826 [TRACE] [org.jupnp.transport.Router          ] - Trying to obtain lock with timeout milliseconds '6000': ReadLock
2020-07-03 16:23:18.828 [TRACE] [org.jupnp.transport.Router          ] - Acquired router lock: ReadLock
2020-07-03 16:23:18.831 [TRACE] [org.jupnp.transport.Router          ] - Releasing router lock: ReadLock
2020-07-03 16:23:18.832 [TRACE] [jupnp.protocol.async.ReceivingSearch] - Responding to device type search: urn:schemas-upnp-org:device:InternetGatewayDevice:1
2020-07-03 16:23:19.338 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:19.339 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1607
2020-07-03 16:23:19.341 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1607
2020-07-03 16:23:19.343 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 688
2020-07-03 16:23:19.345 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1588
2020-07-03 16:23:19.347 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1591
2020-07-03 16:23:19.348 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 91
2020-07-03 16:23:19.350 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1795
2020-07-03 16:23:19.352 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 687
2020-07-03 16:23:19.354 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 687
2020-07-03 16:23:19.356 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 688
2020-07-03 16:23:19.358 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1588
2020-07-03 16:23:19.360 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1585
2020-07-03 16:23:19.361 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1704
2020-07-03 16:23:19.363 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0
2020-07-03 16:23:20.365 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:20.366 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1606
2020-07-03 16:23:20.368 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1606
2020-07-03 16:23:20.369 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 687
2020-07-03 16:23:20.370 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1587
2020-07-03 16:23:20.371 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1590
2020-07-03 16:23:20.373 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 90
2020-07-03 16:23:20.374 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1794
2020-07-03 16:23:20.375 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 686
2020-07-03 16:23:20.376 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 686
2020-07-03 16:23:20.378 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 687
2020-07-03 16:23:20.379 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1587
2020-07-03 16:23:20.380 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1584
2020-07-03 16:23:20.381 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1703
2020-07-03 16:23:20.383 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0
2020-07-03 16:23:21.384 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:21.385 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1605
2020-07-03 16:23:21.387 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1605
2020-07-03 16:23:21.388 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 686
2020-07-03 16:23:21.389 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1586
2020-07-03 16:23:21.390 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1589
2020-07-03 16:23:21.391 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 89
2020-07-03 16:23:21.392 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1793
2020-07-03 16:23:21.393 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 685
2020-07-03 16:23:21.395 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 685
2020-07-03 16:23:21.396 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 686
2020-07-03 16:23:21.401 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1586
2020-07-03 16:23:21.403 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1583
2020-07-03 16:23:21.405 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1702
2020-07-03 16:23:21.408 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0
2020-07-03 16:23:22.410 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:22.412 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1604
2020-07-03 16:23:22.414 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1604
2020-07-03 16:23:22.417 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 685
2020-07-03 16:23:22.421 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1585
2020-07-03 16:23:22.425 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1588
2020-07-03 16:23:22.428 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 88
2020-07-03 16:23:22.432 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1792
2020-07-03 16:23:22.435 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 684
2020-07-03 16:23:22.439 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 684
2020-07-03 16:23:22.442 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 685
2020-07-03 16:23:22.445 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1585
2020-07-03 16:23:22.447 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1582
2020-07-03 16:23:22.449 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1701
2020-07-03 16:23:22.451 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0
2020-07-03 16:23:23.453 [TRACE] [org.jupnp.registry.Registry         ] - Maintaining registry...
2020-07-03 16:23:23.455 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F7, Descriptor: http://192.168.0.4:49153/description.xml, Root: true' expires in seconds: 1603
2020-07-03 16:23:23.457 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:27a9a0bc-149d-4dd5-ab68-64D1A341C6F6, Descriptor: http://192.168.0.4:49152/description.xml, Root: true' expires in seconds: 1603
2020-07-03 16:23:23.458 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:789f4e0a-bc6c-4c5d-8536-8e0832bdd390, Root: true' expires in seconds: 684
2020-07-03 16:23:23.460 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:4c29b9ce-6d69-44c4-b3ed-140e04be8277, Root: true' expires in seconds: 1584
2020-07-03 16:23:23.461 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:0f522f00-8784-5dad-853b-6bb4da206f5d, Descriptor: http://192.168.0.3:49152/wps_device.xml, Root: true' expires in seconds: 1587
2020-07-03 16:23:23.463 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:A37351C5-8521-4c24-A43E-342CC4901877, Descriptor: http://192.168.0.1:5000/rootDesc.xml, Root: true' expires in seconds: 87
2020-07-03 16:23:23.464 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:d7d5b2abfeb24a908dbbf721a796b99d, Descriptor: http://192.168.0.20:8096/dlna/d7d5b2abfeb24a908dbbf721a796b99d/description.xml, Root: true' expires in seconds: 1791
2020-07-03 16:23:23.466 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:ad0dd38f-8caa-4638-9779-880677d87446, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:ad0dd38f-8caa-4638-9779-880677d87446, Root: true' expires in seconds: 683
2020-07-03 16:23:23.468 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:2a0a14d9-088b-4949-b461-25253eab38f8, Root: true' expires in seconds: 683
2020-07-03 16:23:23.469 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Descriptor: http://192.168.0.20:2869/upnphost/udhisapi.dll?content=uuid:9cf8c448-8312-4bf2-a748-906d1530aa09, Root: true' expires in seconds: 684
2020-07-03 16:23:23.471 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:176cf920-1dd2-11b2-bfcb-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_176cf920-1dd2-11b2-bfcb-6a63598e4c33/00, Root: true' expires in seconds: 1584
2020-07-03 16:23:23.473 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:1482d180-1dd2-11b2-864b-6a63598e4c33, Descriptor: http://192.168.0.124:8080/upnpdev/devc/uuid_1482d180-1dd2-11b2-864b-6a63598e4c33/00, Root: true' expires in seconds: 1581
2020-07-03 16:23:23.474 [TRACE] [org.jupnp.registry.Registry         ] - Device '(RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:a9d3317c-0090-a9c6-31e1-7b15ce1a531a, Descriptor: http://192.168.0.210:10184/, Root: true' expires in seconds: 1700
2020-07-03 16:23:23.476 [TRACE] [org.jupnp.registry.Registry         ] - Executing pending operations: 0

Nothing is read anymore until I restart the jupnp bundle.

Looking at the code, I believe something is happening here, that is being catched in the catch all Exception. Nothing is done with that afterwards and nothing is logged, making it difficult to analyze.

Logs flooded with warnings about wrong device type string

We saw these messages flooding log files.
We need to check why this returned values can NOT be parser.

Either we can fix it, or we should consider to use the SpecificationViolationReporter too, as the device will always send same garbage.

2018-05-07T02:27:13.443+0200   137  WARNING        [symbolicName=org.jupnp, className=org.jupnp.binding.xml.RecoveringUDA10DeviceDescriptorBinderImpl] - Removing leading garbage didn't work: Can't parse device type string (namespace/type/version): upnp:acn-com:device:UTCLCDI:1
2018-05-07T02:27:13.653+0200   137  WARNING        [symbolicName=org.jupnp, className=org.jupnp.binding.xml.RecoveringUDA10DeviceDescriptorBinderImpl] - Regular parsing failed: Can't parse device type string (namespace/type/version): upnp:acn-com:device:UTCLCDI:1
2018-05-07T02:27:13.723+0200   137  WARNING        [symbolicName=org.jupnp, className=org.jupnp.binding.xml.RecoveringUDA10DeviceDescriptorBinderImpl] - Removing leading garbage didn't work: Can't parse device type string (namespace/type/version): upnp:acn-com:device:UTCLCDI:1
2018-05-07T02:27:14.133+0200   137  WARNING        [symbolicName=org.jupnp, className=org.jupnp.binding.xml.RecoveringUDA10DeviceDescriptorBinderImpl] - Regular parsing failed: Can't parse device type string (namespace/type/version): upnp:acn-com:device:UTCTrigger:1
2018-05-07T02:27:14.253+0200   137  WARNING        [symbolicName=org.jupnp, className=org.jupnp.binding.xml.RecoveringUDA10DeviceDescriptorBinderImpl] - Removing leading garbage didn't work: Can't parse device type string (namespace/type/version): upnp:acn-com:device:UTCTrigger:1

Maven repo: missing artifacts

Hello,
I want to use jUPnP in a maven project.

The org.jupnp POM refers to a parent that could not be found on e.g. jCenter (https://jcenter.bintray.com/org/jupnp/)

<parent>
    <groupId>org.jupnp.pom</groupId>
    <artifactId>bundles</artifactId>
    <version>2.1.0</version>
</parent>
...
Downloading: https://jcenter.bintray.com/org/jupnp/pom/bundles/2.1.0/bundles-2.1.0.pom
Downloading: https://repo.maven.apache.org/maven2/org/jupnp/pom/bundles/2.1.0/bundles-2.1.0.pom
...
[ERROR] Failed to execute goal on project ...: Could not resolve dependencies for project ...: Failed to collect dependencies at org.jupnp:org.jupnp:jar:2.1.0: Failed to read artifact descriptor for org.jupnp:org.jupnp:jar:2.1.0: Could not find artifact org.jupnp.pom:bundles:pom:2.1.0 in ... -> [Help 1]

NPE if https scheme is used by a UPnP device in the network

If certain Samsung devices are on the local network, jUPnP logs errors like

2018-09-16 23:05:03.295 [ERROR] [org.jupnp.transport.spi.StreamClient] - Request: HttpRequest[GET /capability HTTP/1.1]@7c95d877 failed
    java.lang.NullPointerException: Missing SslContextFactory
    at java.util.Objects.requireNonNull(Objects.java:228) ~[?:?]
    at org.eclipse.jetty.io.ssl.SslClientConnectionFactory.&lt;init&gt;(SslClientConnectionFactory.java:50) ~[74:org.eclipse.jetty.io:9.4.11.v20180605]
    at org.eclipse.jetty.client.HttpClient.newSslClientConnectionFactory(HttpClient.java:1155) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.HttpDestination.newSslClientConnectionFactory(HttpDestination.java:138) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.HttpDestination.&lt;init&gt;(HttpDestination.java:95) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.PoolingHttpDestination.&lt;init&gt;(PoolingHttpDestination.java:25) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.http.HttpDestinationOverHTTP.&lt;init&gt;(HttpDestinationOverHTTP.java:32) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.http.HttpClientTransportOverHTTP.newHttpDestination(HttpClientTransportOverHTTP.java:51) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.HttpClient.destinationFor(HttpClient.java:539) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.HttpClient.send(HttpClient.java:572) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:727) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.eclipse.jetty.client.HttpRequest.send(HttpRequest.java:680) ~[70:org.eclipse.jetty.client:9.4.11.v20180605]
    at org.jupnp.transport.impl.jetty.JettyStreamClientImpl$1.call(JettyStreamClientImpl.java:149) [210:org.jupnp:2.4.0]
    at org.jupnp.transport.impl.jetty.JettyStreamClientImpl$1.call(JettyStreamClientImpl.java:1) [210:org.jupnp:2.4.0]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
    at java.lang.Thread.run(Thread.java:748) [?:?]

As it seems, jUPnP does not support https at all, but is expected to call a https url in this situation.
I haven't experienced any https in UPnP networks myself so far.
Even if the default SSL context were added to Jetty, I assume that requests would fail due to the impossibility to verify the certificate (which must be a self-signed one as there's no defined domain name for the device).
To circumvent this, we would probably have to add a custom trust manager, which simply accepts all certificates unseen.
If anybody has a better idea how to address this, please comment!

UpnpServiceImpl.start() does a search before we can add any registry listener

In UpnpServiceImpl.startup() we have

 if (isInitialSearchEnabled) {
   controlPoint.search(new STAllHeader());
 }

to initiate a search, isInitialSearchEnabled defaults to true but there is no way to set it false so start always a does a search

We can only add a registry listener with

upnpService.getRegistry().addListener(upnpListener);
But registry is not initialized until startup() ran, so therefore impossible to register registry listeners until after done a search

(Note cling project that this is forked from works slightly differently, able to set registry listeners beforehand)

DatagramProcessorImpl trace null char

DatagramProcessorImpl trace null char as it log the DatagramPacket buffer directly.
Adding trim() to the newly created String will solve that.

            log.trace("===================================== DATAGRAM BEGIN ============================================");
            log.trace(new String(datagram.getData()).trim());
            log.trace("-===================================== DATAGRAM END =============================================");

NPE in a upnp async thread

Hello,

I came upon to the following NPE while I was using jUPnP, version 2.2.0:

Exception in thread "upnp-async-407" java.lang.NullPointerException
    at org.jupnp.registry.RemoteItems.add(RemoteItems.java:88)
    at org.jupnp.registry.RegistryImpl.addDevice(RegistryImpl.java:186)
    at org.jupnp.protocol.RetrieveRemoteDescriptors.describe(RetrieveRemoteDescriptors.java:231)
    at org.jupnp.protocol.RetrieveRemoteDescriptors.describe(RetrieveRemoteDescriptors.java:187)
    at org.jupnp.protocol.RetrieveRemoteDescriptors.run(RetrieveRemoteDescriptors.java:107)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

Can you please take a look ? Seems that the UpnpService has lost its configuration ?

Unable to build standalone or use as dependency

I'm interested in using this library for a project, but am having trouble with the maven build process as described in the readme.

The build fails trying to resolve dependencies around the equinox p2 library.

[INFO] {osgi.os=linux, osgi.ws=gtk, org.eclipse.update.install.features=true, osgi.arch=x86_64}
[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: p2repo 2.5.1
[ERROR]   Missing requirement: org.jupnp 2.5.1 requires 'java.package; javax.servlet 0.0.0' but it could not be found
[ERROR]   Cannot satisfy dependency: org.jupnp.feature.feature.group 2.5.1 depends on: org.eclipse.equinox.p2.iu; org.jupnp 0.0.0
[ERROR]   Cannot satisfy dependency: p2repo 2.5.1 depends on: org.eclipse.equinox.p2.iu; org.jupnp.feature.feature.group [2.5.1,2.5.2)

I've tried adding various equinox dependencies manually, but haven't had any success.

Also, when I try using the library as a dependency in my project it builds, but when it actually tries to execute upnp code, an NPE is generated:

java.lang.NullPointerException: null
	at org.jupnp.UpnpServiceImpl.startup(UpnpServiceImpl.java:251) ~[org.jupnp-2.5.2.jar:na]

That line suggested a problem with the default configuration being used, so I experimented with providing one to the UpnpServiceImpl, as described in the documentation, but have had no luck.

My environment as Maven sees it:

Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.8, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-48-generic", arch: "amd64", family: "unix"

Are there any suggestions as to what could be the problem?

Maven build produces unnecessary warnings

The maven build produces some warnings which can be avoided by correct plugin configuration.

  • assembly-plugin: use latest plugin to avoid problems with jar-with-dependencies package
  • deploy-plugin: version missing
  • avoid warning with appendAssemblyId

Java 11 compatibility

jupnp uses internal Java packages which prevents compiling (and eventually running?) on Java 11:

❯❯❯ jdeps -jdkinternals ~/.m2/repository/org/jupnp/org.jupnp/2.4.0/org.jupnp-2.4.0.jar                                                              java11_support
org.jupnp-2.4.0.jar -> java.base
   org.jupnp.transport.impl.FixedSunURLStreamHandler$1 -> sun.net.www.protocol.http.Handler                  JDK internal API (java.base)
   org.jupnp.transport.impl.FixedSunURLStreamHandler$UpnpURLConnection -> sun.net.www.protocol.http.Handler                  JDK internal API (java.base)
   org.jupnp.transport.impl.FixedSunURLStreamHandler$UpnpURLConnection -> sun.net.www.protocol.http.HttpURLConnection        JDK internal API (java.base)

Warning: JDK internal APIs are unsupported and private to JDK implementation that are
subject to be removed or changed incompatibly and could break your application.
Please modify your code to eliminate dependence on any JDK internal APIs.
For the most recent update on JDK internal API replacements, please check:
https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool

Optimize initial thread pool size

When using the configurations (default, OSGi) the core pool size and maximum pool size are the same. The default value is 200.
This leads to this inefficient behavior:

  • during startup the pool size will be 200, 200 threads will be created
  • due to allowCoreThreadTimeout() the core threads will be terminated very fast

It is much more efficient to start with a much lower pool size (e.g. 3). If more threads are needed they will be created by the pool itself.
I observed that inefficiency running jUPnP in an embedded environment (like Rasp Pi 1) with restricted resources (CPU, memory).

I will provide a patch for that improvement.

Migration from Cling

Hi, I'm looking into migrating https://github.com/UniversalMediaServer/UniversalMediaServer from Cling to JUPnP and I have a couple of related questions. Any help would be appreciated.

  1. Is there any different syntax to Cling or is it just a case of swapping the packages?
  2. One reason we are looking for a replacement for Cling is because we want to use newer Java versions, which isn't possible with that unmaintained project. I notice in your readme you don't support newer than Java 8, but that there have been some changes to support the newer versions like #112
    Would you be open to receiving incoming PRs to further fix compatibility with newer JREs?

Thanks :)

NPE when being shutdown

When shutting down my OSGi framework, I just had this NPE in the log:

Exception in thread "jupnp-1" java.lang.RuntimeException: java.lang.NullPointerException
    at org.jupnp.transport.impl.MulticastReceiverImpl.run(MulticastReceiverImpl.java:138)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NullPointerException
    at org.jupnp.protocol.ProtocolFactoryImpl.isSupportedServiceAdvertisement(ProtocolFactoryImpl.java:130)
    at org.jupnp.protocol.ProtocolFactoryImpl.createReceivingAsync(ProtocolFactoryImpl.java:94)
    at org.jupnp.transport.RouterImpl.received(RouterImpl.java:267)
    at org.jupnp.transport.impl.MulticastReceiverImpl.run(MulticastReceiverImpl.java:130)
    ... 3 more
```�

GENA message fully ignored if there is a data type problem for one state variable

By implementing the invalidMessage method in the openHAB Sonos binding, I discovered that few received GENA events are ignored due to an error for one of thge state variable (bad type of the value):

2018-06-03 02:56:29.622 [ERROR] [.e.s.i.t.u.i.UpnpIOServiceImpl:203  ] - invalidMessageorg.jupnp.model.UnsupportedDataException: Can't transform message payload: Can't convert string to number or not in range: RINCON_000E588EAE6601400,175
	at org.jupnp.transport.impl.GENAEventProcessorImpl.readBody(GENAEventProcessorImpl.java:99)
	at org.jupnp.protocol.sync.ReceivingEvent.executeSync(ReceivingEvent.java:95)
	at org.jupnp.protocol.sync.ReceivingEvent.executeSync(ReceivingEvent.java:1)
	at org.jupnp.protocol.ReceivingSync.execute(ReceivingSync.java:62)
	at org.jupnp.protocol.ReceivingAsync.run(ReceivingAsync.java:69)
	at org.jupnp.transport.spi.UpnpStream.process(UpnpStream.java:81)
	at org.jupnp.transport.impl.ServletUpnpStream.run(ServletUpnpStream.java:64)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.jupnp.model.types.InvalidValueException: Can't convert string to number or not in range: RINCON_000E588EAE6601400,175
	at org.jupnp.model.types.UnsignedIntegerFourBytesDatatype.valueOf(UnsignedIntegerFourBytesDatatype.java:27)
	at org.jupnp.model.types.UnsignedIntegerFourBytesDatatype.valueOf(UnsignedIntegerFourBytesDatatype.java:1)
	at org.jupnp.model.VariableValue.<init>(VariableValue.java:52)
	at org.jupnp.model.state.StateVariableValue.<init>(StateVariableValue.java:32)
	at org.jupnp.transport.impl.GENAEventProcessorImpl.readProperties(GENAEventProcessorImpl.java:162)
	at org.jupnp.transport.impl.GENAEventProcessorImpl.readBody(GENAEventProcessorImpl.java:96)
	at org.jupnp.protocol.sync.ReceivingEvent.executeSync(ReceivingEvent.java:95)
	at org.jupnp.protocol.sync.ReceivingEvent.executeSync(ReceivingEvent.java:1)
	at org.jupnp.protocol.ReceivingSync.execute(ReceivingSync.java:62)
	at org.jupnp.protocol.ReceivingAsync.run(ReceivingAsync.java:69)
	at org.jupnp.transport.spi.UpnpStream.process(UpnpStream.java:81)
Caused by: java.lang.NumberFormatException: For input string: "RINCON_000E588EAE6601400,175"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Long.parseLong(Long.java:589)
	at java.lang.Long.parseLong(Long.java:631)
	at org.jupnp.model.types.UnsignedVariableInteger.<init>(UnsignedVariableInteger.java:61)
	at org.jupnp.model.types.UnsignedIntegerFourBytes.<init>(UnsignedIntegerFourBytes.java:27)
	at org.jupnp.model.types.UnsignedIntegerFourBytesDatatype.valueOf(UnsignedIntegerFourBytesDatatype.java:25)
	at org.jupnp.model.types.UnsignedIntegerFourBytesDatatype.valueOf(UnsignedIntegerFourBytesDatatype.java:1)
	at org.jupnp.model.VariableValue.<init>(VariableValue.java:52)
	at org.jupnp.model.state.StateVariableValue.<init>(StateVariableValue.java:32)
	at org.jupnp.transport.impl.GENAEventProcessorImpl.readProperties(GENAEventProcessorImpl.java:162)
	at org.jupnp.transport.impl.GENAEventProcessorImpl.readBody(GENAEventProcessorImpl.java:96)

The exception is caught here:
https://github.com/jupnp/jupnp/blob/master/bundles/org.jupnp/src/main/java/org/jupnp/transport/impl/GENAEventProcessorImpl.java#L98

Rather than throwing an exception, I think we should continue with all correct state variables in the message and just ignore the wrong ones.

The Sonos binding is not receiving notification from the ContentDirectory service and the probability that this is due to this problem is very high.

I propose to be less strict and just ignore wrong state variables.
WDYT ?

Extend jupnptool for better configuration

I would like to extend the command line tool "jupnptool" about this:

  • use java.util.logging to slf4j bridge
  • make logging smarter, especially for rejected tasks
  • support configuration of thread pool (corePoolSize, maxPoolSize, queueSize)
  • get better information how well does the thread pool is configured
  • allow to specify the multicast port on commandline

I will provide a PR with these enhancements soon.

Fix for hydrating Belkin Wemo Devices

which is needed for the upcoming extension of ESH Wemo Binding.

This fix is running in my IDE for quite a long time now, without any impact on other bindings.

Best
Hans-Jörg

versioning scheme does not match the OSGi specifications

The composite update site includes those versions:

  • 2.1.0
  • 2.1.0.RC1

According to the OSGi spec ("Module Layer" -> "Resolving Metadata" -> "Bundle-Version"), the release candidate version is newer than the release version without a qualifier. Hence when resolving against the composite repository, the newest version won't be picked unless specified explicitly.

Adding a jUPnP command line tool

I would like to have a command line tool for searching, filtering and controlling UPnP devices.
I propose to extend jUPnP this way:

  • provide an additional Java project org.jupnp.tool
    • separate project to let the core library as small as possible
    • the project will be in bundles folder, but will be NOT an OSGi bundle project, just a plain Maven project
  • it will contain a Main class in MANIFEST.MF (e.g. named org.jupnp.tool.cli.JUPnPTool)
  • this tool will support
    • --search for UPnP devices
    • --filter for specific UPnP devices, based on device information
    • --verbose for more detailled logging and checking UPnP devices
    • more ideas will come in future, for sure

The implementation will use jCommander for argument processing, and log4j/logback for logging.

I propose to deploy that as standalone, full-contained JAR file including all dependencies. So it can simply be used that way:

java -jar jupnptool-<version>.jar --search

Any comments?
If I have a first version I will create a PullRequest for that.

Build does not work for jupnp-osgi-tests-devices-simple

jUPnP does not compile successfully on my machine (using JavaSE 8u20 on MacOSX).

[INFO] --- maven-bundle-plugin:2.3.4:bundle (default-bundle) @ jupnp-osgi-tests-devices-simple ---
[ERROR] Error building bundle org.jupnp:jupnp-osgi-tests-devices-simple:bundle:2.0.0-SNAPSHOT : Unresolved references to [org.osgi.service.device] by class(es) on the Bundle-Classpath[Jar:dot, Jar:jupnp-osgi-tests-common-2.0.0-SNAPSHOT.jar, Jar:commons-codec-1.4.jar]: [org/jupnp/osgi/upnp/test/device/simple/devices/SimpleTestDevice.class]
[ERROR] Error(s) found in bundle configuration

This can be fixed by adding org.osgi.service.device to MANIFEST (via pom.xml):

<Import-Package>
    org.osgi.framework,
    org.osgi.service.event,
    org.osgi.service.upnp,
    org.osgi.service.device,
    org.osgi.util.tracker
</Import-Package>

I will provide a fix for that.

Jetty is not configured to listen on any port

Jetty is not listening on any port, even if service is configured with ports specified:
new UpnpServiceImpl(new DefaultUpnpServiceConfiguration(8081, 8082));

This causing the devices failing to get the service descriptors.
As a quick fix modified JettyServletContainer:resetServer to specify the port:
server = new Server(8081); // Has its own QueuedThreadPool

And Jetty started serving the descriptor files.

Modifying the JettyServletContainer:addConnector seems to be a long-term solution, since the port is only available in this method:
ServerConnector http = new ServerConnector(server); http.setHost(host); http.setPort(port); server.addConnector(http);

Code should work with Java 8 Compact Profile 2

The jupnp code currently uses the java.beans package, which is not part of any compact profile. As it is only a small functionality, this dependency should be removed by implementing it in a different way.

provided capabilities for services

The manifest misses the headers for the provided service capabilities.

I see three options:

  • keep the manifest first approach and add them to the manifest (the "simplest" solution)
  • migrate to bnd + maven project setup (takes its time but perhaps more comfortable in the longer run)
  • leave it as it is (not nice)

NPE in DefaultUpnpServiceConfiguration

This is similar to #17, but appears to be caused by something different. I see...

2015-11-27 13:45:51 WARN o.j.DefaultUpnpServiceConfiguration[:351]- Thread terminated org.jupnp.registry.RemoteItems$1@99a0f4 abruptly with exception: java.lang.NullPointerException
2015-11-27 13:45:51 WARN o.j.DefaultUpnpServiceConfiguration[:352]- Root cause: java.lang.NullPointerException

in my log files. It looks like it's related to the remote item functionality (from one of the anonymous classes in RemoteItems), but I can't narrow it down more than that because there's no stack trace.

I'll keep digging, but I'm posting this issue as a request to add a stack trace to this exception logging.

NPE during shutdown

Exception in thread "upnp-async-4" java.lang.RuntimeException: Fatal error while executing protocol 'ReceivingSearchResponse': java.lang.NullPointerException
	at org.jupnp.protocol.ReceivingAsync.run(ReceivingAsync.java:75)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
	at org.jupnp.protocol.async.ReceivingSearchResponse.execute(ReceivingSearchResponse.java:94)
	at org.jupnp.protocol.ReceivingAsync.run(ReceivingAsync.java:69)
	... 3 more

Feature Request - Add retry attempts to AbstractStreamClient

There have been instances reported where a device may start sending upnp broadcasts during boot but are not yet ready to establish sessions. Panasonic TVs seem to be a good example. In this case, jupnp sees the device and adds it to the registry but then fails to connect as the device is still booting. Unfortunately, at that point, it then takes the default 10 minutes (unless the user changed the config) before it attempts to reconnect. This behavior is obviously not optimal.

I would suggest that an retry iterator be added here:

public StreamResponseMessage sendRequest(StreamRequestMessage requestMessage) throws InterruptedException {
log.trace("Preparing HTTP request: " + requestMessage);
// We want to track how long it takes
long start = System.nanoTime();
final Long previeousFailureTime = failedRequests.get(requestMessage.getUri());
if (getConfiguration().getRetryAfterSeconds() > 0 && previeousFailureTime != null) {
if (start - previeousFailureTime < TimeUnit.SECONDS
.toNanos(getConfiguration().getRetryAfterSeconds())) {
log.debug("Will not attempt request because it failed in the last {} seconds: {}",
getConfiguration().getRetryAfterSeconds(), requestMessage);
return null;
} else {
failedRequests.remove(requestMessage.getUri());
}
}

Effectively, before we completely stop trying for retryAfterSeconds, let's try X number of times to reconnect.

I will try to work on this and submit a PR, or add this to #129 if I can get it done fast enough.

ThreadPool rejected execution problem/excessive logging

When letting the ESH-embbedded jupnp loose on the network it does send out an UDP broadcast, then received back a lot of answers from a bunch of UPNP devices. It then sends out TCP requests to get service descriptors, with a lot of "200 OK" HTTP responses coming back, but then suddenly in the logs I see a massive amount of errors like these:

21:56:11.810 WARN o.j.OSGiUpnpServiceConfiguration[:363]- Thread pool rejected execution of class org.jupnp.protocol.async.ReceivingSearchResponse

or

21:56:12.004 WARN o.j.OSGiUpnpServiceConfiguration[:363]- Thread pool rejected execution of class org.jupnp.protocol.async.ReceivingSearch

or

21:56:12.696 WARN o.j.OSGiUpnpServiceConfiguration[:363]- Thread pool rejected execution of class org.jupnp.protocol.RetrieveRemoteDescriptors

After a while I get a lof stuff like this (related to Sonos UPNP devices) :

21:57:02.547 INFO o.j.transport.spi.StreamClient[:87]- Timeout of 10 seconds while waiting for HTTP request to complete, aborting: (StreamRequestMessage) GET http://192.168.0.172:1400/xml/ZoneGroupTopology1.xml
21:57:02.547 INFO o.j.transport.spi.StreamClient[:87]- Timeout of 10 seconds while waiting for HTTP request to complete, aborting: (StreamRequestMessage) GET http://192.168.0.151:1400/xml/GroupManagement1.xml
21:57:02.547 WARN o.j.p.RetrieveRemoteDescriptors[:331]- Could not retrieve service descriptor, no response: (RemoteService) Descriptor: /xml/ZoneGroupTopology1.xml
21:57:02.548 WARN o.j.p.RetrieveRemoteDescriptors[:331]- Could not retrieve service descriptor, no response: (RemoteService) Descriptor: /xml/GroupManagement1.xml
21:57:02.548 DEBUG o.j.p.RetrieveRemoteDescriptors[:327]- Sending service descriptor retrieval message: (StreamRequestMessage) GET http://192.168.0.172:1400/xml/GroupManagement1.xml
21:57:02.548 DEBUG o.j.p.RetrieveRemoteDescriptors[:327]- Sending service descriptor retrieval message: (StreamRequestMessage) GET http://192.168.0.151:1400/xml/QPlay1.xml
21:57:02.548 DEBUG org.jupnp.transport.Router[:329]- Sending via TCP unicast stream: (StreamRequestMessage) GET http://192.168.0.172:1400/xml/GroupManagement1.xml
21:57:02.548 DEBUG org.jupnp.transport.Router[:329]- Sending via TCP unicast stream: (StreamRequestMessage) GET http://192.168.0.151:1400/xml/QPlay1.xml
21:57:02.587 INFO o.j.transport.spi.StreamClient[:87]- Timeout of 10 seconds while waiting for HTTP request to complete, aborting: (StreamRequestMessage) GET http://192.168.0.173:1400/xml/HTControl1.xml
21:57:02.587 WARN o.j.p.RetrieveRemoteDescriptors[:331]- Could not retrieve service descriptor, no response: (RemoteService) Descriptor: /xml/HTControl1.xml
21:57:02.587 DEBUG o.j.p.RetrieveRemoteDescriptors[:327]- Sending service descriptor retrieval message: (StreamRequestMessage) GET http://192.168.0.173:1400/xml/QPlay1.xml
21:57:02.587 DEBUG org.jupnp.transport.Router[:329]- Sending via TCP unicast stream: (StreamRequestMessage) GET http://192.168.0.173:1400/xml/QPlay1.xml
21:57:02.610 INFO o.j.transport.spi.StreamClient[:87]- Timeout of 10 seconds while waiting for HTTP request to complete, aborting: (StreamRequestMessage) GET http://192.168.0.171:1400/xml/ZoneGroupTopology1.xml

Javadoc is not exported in maven scripts

Hi,

I get a "Note: This element has no attached Javadoc and the Javadoc could not be found in the attached source." for jupnp classes in the default IDE setup of OH2.

I am not an expert in that matter but it seems as if the javadoc of jupnp is not exported in the maven scripts and is therefore not available in OH2.

Increase default thread pool size when used with lots of UPnP devices

We are using jUPnP in an environment where lots of UPnP based devices are available. This leads to lot of traffic and requests. The default size for OSGiUpnpServiceConfiguration of 20 is definitely too less.

I propose to increase it to 200, as yet used in openHAB2.
I will create a PR for that change.

Logs flooded with validation errors if Magenta TV receiver is found in the network [OH 3]

Every 20s the following messages appear in my log file:

22:16:54.958 [upnp-async-469] WARN  o.j.p.RetrieveRemoteDescriptors:234 - Could not validate device model: (RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:5bc6c59f-1dec-53d4-b6c9-AC6FBB5C842B, Descriptor: http://192.168.2.193:8081/xml/mediashare.xml, Root: true
22:16:54.958 [upnp-async-469] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: descriptorURI): Descriptor location (SCPDURL) is required
22:16:54.958 [upnp-async-469] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: controlURI): Control URL is required
22:16:54.958 [upnp-async-469] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: eventSubscriptionURI): Event subscription URL is required
22:17:14.958 [upnp-async-478] WARN  o.j.p.RetrieveRemoteDescriptors:234 - Could not validate device model: (RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:f305d010-8eed-55c9-bc78-AC6FBB5C842B, Descriptor: http://192.168.2.193:8081/xml/dial.xml, Root: true
22:17:14.958 [upnp-async-478] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: descriptorURI): Descriptor location (SCPDURL) is required
22:17:14.958 [upnp-async-478] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: controlURI): Control URL is required
22:17:14.959 [upnp-async-478] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: eventSubscriptionURI): Event subscription URL is required
22:17:14.961 [upnp-async-479] WARN  o.j.p.RetrieveRemoteDescriptors:234 - Could not validate device model: (RemoteDevice) Identity: (RemoteDeviceIdentity) UDN: uuid:5bc6c59f-1dec-53d4-b6c9-AC6FBB5C842B, Descriptor: http://192.168.2.193:8081/xml/mediashare.xml, Root: true
22:17:14.962 [upnp-async-479] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: descriptorURI): Descriptor location (SCPDURL) is required
22:17:14.962 [upnp-async-479] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: controlURI): Control URL is required
22:17:14.962 [upnp-async-479] WARN  o.j.p.RetrieveRemoteDescriptors:236 - ValidationError (Class: RemoteService, propertyName: eventSubscriptionURI): Event subscription URL is required

The IP address points to my Magenta TV receiver MR 401.
The problem does not seem to happen with openHAB 2.5.8 (will test 2.5.9) but I can see the messages in my development environment for OH 3.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.