You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by dj...@apache.org on 2021/07/11 23:14:05 UTC

[felix-antora-site] 16/18: remove upnp doc (unmaintained)

This is an automated email from the ASF dual-hosted git repository.

djencks pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/felix-antora-site.git

commit 778aa40604edc747ec3cd14c53e6caa2d5595cbd
Author: David Jencks <dj...@apache.org>
AuthorDate: Sun Jul 11 15:52:51 2021 -0700

    remove upnp doc (unmaintained)
---
 modules/ROOT/pages/documentation/subprojects.adoc  |   2 +-
 .../subprojects/apache-felix-upnp.adoc             |  23 ----
 .../apache-felix-upnp/upnp-acknowledgments.adoc    |  11 --
 .../upnp-driver-architecture.adoc                  |  61 -----------
 .../apache-felix-upnp/upnp-getting-started.adoc    |  56 ----------
 .../apache-felix-upnp/upnp-known-issues.adoc       |  12 ---
 .../apache-felix-upnp/upnp-testing-devices.adoc    |  54 ----------
 .../upnp-testing-devices/upnp-examples.adoc        |  41 --------
 .../upnp-examples/upnp-writing-cd-and-cp.adoc      | 117 ---------------------
 9 files changed, 1 insertion(+), 376 deletions(-)

diff --git a/modules/ROOT/pages/documentation/subprojects.adoc b/modules/ROOT/pages/documentation/subprojects.adoc
index b125e82..2584fbe 100644
--- a/modules/ROOT/pages/documentation/subprojects.adoc
+++ b/modules/ROOT/pages/documentation/subprojects.adoc
@@ -128,5 +128,5 @@ The last documentation may be found in the https://github.com/apache/felix-site-
 * https://github.com/apache/felix-site-pub/blob/last-cms/documentation/subprojects/apache-felix-osgi-core.html[OSGi Core]
 * https://github.com/apache/felix-site-pub/blob/last-cms/documentation/subprojects/apache-felix-script-console-plugin.html[Script Console Plugin]
 * https://github.com/apache/felix-site-pub/blob/last-cms/documentation/subprojects/apache-felix-serialization-framework.html[Serialization Framework]
-* xref:documentation/subprojects/apache-felix-upnp.adoc[UPnP]
+* https://github.com/apache/felix-site-pub/blob/last-cms/documentation/subprojects/apache-felix-upnp.html[UPnP]
 * xref:documentation/subprojects/apache-felix-user-admin.adoc[User Admin]
diff --git a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp.adoc b/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp.adoc
deleted file mode 100644
index d5a6cc4..0000000
--- a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp.adoc
+++ /dev/null
@@ -1,23 +0,0 @@
-=  Apache Felix UPnP
-
-== Introduction
-
-The Felix UPnP project provides an implementation of the OSGi UPnP specification (version 1.1) as described in the http://www.osgi.org/Specifications/HomePage[OSGi Service Compendium (Release 4)] . The specification is implemented by the _org.apache.felix.upnp.basedriver_ bundle and it comes with other bundles, which have been developed to ease the writing and testing of UPnP code.
-
-The OSGi UPnP specification defines a set of interfaces which should be used by the developers in order to write UPnP Devices and UPnP Control Points on the OSGi Service Platform.
-From the OSGi point of view, UPnP devices are services registered with the framework, thus the different phases of the UPnP protocol stack, as defined in the http://www.upnp.org/resources/documents/CleanUPnPDA101-20031202s.pdf[UPnP™ Device Architecture (UDA 1.0)], have been mapped to the discovery and notification mechanisms offered by the OSGi framework.
-
-The specification defines a UPnP Base Driver component that acts as software bridge between UPnP networks and OSGi.
-Developers writing UPnP code do not need to interact directly with the driver through some API.
-The driver works in background by exporting the registered services as UPnP devices, and by registering as services the UPnP devices discovered on UPnP networks.
-However, the Felix UPnP project has defined few additional interfaces, so a base knowledge of the way the UPnP Base Driver works is useful and will help developers to write their code.
-
-Table of Content:
-
-. xref:documentation/subprojects/apache-felix-upnp/upnp-getting-started.adoc[Getting Started]
-. xref:documentation/subprojects/apache-felix-upnp/upnp-driver-architecture.adoc[Overview of the Base Driver Architecture]
-. xref:documentation/subprojects/apache-felix-upnp/upnp-testing-devices.adoc[Testing UPnP devices]
-. xref:documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples.adoc[The UPnP examples]
-. xref:documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples/upnp-writing-cd-and-cp.adoc[Writing UPnP Devices and Control Points]
-. xref:documentation/subprojects/apache-felix-upnp/upnp-known-issues.adoc[Known issues]
-. xref:documentation/subprojects/apache-felix-upnp/upnp-acknowledgments.adoc[Acknowledgments]
diff --git a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-acknowledgments.adoc b/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-acknowledgments.adoc
deleted file mode 100644
index 8b8cf6b..0000000
--- a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-acknowledgments.adoc
+++ /dev/null
@@ -1,11 +0,0 @@
-= UPnP Acknowledgments
-
-[cols=2*]
-|===
-| The Felix UPnP base driver and related bundles were originally developed by the http://domoware.isti.cnr.it/[Domoware] project which targeted the OSGi R3.
-The driver is based on a modified version of the "UPnP for Java" library released by the [Cyberlink
-| http://www.cybergarage.org/net/upnp/java/index.html] project.
-This version, called CyberDomo, is currently maintained by the Domoware project team and aligned to the Cyberlink library regularly.
-|===
-
-== xref:documentation/subprojects/apache-felix-upnp/upnp-known-issues.adoc[Known Issues]
diff --git a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-driver-architecture.adoc b/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-driver-architecture.adoc
deleted file mode 100644
index 3c9a342..0000000
--- a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-driver-architecture.adoc
+++ /dev/null
@@ -1,61 +0,0 @@
-= Overview of the Base Driver Architecture
-
-The Figure 4 shows a simplified component view of the base driver.
-The driver is composed of two components, the _exporter_ and _importer_;
-both using the _CyberDomo_ library, which is a modified version of the library released by the http://www.cybergarage.org/net/upnp/java/index.html["CyberLink for Java" project], maintained by the [Domoware project|http://domoware.isti.cnr.it/ ].
-The library implements a full UPnP stack.
-The base driver acts as a bridge between OSGi and the UPnP networks . !BaseDriverArchitecture.jpg!
-_Figure 4_ The UPnP Base Driver architecture
-
-In order to instantiate UPnP devices, developers must register services implementing the interfaces represented in Figure 5 and provided by the _org.osgi.compendium bundle_.
-The _exporter_ is registered as http://www.osgi.org/javadoc/r4/org/osgi/framework/ServiceListener.html[ServiceListener]with the framework and it automatically exposes on the networks each [UPnPDevice |http://www.osgi.org/javadoc/r4/org/osgi/service/upnp/UPnPDevice.html]service registered with the registration property [UPNP__EXPORT|http://www.osgi.org/javadoc/r4/org/osgi/service/upnp/UPnPDevice.html#UPNP__EXPORT].
-The _importer_ listens to the advertisements sent on the networks by external devices and registers with the framework one or more UPnPDevice services.
-Even if it is not required by the specification, the devices imported by the Felix base driver are labeled with the registration property [UPNP_IMPORT|http://svn.apache.org/viewvc/felix/trunk/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/util/Constants.java?view=markup].
-!UPnPDeviceInterfaces.jpg!
-_Figure 5_ The UPnP Device interfaces
-
-Working with UPnP Device from the OSGi point of view means to operate with services;
-the discovery, controlling and eventing phases of the UPnP protocol are naturally mapped to the OSGi service layer, which allows to publish, find, bind and notify events.
-There are some aspects that make it different to work with UPnP in OSGi with respect to other UPnP libraries, due basically to the centralized nature of the OSGi registry opposed to the distributed approach used in UPnP networks;
-some hints are provided in the section "Writing UPnP Devices and Control Points"
-
-The Felix base driver comes with some system properties you can use to configure it at startup.
-
-The system properties: • _cyberdomo.ssdp.mx_ (default 5) • _cyberdomo.ssdp.buffersize_ (default 2048) • _cyberdomo.ssdp.port_ (default 1900)
-
-[cols=2*]
-|===
-| are used by the UPnP stack library during the UPnP discovery process.
-The paper "http://w3.antd.nist.gov/~mills/papers/Paper521.pdf[Adaptive Jitter Control for UPnP M-Search]" [1] provides a good analysis of the tuning of such parameters related to scalability issues.
-The MX parameter default has been set to 5 sec.
-Higher values improve the discovery effectiveness but increase the latency for new device discovery.
-The Intel "[Device Spy
-| http://www.intel.com/cd/ids/developer/asmo-na/eng/downloads/upnp/index.htm]" tool uses a delay of 10 sec, the "CyberLink for Java" library 3 sec.
-The SSDP port in UPnP specification is by default 1900 we allow the modification of such parameter.
-|===
-
-The following system properties: • _felix.upnpbase.exporter.enabled_ (default true) • _felix.upnpbase.importer.enabled_ (default true)
-
-can be used to enable or disable the two main components of the base driver.
-For example with small devices (ARM-based processor), disabling the exporting or importing of devices might reduce the resource consumption.
-
-• _felix.upnpbase.log_ (default 2) • _felix.upnpbase.cyberdomo.log_ (default false)
-
-are properties used to enable the different logging facilities offered by the base driver.
-You can also modify them at run time by using the GUI provided by the UPnP Tester bundle
-
-Finally the following properties are used to set the networking parameters.
-The loopback interface is usually disabled :
-
-• _felix.upnpbase.cyberdomo.net.loopback_ (default false) • _felix.upnpbase.cyberdomo.net.onlyIPV4_ (default true) • _felix.upnpbase.cyberdomo.net.onlyIPV6_ (default false)
-
-[discrete]
-===== xref:documentation/subprojects/apache-felix-upnp/upnp-getting-started.adoc[Getting Started]  [Testing UPnP Devices| UPnP Testing Devices]
-
-'''
-
-[1]({{ refs.1.path }}) K.
-Mills, C.
-Dabrowski "Adaptive Jitter Control for UPnP M-Search" IEEE International Conference on Communications, 2003.
-ICC '03.
-page(s): 1008- 1013 vol.2
diff --git a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-getting-started.adoc b/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-getting-started.adoc
deleted file mode 100644
index 742bd04..0000000
--- a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-getting-started.adoc
+++ /dev/null
@@ -1,56 +0,0 @@
-= Getting Started
-
-Assuming that, as described in xref:documentation/subprojects/building-felix.adoc[Building Felix] web page, you have already checked out the Felix project in the $FELIX__HOME directory, the Felix UPnP project is located at $FELIX__HOME/trunk/upnp directory.
-The project is organized in different directories shown in Figure 1.
-
-!UPnP-Project-Structure.jpg!
-_Figure 1_ The Felix UPnP project structure
-
-The _basedriver_ directory contains the project of the bundle implementing the UPnP spec.
-In the _samples{_}directory there are three projects implementing simple test devices, while the _tester_ and _extra_ directories are projects providing additional utilities for the UPnP development.
-At last, the _doc_ directory contains this documentation and a script file to launch all the Felix UPnP bundles.
-
-After building the Felix project, you can start the script file "upnp.sh.bat" inside the /upnp/doc directory;
-it launches a Felix runtime with all the UPnP bundles released by the project.
-The script file defines a profile called "upnp" and the list of bundles[1]({{ refs.1.path }})installed with the profile is shown in Figure 2.
-The UPnP Tester is a bundle that provides a browser utility to control and subscribe all the UPnP devices registered with the OSGi framework.
-After executing the script, you should see in the window opened by the UPnP Tester bundle three UPnP devices (left panel in Figure 3.a), which correspond to the TV, Clock and BinaryLight devices shown in Figure 3.
-Of course the number of discovered devices may be higher if other UPnP devices are installed in your local network
-
-!Bundle-List.jpg!
-_Figure 2_ Bundles installed by the script "upnp.sh.bat"
-
-[cols=2*]
-|===
-| To stop the devices launched by the script you can close their windows, while to start them again type "start 10 11 12 13" from the Felix shell.
-See the sections "xref:documentation/subprojects/apache-felix-upnp/upnp-testing-devices.adoc[Testing UPnP devices]" and "[The UPnP Examples
-| UPnP Examples]" for details on how to use the these bundles.
-|===
-
-d) UPnP BinaryLight | _Figure 3_ The GUIs started by the script "upnp.sh.bat"
-
-The Felix build process by default uses the JDK1.4 as target class library for all the UPnP bundles.
-The UPnP Base Driver can be built also with the JDK1.3 as target;
-to this end you have to define the "platform" property in the command line: type "mvn Dplatform=jdk13 install" from the /upnp/basedriver directory.
-For details on configuring your Eclipse IDE see [3]({{ refs.3.path }}).
-
-== Common Issues
-
-If you experience problems discovering the UPnP devices of your network:
-
-* Check the configuration of your firewalls.
-UPnP discovery is based on multicast messages over UDP that usually are not filtered by firewalls, on the contrary the XML description of devices is retrieved using HTTP protocol;
-usually bound to non standard ports which might be blocked.
-Check whether firewall is active on your host or on the host of the device you want discover.
-* Install a loopback interface if needed.
-The base driver by default is configured for not using the localhost as loopback interface.
-If you want to run and test UPnP devices on a machine disconnected by any network, you should install and activate a loopback interface.
-Pay attention to disable the loopback interface when you are connected to a network again, otherwise both interfaces will be used to expose the UPnP services registered with the framework.
-
-//
-* xref:documentation/subprojects/apache-felix-upnp.adoc[Introduction]
-* xref:documentation/subprojects/apache-felix-upnp/upnp-driver-architecture.adoc[UPnP Driver architecture]
-
-'''
-
-[1]({{ refs.1.path }}) The actual version of the bundles may be different
diff --git a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-known-issues.adoc b/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-known-issues.adoc
deleted file mode 100644
index 633f11f..0000000
--- a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-known-issues.adoc
+++ /dev/null
@@ -1,12 +0,0 @@
-= Known issues
-
-Currently the bundle does not support the following requirements:
-
-* upnp.ssdp.address Configuration Service
-* exported device changes: if a service already exported as UPnP Device changes its own configuration, i.e.: implements new service, changes the friendly name, etc., the new service description is not reflected on the UPnP Device
-* icons for exported device are not tested
-* no localization support
-
-//
-* xref:documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples/upnp-writing-cd-and-cp.adoc[Writing UPnP Devices and Control Points]
-* xref:documentation/subprojects/apache-felix-upnp/upnp-acknowledgments.adoc[UPnP Acknowledgments ]
diff --git a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices.adoc b/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices.adoc
deleted file mode 100644
index e9cfd5d..0000000
--- a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices.adoc
+++ /dev/null
@@ -1,54 +0,0 @@
-= Testing UPnP devices
-
-The _org.apache.felix.upnp.tester_ bundle installs a component that shows the UPnP devices registered with the OSGi framework.
-It provides a GUI shown in the Figure 6 that can be used for controlling the discovered devices: by invoking actions and by subscribing for the state variable changes occurring on them.
-
-!TesterGUI.jpg!
-Figure6 The UPnP Tester GUI
-
-In the left panel you can browse the devices discovered on the OSGi platform.
-Remember that they may be registered by the base driver as well as by other bundles installed on the platform.
-Therefore stopping the base driver you will continue to see the local devices, but they will be no more exported.
-The devices with their hierarchy of the embedded devices and services are represented as nodes of a tree with the following icons:
-
-* !RootDevice.gif!
-Root Device
-* !EmbeddedDevice.gif!
-Embedded Device
-* !Service.gif!
-Service
-* !Action.gif!
-Action
-* !StateVariable.gif!
-State Variable
-* !EventedSteateVariable.gif!
-Evented State Variable
-* !SubscribedStateVariable.gif!
-Subscribed State Variable
-
-By clicking on the Root Device icon, the register properties defined by the device are shown on the right panel.
-You can distinguish between exported and imported devices by looking for the property key "UPnP.export" and "UPnP.device.imported" respectively.
-
-By right-clicking on the Root Device, Embedded device, or Service icon a context menu is displayed to open the XML description of devices and services (see Figure 6)
-
-By clicking on the Service icon, the Service Id and Type are shown in the right panel together with buttons for subscribing all the state variables of the service.
-The received notify message is displayed on the bottom panel.
-
-By clicking on the Action icons, the right panel displays a form where the input parameters of the action can be inserted.
-Use the "do Action" button to execute it;
-the results, if any, will be displayed in the table below the input parameters.
-
-Finally, by clicking on the state variables shows the associated property keys as the default value and minimum and maximum value, if any.
-
-_Menus_
-
-* The "Search" menu forces the UPnP Base Driver to execute a UPnP M-Search for UPnP Root Devices or for all types of devices.
-This search is usually automatically executed during the start up of the base driver.
-* The "Felix Logger" and "Cyber Debugger" menus enable displaying of the messages received and sent by the base driver (i.e.
-the content of the UDP communication).
-* The "Print Pending Devices" is a utility menu to verify whether incomplete hierarchy of embedded devices have been registered with the framework.
-* The "Check Errata UPnPDevices" menu may help the user verify that all the local UPnP Devices have been registered with the mandatory properties, otherwise they would not be exported.
-
-//
-* xref:documentation/subprojects/apache-felix-upnp/upnp-driver-architecture.adoc[Overview of the Base Driver Architecture]
-* xref:documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples.adoc[The Felix UPnP Examples| UPnP Examples]
diff --git a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples.adoc b/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples.adoc
deleted file mode 100644
index b3221b9..0000000
--- a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples.adoc
+++ /dev/null
@@ -1,41 +0,0 @@
-= The Felix UPnP Examples
-
-The UPnP examples released by the UPnP project are simple UPnP devices developed as a proof of concept.
-The first two examples, the TV and Clock, are used to check the importing and exporting capabilities of the base driver.
-The third one, the Binary Light, implements a standard UPnP DCP and provides additionally a UPnP presentation page.
-
-== Sample TV and Clock
-
-These devices are dual version of the sample devices developed by the project "Cyberlink for Java" by Satoshi Konno.
-They have been rewritten according to the OSGi specification and can be used to check the importing and exporting capabilities of the base driver.
-The simulated TV screen is used to show the messages received by the Clock device and other simulated device like the Air Conditionator and Washing Machine.
-When launching the original version of such devices you will see that the Felix TV running on the OSGi platform is able to receive the messages from UPnP devices running on different platform and imported in OSGi.
-At the same time, the Cyberlink TV is able to receive the time event generated by the Felix Clock device and exported by the base driver.
-| !FelixUPnPTV.jpg!
-| !FelixClock.jpg!
-| | _Figure 7_ The Felix UPnP TV GUI | _Figure 8_ The Felix UPnP Clock GUI | If you want to avoid installing the Cyberlink devices, you can run a second instance of Felix by clicking on the batch file again.
-In this case the Felix TV and Clock will be exported and re-imported by both Felix runtimes and you will see a duplicated TV and Clock device on each platform.
-Notice that you can stop in any moment a device by closing its window.
-You can start it again from the Felix shell by selecting the respective bundle ID.
-Starting with two running instances of the Felix Clock, you can stop the first one and the TVs will lose for a moment the time signal.
-In fact, being subscribed to the Clock device type and not to a specific device instance, they will receive the time event from the remaining device Clock.
-One TV will be notified from the clock running on the same platform, while the other will receive the events from an imported TV device.
-As soon as you stop also the second clock device, the Time message will disappear from both the TVs.
-
-== The BinaryLight example
-
-The Binary Light device, according the UPnP DCP, shows a graphical interface you can use to switch on/off the light and to simulate the breaking of the lamp bulb.
-In this last circumstance you can see, by using the Felix UPnPDevice Tester interface, that the values of the "Status" and "Target" variable may be different.
-While the "Target" variable represents the expected status after invoking the related action, the "Status" variable describes the real status of the Light Device.
-This example, by exploiting the Felix HTTP Service implementation, installs a UPnP presentation page.
-By code you can retrieve the presentation page URL by looking for the service property called "UPnP.presentationURL".
-This property is also visible, as link, through the interface provided by the Tester bundle.
-Accessing the presentation page by means of a web browser you can switch the light status by clicking on the Light image: the icon on the device windows changes accordingly.
-| !FelixLight.jpg!
-| !FelixLightBroken.jpg!
-| !LightPresentationPage.jpg!
-| _Figure 9_ The BinaryLight  GUI and the presentation page
-
-The source code for the Binary light is slightly different from the one for TV and Clock code because it has been written starting from a Light model which notifies its changes through the PropertyChangeListener interface.
-
-=== xref:documentation/subprojects/apache-felix-upnp/upnp-testing-devices.adoc[Testing UPnP Devices]  [Writing UPnP Devices and Control Points| UPnP Writing CD and CP]
diff --git a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples/upnp-writing-cd-and-cp.adoc b/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples/upnp-writing-cd-and-cp.adoc
deleted file mode 100644
index 635dddb..0000000
--- a/modules/ROOT/pages/documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples/upnp-writing-cd-and-cp.adoc
+++ /dev/null
@@ -1,117 +0,0 @@
-= Writing UPnP Devices and Control Points
-
-[cols=2*]
-|===
-| The http://www.osgi.org/Specifications/HomePage[OSGi UPnP Specification (v 1.1)] dedicates section 111.6 "Working with a UPnP Device" to describe the details of implementing UPnP Devices on OSGi.
-Here we provide some hints on the main differences you may encounter working with OSGi with respect to the [UDA 1.0 Specification
-| http://www.upnp.org/resources/documents/CleanUPnPDA101-20031202s.pdf] .
-|===
-
-The first peculiarity is that OSGi provides a centralized register for discovering of UPnP devices as opposed to the distributed mechanism of the UPnP protocol stack.
-Thus, while in the UPnP networks the steps for subscribing the services of some device are typically 1) _discover_ the required device and 2) _subscribe_ the service, within the OSGi platform a Control Point may register an interest in receiving notify events even before the device is really plugged on the network.
-This is possible because the subscription mechanism is based on the http://www.osgi.org/javadoc/r4/org/osgi/service/upnp/UPnPEventListener.html[UPnPEventListener]interface that is used for registering OSGi services, which ultimately handles the notify messages sent by the producers of the events.
-The base driver (importer) keeps track of such UPnPEventListener services and as soon as a matching service is discovered on the UPnP network, a subscription is made on behalf of the registered listeners.
-
-[cols=3*]
-|===
-| On the other hand, even if it is enough to register a service implementing the http://www.osgi.org/javadoc/r4/org/osgi/service/upnp/UPnPDevice.html[UPnPDevice]interface to expose it as UPnP devices on the network, the developers have to implement on their own the event management required by the UPnP technology.
-From this point of view, for each evented state variable declared by the UPnP device, the developers have to monitor UPnPEventListenerservices that is error prone[1].
-The correct implementation of the UPnP eventing phase is left entirely to developers.
-In particular, in UDA 1.0, the first time a Control Point subscribes a service, the current value of its state variables should soon be delivered to it.
-To manage this situation in a standard way, the last OSGi UPnP specification defined the extended interface [UPnPLocalStateVariable
-| http://www.osgi.org/javadoc/r4/org/osgi/service/upnp/UPnPLocalStateVariable.html].
-In fact, the previous basic interface UPnPStateVariable provided only a descriptive interface which did not enable to get the value of a state variable without knowing the final implementation class.
-Every developer should use this new interface in order to allow the specification of helper classes that ease the subscription/notify management (see [UPnPEventNotifier
-| http://svn.apache.org/viewvc/felix/trunk/upnp/extra/src/main/java/org/apache/felix/upnp/extra/util/UPnPSubscriber.java?view=markup] below).
-|===
-
-We have factorized and released part of the code used by the UPnP examples with the _org.apache.felix.upnp.extra_ bundle.
-
-== The Extra bundle and the driver interfaces
-
-We provide some utility classes and services through the extra bundle and the services registered by the UPnP Base Driver.
-
-[cols=4*]
-|===
-| In the Extra bundle the class http://svn.apache.org/viewvc/felix/trunk/upnp/extra/src/main/java/org/apache/felix/upnp/extra/util/UPnPSubscriber.java?view=markup[org.apache.felix.upnp.extra.util.UPnPSubscriber] can be instantiated to subscribe one or more services.
-The constructor takes two parameters a [BundleContext
-| http://www.osgi.org/javadoc/r4/org/osgi/framework/BundleContext.html] reference and a [UPnPEventListener
-| http://www.osgi.org/javadoc/r4/org/osgi/service/upnp/UPnPEventListener.html] reference.
-In this class the method subscribe(Filter aFilter) is a general and powerful way to subscribe to any service by using an [LDAP filter
-| http://www.osgi.org/javadoc/r4/org/osgi/framework/Filter.html].
-For example by using the string :
-|===
-
- "(& (UPnP.device.type=urn:schemas-upnp-org:device:BinaryLight:1) (UPnP.service.type= urn:schemas-upnp-org:service:SwitchPower:1))"
-
-we would subscribe to the SwitchPower service offered by any device implementing the BinaryLight profile.
-Looking at the Felix UPnP TV sample code, the UPnPSubscriber class is used in the file http://svn.apache.org/viewvc/felix/trunk/upnp/samples/tv/src/main/java/org/apache/felix/upnp/sample/tv/TvDevice.java?view=markup[org.apache.felix.upnp.sample.tv.TVDevice] to subscribe to the different service types offered by the Cyberlink sample devices.
-However, in this case, the utility method {color:black}{_}subscribeEveryServiceType{_}\{color} is used to provide just the device and service types.
-
-----
-private final static String CLOCK_DEVICE_TYPE = "urn:schemas-upnp-org:device:clock:1";
-private final static String TIME_SERVICE_TYPE = "urn:schemas-upnp-org:service:timer:1";
-
-private final static String LIGHT_DEVICE_TYPE = "urn:schemas-upnp-org:device:light:1";
-private final static String POWER_SERVICE_TYPE = "urn:schemas-upnp-org:service:power:1";
-
-private final static String AIRCON_DEVICE_TYPE = "urn:schemas-upnp-org:device:aircon:1";
-private final static String TEMP_SERVICE_TYPE = "urn:schemas-upnp-org:service:temp:1";
-
-private final static String WASHER_DEVICE_TYPE = "urn:schemas-upnp-org:device:washer:1";
-private final static String STATUS_SERVICE_TYPE = "urn:schemas-upnp-org:service:state:1";
-
-public void doSubscribe() {
-  subscriber = new UPnPSubscriber(Activator.context, this);
-  subscriber.subscribeEveryServiceType(CLOCK_DEVICE_TYPE, TIME_SERVICE_TYPE);
-  subscriber.subscribeEveryServiceType(AIRCON_DEVICE_TYPE, TEMP_SERVICE_TYPE);
-  subscriber.subscribeEveryServiceType(LIGHT_DEVICE_TYPE, POWER_SERVICE_TYPE);
-  subscriber.subscribeEveryServiceType(WASHER_DEVICE_TYPE, STATUS_SERVICE_TYPE);
-}
-
-public void undoSubscribe(){
-       subscriber.unsubscribeAll();}
-----
-
-[cols=8*]
-|===
-| The class http://svn.apache.org/viewvc/felix/trunk/upnp/extra/src/main/java/org/apache/felix/upnp/extra/util/UPnPEventNotifier.java?view=markup[org.apache.felix.upnp.extra.util.UPnPEventNotifier] is a utility class that manages the delivery of notifications for you.
-There are two constructors.
-The first one takes a [BundleContext
-| http://www.osgi.org/javadoc/r4/org/osgi/framework/BundleContext.html], a [UPnPDevice
-| http://www.osgi.org/javadoc/r4/org/osgi/service/upnp/UPnPDevice.html] , and a [UPnPService
-| http://www.osgi.org/javadoc/r4/org/osgi/service/upnp/UPnPService.html] reference.
-They are internally used to keep trace of all the registered UPnPEvenListener that are interested in monitoring events generated by your UPnP service.
-UPnPEventNotifier implements the java beans [PropertyChangeListener
-| http://java.sun.com/j2se/1.4.2/docs/api/java/beans/PropertyChangeListener.html] interface;
-once changes of the service state variables occurs you should call the method propertyChange(PropertyChangeEvent evt).
-Alternatively, you may use the second constructor to pass a reference to a model implementing the interface: [EventSource
-| http://svn.apache.org/viewvc/felix/trunk/upnp/extra/src/main/java/org/apache/felix/upnp/extra/util/EventSource.java?view=markup] defined in the Extra bundle.
-This model should use the [PropertyChangeSupport
-| http://java.sun.com/j2se/1.4.2/docs/api/java/beans/PropertyChangeSupport.html] to keep trace of PropertyChangeListener, {color:}and the related method firePropertyChange\{color} to notify changes.
-The {color:black}EventSource\{color} interface is used internally by the UPnPEventNotifier to register itself as propertychangeListener of the model.
-Thus, in this case, you don't have to call propertyChange()directly: it is a duty of your model.
-As an example, take a look at [LightModel
-| http://svn.apache.org/viewvc/felix/trunk/upnp/samples/binarylight/src/main/java/org/apache/felix/upnp/sample/binaryLight/LightModel.java?view=markup] class in the BinaryLight bundle{color:black}.\{color}
-|===
-
-The Felix UPnP base driver registers a non standard service implementing two interfaces:
-
-http://svn.apache.org/viewvc/felix/trunk/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/DevicesInfo.java?view=markup[org.apache.felix.upnp.basedriver.controller.DevicesInfo];
-http://svn.apache.org/viewvc/felix/trunk/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/DriverController.java?view=markup[org.apache.felix.upnp.basedriver.controller.DriverController];
-
-The former can be used to retrieve the XML description of both devices and services.
-Other than be used for debugging purpose, it allows access to the UPnP schema extensions defined by UPnP Vendors.
-According to the UDA 1.0 they consist of elements inserted in different points of the XML description and by convention starting with the prefix "X_".
-This interface is used by the context menu handler of the UPnP Tester bundle.
-
-The latter interface can be used to change the log messages of the base driver at runtime.
-Two different methods are available to modify the log level of the base driver or to enable the visualization of low level messages related to the UPnP stack protocol (CyberDomo).
-Furthermore, the interface allows developers to send an M-SEARCH discovery message to the UPnP networks, thus refreshing the list of imported devices.
-
-* xref:documentation/subprojects/apache-felix-upnp/upnp-testing-devices/upnp-examples.adoc[The Felix UPnP Examples]
-* xref:documentation/subprojects/apache-felix-upnp/upnp-known-issues.adoc[Known Issues| UPnP Known Issues]
-
-'''
-
-[1]({{ refs.1.path }}) Developers should monitor UPnpEventListener services with a filter matching either the own service Id or service type, either the own device Id or device type and even a empty filter which are usually used to express interest for every UPnP device.