From 477807e0e6821c98e70e206aba2cbb779a35274f Mon Sep 17 00:00:00 2001 From: lotus Date: Wed, 15 Jul 2009 16:13:24 +0000 Subject: [PATCH] * updated jxpath to latest v1.3 * added upnplib as source without packages: jmx remote samples git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6218 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- .classpath | 3 +- NOTICE | 3 + build.xml | 3 +- lib/commons-jxpath-1.1.License | 55 -- lib/commons-jxpath-1.1.jar | Bin 268794 -> 0 bytes lib/commons-jxpath-1.3.License | 202 +++++++ lib/commons-jxpath-1.3.jar | Bin 0 -> 299994 bytes lib/sbbi-upnplib-1.0.4.License | 46 -- lib/sbbi-upnplib-1.0.4.jar | Bin 161962 -> 0 bytes source/net/sbbi/upnp/Discovery.java | 264 +++++++++ .../net/sbbi/upnp/DiscoveryAdvertisement.java | 379 +++++++++++++ .../net/sbbi/upnp/DiscoveryEventHandler.java | 76 +++ source/net/sbbi/upnp/DiscoveryListener.java | 290 ++++++++++ .../sbbi/upnp/DiscoveryResultsHandler.java | 71 +++ source/net/sbbi/upnp/HttpResponse.java | 145 +++++ source/net/sbbi/upnp/JXPathParser.java | 95 ++++ source/net/sbbi/upnp/ServiceEventHandler.java | 70 +++ .../sbbi/upnp/ServiceEventMessageParser.java | 105 ++++ .../sbbi/upnp/ServiceEventSubscription.java | 111 ++++ source/net/sbbi/upnp/ServicesEventing.java | 445 +++++++++++++++ source/net/sbbi/upnp/devices/DeviceIcon.java | 86 +++ source/net/sbbi/upnp/devices/UPNPDevice.java | 298 +++++++++++ .../net/sbbi/upnp/devices/UPNPRootDevice.java | 450 ++++++++++++++++ .../upnp/impls/InternetGatewayDevice.java | 506 ++++++++++++++++++ .../net/sbbi/upnp/messages/ActionMessage.java | 437 +++++++++++++++ .../messages/ActionMessageResponseParser.java | 160 ++++++ .../sbbi/upnp/messages/ActionResponse.java | 101 ++++ .../upnp/messages/StateVariableMessage.java | 204 +++++++ .../upnp/messages/StateVariableResponse.java | 74 +++ .../messages/StateVariableResponseParser.java | 154 ++++++ .../upnp/messages/UPNPMessageFactory.java | 108 ++++ .../upnp/messages/UPNPResponseException.java | 97 ++++ .../net/sbbi/upnp/services/ISO8601Date.java | 331 ++++++++++++ .../net/sbbi/upnp/services/ServiceAction.java | 202 +++++++ .../upnp/services/ServiceActionArgument.java | 87 +++ .../upnp/services/ServiceStateVariable.java | 263 +++++++++ .../services/ServiceStateVariableTypes.java | 188 +++++++ .../net/sbbi/upnp/services/UPNPService.java | 326 +++++++++++ source/net/sbbi/upnp/version.properties | 8 + 39 files changed, 6338 insertions(+), 105 deletions(-) delete mode 100644 lib/commons-jxpath-1.1.License delete mode 100644 lib/commons-jxpath-1.1.jar create mode 100644 lib/commons-jxpath-1.3.License create mode 100644 lib/commons-jxpath-1.3.jar delete mode 100644 lib/sbbi-upnplib-1.0.4.License delete mode 100644 lib/sbbi-upnplib-1.0.4.jar create mode 100644 source/net/sbbi/upnp/Discovery.java create mode 100644 source/net/sbbi/upnp/DiscoveryAdvertisement.java create mode 100644 source/net/sbbi/upnp/DiscoveryEventHandler.java create mode 100644 source/net/sbbi/upnp/DiscoveryListener.java create mode 100644 source/net/sbbi/upnp/DiscoveryResultsHandler.java create mode 100644 source/net/sbbi/upnp/HttpResponse.java create mode 100644 source/net/sbbi/upnp/JXPathParser.java create mode 100644 source/net/sbbi/upnp/ServiceEventHandler.java create mode 100644 source/net/sbbi/upnp/ServiceEventMessageParser.java create mode 100644 source/net/sbbi/upnp/ServiceEventSubscription.java create mode 100644 source/net/sbbi/upnp/ServicesEventing.java create mode 100644 source/net/sbbi/upnp/devices/DeviceIcon.java create mode 100644 source/net/sbbi/upnp/devices/UPNPDevice.java create mode 100644 source/net/sbbi/upnp/devices/UPNPRootDevice.java create mode 100644 source/net/sbbi/upnp/impls/InternetGatewayDevice.java create mode 100644 source/net/sbbi/upnp/messages/ActionMessage.java create mode 100644 source/net/sbbi/upnp/messages/ActionMessageResponseParser.java create mode 100644 source/net/sbbi/upnp/messages/ActionResponse.java create mode 100644 source/net/sbbi/upnp/messages/StateVariableMessage.java create mode 100644 source/net/sbbi/upnp/messages/StateVariableResponse.java create mode 100644 source/net/sbbi/upnp/messages/StateVariableResponseParser.java create mode 100644 source/net/sbbi/upnp/messages/UPNPMessageFactory.java create mode 100644 source/net/sbbi/upnp/messages/UPNPResponseException.java create mode 100644 source/net/sbbi/upnp/services/ISO8601Date.java create mode 100644 source/net/sbbi/upnp/services/ServiceAction.java create mode 100644 source/net/sbbi/upnp/services/ServiceActionArgument.java create mode 100644 source/net/sbbi/upnp/services/ServiceStateVariable.java create mode 100644 source/net/sbbi/upnp/services/ServiceStateVariableTypes.java create mode 100644 source/net/sbbi/upnp/services/UPNPService.java create mode 100644 source/net/sbbi/upnp/version.properties diff --git a/.classpath b/.classpath index 1b443b512..10fe6dcd2 100644 --- a/.classpath +++ b/.classpath @@ -17,7 +17,6 @@ - @@ -36,6 +35,6 @@ - + diff --git a/NOTICE b/NOTICE index 7a9657377..fdb65db16 100644 --- a/NOTICE +++ b/NOTICE @@ -9,3 +9,6 @@ Copyright 2001-2008 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). + +This product includes software developed by +SuperBonBon Industries (http://www.sbbi.net/) \ No newline at end of file diff --git a/build.xml b/build.xml index 438832ab9..4c7352e47 100644 --- a/build.xml +++ b/build.xml @@ -172,7 +172,7 @@ - + @@ -182,7 +182,6 @@ - diff --git a/lib/commons-jxpath-1.1.License b/lib/commons-jxpath-1.1.License deleted file mode 100644 index 603fe6a26..000000000 --- a/lib/commons-jxpath-1.1.License +++ /dev/null @@ -1,55 +0,0 @@ -/* ==================================================================== - * - * The Apache Software License, Version 1.1 - * - * Copyright (c) 1999-2003 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, if - * any, must include the following acknowlegement: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowlegement may appear in the software itself, - * if and wherever such third-party acknowlegements normally appear. - * - * 4. The names "The Jakarta Project", "Commons", and "Apache Software - * Foundation" must not be used to endorse or promote products derived - * from this software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache" - * nor may "Apache" appear in their names without prior written - * permission of the Apache Group. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - * - */ \ No newline at end of file diff --git a/lib/commons-jxpath-1.1.jar b/lib/commons-jxpath-1.1.jar deleted file mode 100644 index 9516e2ad66fc51b143d42e7c083e6b8d2f0717b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 268794 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%0AH0s!y7ca#b>BC1EYA&w0?P@(Sf79}7G}K>4wLL5 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 e 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

&2{J|AE;hRyk2zIonmtXk)Ltr-|32YU}OT0Zu$a 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 diff --git a/lib/commons-jxpath-1.3.License b/lib/commons-jxpath-1.3.License new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/lib/commons-jxpath-1.3.License @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/lib/commons-jxpath-1.3.jar b/lib/commons-jxpath-1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..e344a1e66d83ce608928a1e5e01dacfbc6270ab0 GIT binary patch literal 299994 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

  • 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 K^fllFg8u_ctUZ(f literal 0 HcmV?d00001 diff --git a/lib/sbbi-upnplib-1.0.4.License b/lib/sbbi-upnplib-1.0.4.License deleted file mode 100644 index 5b80110cb..000000000 --- a/lib/sbbi-upnplib-1.0.4.License +++ /dev/null @@ -1,46 +0,0 @@ - ============================================================================ - The Apache Software License, Version 1.1 - ============================================================================ - - Copyright (C) 2002 The Apache Software Foundation. All rights reserved. - - Redistribution and use in source and binary forms, with or without modifica- - tion, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. The end-user documentation included with the redistribution, if any, must - include the following acknowledgment: "This product includes software - developed by SuperBonBon Industries (http://www.sbbi.net/)." - Alternately, this acknowledgment may appear in the software itself, if - and wherever such third-party acknowledgments normally appear. - - 4. The names "UPNPLib" and "SuperBonBon Industries" must not be - used to endorse or promote products derived from this software without - prior written permission. For written permission, please contact - info@sbbi.net. - - 5. Products derived from this software may not be called - "SuperBonBon Industries", nor may "SBBI" appear in their name, - without prior written permission of SuperBonBon Industries. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- - DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - This software consists of voluntary contributions made by many individuals - on behalf of SuperBonBon Industries. For more information on - SuperBonBon Industries, please see . - diff --git a/lib/sbbi-upnplib-1.0.4.jar b/lib/sbbi-upnplib-1.0.4.jar deleted file mode 100644 index 271e919c7e82b9fa7fc4edb2de0f84f0e3381ebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161962 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. + */ +package net.sbbi.upnp; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.NetworkInterface; +import java.net.URL; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import net.sbbi.upnp.devices.UPNPRootDevice; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Class to discover an UPNP device on the network.
    + * A multicast socket will be created to discover devices, the binding port for this socket is set to 1901, + * if this is causing a problem you can use the net.sbbi.upnp.Discovery.bindPort system property + * to specify another port. + * The discovery methods only accept matching device description and broadcast message response IP + * to avoid a security flaw with the protocol. If you are not happy with such behaviour + * you can set the net.sbbi.upnp.ddos.matchip system property to false to avoid this check. + * @author
    SuperBonBon + * @version 1.0 + */ + +public class Discovery { + + private final static Log log = LogFactory.getLog( Discovery.class ); + + public final static String ROOT_DEVICES = "upnp:rootdevice"; + public final static String ALL_DEVICES = "ssdp:all"; + + public static final int DEFAULT_MX = 3; + public static final int DEFAULT_TTL = 4; + public static final int DEFAULT_TIMEOUT = 1500; + public static final String DEFAULT_SEARCH = ALL_DEVICES; + public static final int DEFAULT_SSDP_SEARCH_PORT = 1901; + + public final static String SSDP_IP = "239.255.255.250"; + public final static int SSDP_PORT = 1900; + + /** + * Devices discovering on all network interfaces with default values, all root devices will be searched + * @return an array of UPNP Root device or null if nothing found with the default timeout. + * Null does NOT means that no UPNP device is available on the network. It only means + * that for this default timeout no devices responded or that effectively no devices + * are available at all. + * @throws IOException if some IOException occurs during discovering + */ + public static UPNPRootDevice[] discover() throws IOException { + return discover( DEFAULT_TIMEOUT, DEFAULT_TTL, DEFAULT_MX, DEFAULT_SEARCH ); + } + + /** + * Devices discovering on all network interfaces with a given root device to search + * @param searchTarget the device URI to search + * @return an array of UPNP Root device that matches the search or null if nothing found with the default timeout. + * Null does NOT means that no UPNP device is available on the network. It only means + * that for this given timeout no devices responded or that effectively no devices + * are available at all. + * @throws IOException if some IOException occurs during discovering + */ + public static UPNPRootDevice[] discover( String searchTarget ) throws IOException { + return discover( DEFAULT_TIMEOUT, DEFAULT_TTL, DEFAULT_MX, searchTarget ); + } + + /** + * Devices discovering on all network interfaces with a given timeout and a given root device to search + * @param timeOut the time allowed for a device to give a response + * @param searchTarget the device URI to search + * @return an array of UPNP Root device that matches the search or null if nothing found with the given timeout. + * Null does NOT means that no UPNP device is available on the network. It only means + * that for this given timeout no devices responded or that effectively no devices + * are available at all. + * @throws IOException if some IOException occurs during discovering + */ + public static UPNPRootDevice[] discover( int timeOut, String searchTarget ) throws IOException { + return discover( timeOut, DEFAULT_TTL, DEFAULT_MX, searchTarget ); + } + + /** + * Devices discovering on all network interfaces with a given timeout and a given root device to search, as well as a ttl and mx param + * @param timeOut the timeout for the a device to give a reponse + * @param ttl the UDP socket packets time to live + * @param mx discovery message mx http header field value + * @param searchTarget the device URI to search + * @return an array of UPNP Root device that matches the search or null if nothing found within the given timeout. + * Null return does NOT means that no UPNP device is available on the network. It only means + * that for this given timeout no devices responded or that effectively no devices + * are available at all. + * @throws IOException if some IOException occurs during discovering + */ + public static UPNPRootDevice[] discover( int timeOut, int ttl, int mx, String searchTarget ) throws IOException { + return discoverDevices( timeOut, ttl, mx, searchTarget, null ); + } + + /** + * Devices discovering with a given timeout and a given root device to search on an given network interface, as well as a ttl and mx param + * @param timeOut the timeout for the a device to give a reponse + * @param ttl the UDP socket packets time to live + * @param mx discovery message mx http header field value + * @param searchTarget the device URI to search + * @param ni the networkInterface where to search devices, null to lookup all interfaces + * @return an array of UPNP Root device that matches the search or null if nothing found within the given timeout. + * Null return does NOT means that no UPNP device is available on the network. It only means + * that for this given timeout no devices responded or that effectively no devices + * are available at all. + * @throws IOException if some IOException occurs during discovering + */ + public static UPNPRootDevice[] discover( int timeOut, int ttl, int mx, String searchTarget, NetworkInterface ni ) throws IOException { + return discoverDevices( timeOut, ttl, mx, searchTarget, ni ); + } + + private static UPNPRootDevice[] discoverDevices( int timeOut, int ttl, int mx, String searchTarget, NetworkInterface ni ) throws IOException { + if ( searchTarget == null || searchTarget.trim().length() == 0 ) { + throw new IllegalArgumentException( "Illegal searchTarget" ); + } + + final Map devices = new HashMap(); + + DiscoveryResultsHandler handler = new DiscoveryResultsHandler() { + + public void discoveredDevice( String usn, String udn, String nt, String maxAge, URL location, String firmware ) { + synchronized( devices ) { + if ( ! devices.containsKey( usn ) ) { + try { + UPNPRootDevice device = new UPNPRootDevice( location, maxAge, firmware, usn, udn ); + devices.put( usn, device ); + } catch ( Exception ex ) { + log.error( "Error occured during upnp root device object creation from location " + location, ex ); + } + } + } + } + }; + + DiscoveryListener.getInstance().registerResultsHandler( handler, searchTarget ); + if ( ni == null ) { + for ( Enumeration e = NetworkInterface.getNetworkInterfaces(); e.hasMoreElements(); ) { + NetworkInterface intf = (NetworkInterface)e.nextElement(); + for ( Enumeration adrs = intf.getInetAddresses(); adrs.hasMoreElements(); ) { + InetAddress adr = (InetAddress)adrs.nextElement(); + if ( adr instanceof Inet4Address && !adr.isLoopbackAddress() ) { + sendSearchMessage( adr, ttl, mx, searchTarget ); + } + } + } + } else { + for ( Enumeration adrs = ni.getInetAddresses(); adrs.hasMoreElements(); ) { + InetAddress adr = (InetAddress)adrs.nextElement(); + if ( adr instanceof Inet4Address && !adr.isLoopbackAddress() ) { + sendSearchMessage( adr, ttl, mx, searchTarget ); + } + } + } + + try { + Thread.sleep( timeOut ); + } catch ( InterruptedException ex ) { + // don't care + } + + DiscoveryListener.getInstance().unRegisterResultsHandler( handler, searchTarget ); + + if ( devices.size() == 0 ) { + return null; + } + int j = 0; + UPNPRootDevice[] rootDevices = new UPNPRootDevice[devices.size()]; + for ( Iterator i = devices.values().iterator(); i.hasNext(); ) { + rootDevices[j++] = (UPNPRootDevice)i.next(); + } + return rootDevices; + + } + + /** + * Sends an SSDP search message on the network + * @param src the sender ip + * @param ttl the time to live + * @param mx the mx field + * @param searchTarget the search target + * @throws IOException if some IO errors occurs during search + */ + public static void sendSearchMessage( InetAddress src, int ttl, int mx, String searchTarget ) throws IOException { + + int bindPort = DEFAULT_SSDP_SEARCH_PORT; + String port = System.getProperty( "net.sbbi.upnp.Discovery.bindPort" ); + if ( port != null ) { + bindPort = Integer.parseInt( port ); + } + InetSocketAddress adr = new InetSocketAddress( InetAddress.getByName( Discovery.SSDP_IP ), Discovery.SSDP_PORT ); + + java.net.MulticastSocket skt = new java.net.MulticastSocket( null ); + skt.bind( new InetSocketAddress( src, bindPort ) ); + skt.setTimeToLive( ttl ); + StringBuffer packet = new StringBuffer(); + packet.append( "M-SEARCH * HTTP/1.1\r\n" ); + packet.append( "HOST: 239.255.255.250:1900\r\n" ); + packet.append( "MAN: \"ssdp:discover\"\r\n" ); + packet.append( "MX: ").append( mx ).append( "\r\n" ); + packet.append( "ST: " ).append( searchTarget ).append( "\r\n" ).append( "\r\n" ); + if ( log.isDebugEnabled() ) log.debug( "Sending discovery message on 239.255.255.250:1900 multicast address form ip " + src.getHostAddress() + ":\n" + packet.toString() ); + String toSend = packet.toString(); + byte[] pk = toSend.getBytes(); + skt.send( new DatagramPacket( pk, pk.length, adr ) ); + skt.disconnect(); + skt.close(); + } + +} diff --git a/source/net/sbbi/upnp/DiscoveryAdvertisement.java b/source/net/sbbi/upnp/DiscoveryAdvertisement.java new file mode 100644 index 000000000..a88678c46 --- /dev/null +++ b/source/net/sbbi/upnp/DiscoveryAdvertisement.java @@ -0,0 +1,379 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * SSDP messages listener Thread, notify registered objects implementing the interface DiscoveryEventHandler
    + * when a device joins the networks or leaves it.
    + * The listener thread is set to only accept matching device description and broadcast message sender IP + * to avoid a security flaw with the protocol. If you are not happy with such behaviour + * you can set the net.sbbi.upnp.ddos.matchip system property to false to avoid this check. + * @author SuperBonBon + * @version 1.0 + */ + +public class DiscoveryAdvertisement implements Runnable { + + private final static Log log = LogFactory.getLog( DiscoveryAdvertisement.class ); + + private static boolean MATCH_IP = true; + + static { + String prop = System.getProperty( "net.sbbi.upnp.ddos.matchip" ); + if ( prop != null && prop.equals( "false" ) ) MATCH_IP = false; + } + + private static final int DEFAULT_TIMEOUT = 250; + + public final static int EVENT_SSDP_ALIVE = 0; + public final static int EVENT_SSDP_BYE_BYE = 1; + + private final static String NTS_SSDP_ALIVE = "ssdp:alive"; + private final static String NTS_SSDP_BYE_BYE = "ssdp:byebye"; + private final static String NT_ALL_EVENTS = "DiscoveryAdvertisement:nt:allevents"; + + private Map byeByeRegistered = new HashMap(); + private Map aliveRegistered = new HashMap(); + private Map USNPerIP = new HashMap(); + + private final Object REGISTRATION_PROCESS = new Object(); + + private final static DiscoveryAdvertisement singleton = new DiscoveryAdvertisement(); + private boolean inService = false; + private boolean daemon = true; + + private java.net.MulticastSocket skt; + private DatagramPacket input; + + private DiscoveryAdvertisement() { + } + + public final static DiscoveryAdvertisement getInstance() { + return singleton; + } + + public void setDaemon( boolean daemon ) { + this.daemon = daemon; + } + + /** + * Registers an event category sent by UPNP devices + * @param notificationEvent the event type, either DiscoveryAdvertisement.EVENT_SSDP_ALIVE + * or DiscoveryAdvertisement.EVENT_SSDP_BYE_BYE + * @param nt the type of device advertisement, upnp:rootdevice will return you all advertisement in relation with nt upnp:rootdevice + * a null value specify that all nt type are wanted + * @param eventHandler the events handler, this objet will receive notifications.. + * @throws IOException if an error ocurs when the SSDP events listeners threads starts + */ + public void registerEvent( int notificationEvent, String nt, DiscoveryEventHandler eventHandler ) throws IOException { + synchronized( REGISTRATION_PROCESS ) { + if ( !inService ) startDevicesListenerThread(); + if ( nt == null ) nt = NT_ALL_EVENTS; + if ( notificationEvent == EVENT_SSDP_ALIVE ) { + Set handlers = (Set)aliveRegistered.get( nt ); + if ( handlers == null ) { + handlers = new HashSet(); + aliveRegistered.put( nt, handlers ); + } + handlers.add( eventHandler ); + } else if ( notificationEvent == EVENT_SSDP_BYE_BYE ) { + Set handlers = (Set)byeByeRegistered.get( nt ); + if ( handlers == null ) { + handlers = new HashSet(); + byeByeRegistered.put( nt, handlers ); + } + handlers.add( eventHandler ); + } else { + throw new IllegalArgumentException( "Unknown notificationEvent type" ); + } + } + } + + /** + * Unregisters an event category sent by UPNP devices + * @param notificationEvent the event type, either DiscoveryAdvertisement.EVENT_SSDP_ALIVE + * or DiscoveryAdvertisement.EVENT_SSDP_BYE_BYE + * @param nt the type of device advertisement, upnp:rootdevice will unregister all advertisement in relation with nt upnp:rootdevice + * a null value specify that all nt type are unregistered + * @param eventHandler the events handler that needs to be unregistred. + */ + public void unRegisterEvent( int notificationEvent, String nt, DiscoveryEventHandler eventHandler ) { + synchronized( REGISTRATION_PROCESS ) { + if ( nt == null ) nt = NT_ALL_EVENTS; + if ( notificationEvent == EVENT_SSDP_ALIVE ) { + Set handlers = (Set)aliveRegistered.get( nt ); + if ( handlers != null ) { + handlers.remove( eventHandler ); + if ( handlers.size() == 0 ) { + aliveRegistered.remove( nt ); + } + } + } else if ( notificationEvent == EVENT_SSDP_BYE_BYE ) { + Set handlers = (Set)byeByeRegistered.get( nt ); + if ( handlers != null ) { + handlers.remove( eventHandler ); + if ( handlers.size() == 0 ) { + byeByeRegistered.remove( nt ); + } + } + } else { + throw new IllegalArgumentException( "Unknown notificationEvent type" ); + } + if ( aliveRegistered.size() == 0 && byeByeRegistered.size() == 0 ) { + stopDevicesListenerThread(); + } + } + } + + private void startDevicesListenerThread() throws IOException { + synchronized( singleton ) { + if ( !inService ) { + this.startMultiCastSocket(); + Thread deamon = new Thread( this, "DiscoveryAdvertisement daemon" ); + deamon.setDaemon( daemon ); + deamon.start(); + // wait for the thread to be started + while( !inService ) { + // let's wait a few ms + try { + Thread.sleep( 2 ); + } catch( InterruptedException ex ) { + // don t care + } + } + } + } + } + + private void stopDevicesListenerThread() { + synchronized( singleton ) { + inService = false; + } + } + + private void startMultiCastSocket() throws IOException { + + skt = new java.net.MulticastSocket( null ); + skt.bind( new InetSocketAddress( InetAddress.getByName( "0.0.0.0" ), Discovery.SSDP_PORT ) ); + skt.setTimeToLive( Discovery.DEFAULT_TTL ); + skt.setSoTimeout( DEFAULT_TIMEOUT ); + skt.joinGroup( InetAddress.getByName( Discovery.SSDP_IP ) ); + + byte[] buf = new byte[2048]; + input = new DatagramPacket( buf, buf.length ); + + } + + public void run() { + if ( !Thread.currentThread().getName().equals( "DiscoveryAdvertisement daemon" ) ) { + throw new RuntimeException( "No right to call this method" ); + } + inService = true; + while ( inService ) { + try { + listenBroadCast(); + } catch ( SocketTimeoutException ex ) { + // ignoring + } catch ( IOException ioEx ) { + log.error( "IO Exception during UPNP DiscoveryAdvertisement messages listening thread", ioEx ); + } catch( Exception ex ) { + log.error( "Fatal Error during UPNP DiscoveryAdvertisement messages listening thread, thread will exit", ex ); + inService = false; + aliveRegistered.clear(); + byeByeRegistered.clear(); + USNPerIP.clear(); + } + } + + try { + skt.leaveGroup( InetAddress.getByName( Discovery.SSDP_IP ) ); + skt.close(); + } catch ( Exception ex ) { + // ignoring + } + } + + private void listenBroadCast() throws IOException { + + skt.receive( input ); + InetAddress from = input.getAddress(); + String received = new String( input.getData(), input.getOffset(), input.getLength() ); + HttpResponse msg = null; + try { + msg = new HttpResponse( received ); + } catch (IllegalArgumentException ex ) { + // crappy http sent + if ( log.isDebugEnabled() ) log.debug( "Skipping uncompliant HTTP message " + received ); + return; + } + String header = msg.getHeader(); + if ( header != null && header.startsWith( "NOTIFY" ) ) { + if ( log.isDebugEnabled() ) log.debug( received ); + String ntsField = msg.getHTTPHeaderField( "nts" ); + if( ntsField == null || ntsField.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'ntsField' field" ); + return; + } + if ( ntsField.equals( NTS_SSDP_ALIVE ) ) { + String deviceDescrLoc = msg.getHTTPHeaderField( "location" ); + if( deviceDescrLoc == null || deviceDescrLoc.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'location' field" ); + return; + } + URL loc = new URL( deviceDescrLoc ); + if ( MATCH_IP ) { + InetAddress locHost = InetAddress.getByName( loc.getHost() ); + if ( !from.equals( locHost ) ) { + log.warn( "Discovery message sender IP " + from + + " does not match device description IP " + locHost + + " skipping message, set the net.sbbi.upnp.ddos.matchip system property" + + " to false to avoid this check" ); + return; + } + } + + String nt = msg.getHTTPHeaderField( "nt" ); + if( nt == null || nt.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'nt' field" ); + return; + } + String maxAge = msg.getHTTPFieldElement( "Cache-Control", "max-age" ); + if( maxAge == null || maxAge.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'max-age' field" ); + return; + } + String usn = msg.getHTTPHeaderField( "usn" ); + if( usn == null || usn.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'usn' field" ); + return; + } + + USNPerIP.put( usn, from ); + String udn = usn; + int index = udn.indexOf( "::" ); + if ( index != -1 ) udn = udn.substring( 0, index ); + synchronized( REGISTRATION_PROCESS ) { + Set handlers = (Set)aliveRegistered.get( NT_ALL_EVENTS ); + if ( handlers != null ) { + for ( Iterator i = handlers.iterator(); i.hasNext(); ) { + DiscoveryEventHandler eventHandler = (DiscoveryEventHandler)i.next(); + eventHandler.eventSSDPAlive( usn, udn, nt, maxAge, loc ); + } + } + handlers = (Set)aliveRegistered.get( nt ); + if ( handlers != null ) { + for ( Iterator i = handlers.iterator(); i.hasNext(); ) { + DiscoveryEventHandler eventHandler = (DiscoveryEventHandler)i.next(); + eventHandler.eventSSDPAlive( usn, udn, nt, maxAge, loc ); + } + } + } + } else if ( ntsField.equals( NTS_SSDP_BYE_BYE ) ) { + String usn = msg.getHTTPHeaderField( "usn" ); + if( usn == null || usn.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'usn' field" ); + return; + } + String nt = msg.getHTTPHeaderField( "nt" ); + if( nt == null || nt.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'nt' field" ); + return; + } + + InetAddress originalAliveSenderIp = (InetAddress)USNPerIP.get( usn ); + if ( originalAliveSenderIp != null ) { + // we check that the sender ip of message for the usn + // match the sender ip of the alive message for wich the usn + // has been received + if ( !originalAliveSenderIp.equals( from ) ) { + // someone else is trying to say that the usn is leaving + // since IP do not match we skip the message + return; + } + } + + String udn = usn; + int index = udn.indexOf( "::" ); + if ( index != -1 ) udn = udn.substring( 0, index ); + synchronized( REGISTRATION_PROCESS ) { + Set handlers = (Set)byeByeRegistered.get( NT_ALL_EVENTS ); + if ( handlers != null ) { + for ( Iterator i = handlers.iterator(); i.hasNext(); ) { + DiscoveryEventHandler eventHandler = (DiscoveryEventHandler)i.next(); + eventHandler.eventSSDPByeBye( usn, udn, nt ); + } + } + handlers = (Set)byeByeRegistered.get( nt ); + if ( handlers != null ) { + for ( Iterator i = handlers.iterator(); i.hasNext(); ) { + DiscoveryEventHandler eventHandler = (DiscoveryEventHandler)i.next(); + eventHandler.eventSSDPByeBye( usn, udn, nt ); + } + } + } + } else { + log.warn( "Unvalid NTS field value (" + ntsField + ") received in NOTIFY message :" + received ); + } + } + } +} diff --git a/source/net/sbbi/upnp/DiscoveryEventHandler.java b/source/net/sbbi/upnp/DiscoveryEventHandler.java new file mode 100644 index 000000000..1685a6daa --- /dev/null +++ b/source/net/sbbi/upnp/DiscoveryEventHandler.java @@ -0,0 +1,76 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +/** + * Interface for object that want to receive events from the + * DiscoveryAdvertisement thread + * @author SuperBonBon + * @version 1.0 + */ + +public interface DiscoveryEventHandler { + + /** + * Called when a device joins the network or advertise it is still alive + * @param usn the device USN (udn::nt) + * @param udn the device UDN + * @param nt the device NT + * @param maxAge the device maxAge + * @param location the device location + */ + public void eventSSDPAlive( String usn, String udn, String nt, String maxAge, java.net.URL location ); + + /** + * Called when a device is leaving the network + * @param usn the device USN (udn::nt) + * @param udn the device UDN + * @param nt the device NT + */ + public void eventSSDPByeBye( String usn, String udn, String nt ); +} diff --git a/source/net/sbbi/upnp/DiscoveryListener.java b/source/net/sbbi/upnp/DiscoveryListener.java new file mode 100644 index 000000000..5924070d4 --- /dev/null +++ b/source/net/sbbi/upnp/DiscoveryListener.java @@ -0,0 +1,290 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * This class can be used to listen for UPNP devices responses when a search message is sent by a control point + * ( using the net.sbbi.upnp.Discovery.sendSearchMessage() method ) + * @author SuperBonBon + * @version 1.0 + */ + +public class DiscoveryListener implements Runnable { + + private final static Log log = LogFactory.getLog( DiscoveryListener.class ); + + private static boolean MATCH_IP = true; + + static { + String prop = System.getProperty( "net.sbbi.upnp.ddos.matchip" ); + if ( prop != null && prop.equals( "false" ) ) MATCH_IP = false; + } + + private static final int DEFAULT_TIMEOUT = 250; + + private Map registeredHandlers = new HashMap(); + + private final Object REGISTRATION_PROCESS = new Object(); + + private final static DiscoveryListener singleton = new DiscoveryListener(); + + private boolean inService = false; + private boolean daemon = true; + + private java.net.MulticastSocket skt; + private DatagramPacket input; + + private DiscoveryListener() { + } + + public final static DiscoveryListener getInstance() { + return singleton; + } + + /** + * Sets the listener as a daemon thread + * @param daemon daemon thread + */ + public void setDaemon( boolean daemon ) { + this.daemon = daemon; + } + + /** + * Registers an SSDP response message handler + * @param resultsHandler the SSDP response message handler + * @param searchTarget the search target + * @throws IOException if some errors occurs during SSDP search response messages listener thread startup + */ + public void registerResultsHandler( DiscoveryResultsHandler resultsHandler, String searchTarget ) throws IOException { + synchronized( REGISTRATION_PROCESS ) { + if ( !inService ) startDevicesListenerThread(); + Set handlers = (Set)registeredHandlers.get( searchTarget ); + if ( handlers == null ) { + handlers = new HashSet(); + registeredHandlers.put( searchTarget, handlers ); + } + handlers.add( resultsHandler ); + } + } + + /** + * Unregisters an SSDP response message handler + * @param resultsHandler the SSDP response message handler + * @param searchTarget the search target + */ + public void unRegisterResultsHandler( DiscoveryResultsHandler resultsHandler, String searchTarget ) { + synchronized( REGISTRATION_PROCESS ) { + Set handlers = (Set)registeredHandlers.get( searchTarget ); + if ( handlers != null ) { + handlers.remove( resultsHandler ); + if ( handlers.size() == 0 ) { + registeredHandlers.remove( searchTarget ); + } + } + if ( registeredHandlers.size() == 0 ) { + stopDevicesListenerThread(); + } + } + } + + private void startDevicesListenerThread() throws IOException { + synchronized( singleton ) { + if ( !inService ) { + + this.startMultiCastSocket(); + Thread deamon = new Thread( this, "DiscoveryListener daemon" ); + deamon.setDaemon( daemon ); + deamon.start(); + while ( !inService ) { + // wait for the thread to be started let's wait a few ms + try { + Thread.sleep( 2 ); + } catch( InterruptedException ex ) { + // don t care + } + } + } + } + } + + private void stopDevicesListenerThread() { + synchronized( singleton ) { + inService = false; + } + } + + private void startMultiCastSocket() throws IOException { + int bindPort = Discovery.DEFAULT_SSDP_SEARCH_PORT; + String port = System.getProperty( "net.sbbi.upnp.Discovery.bindPort" ); + if ( port != null ) { + bindPort = Integer.parseInt( port ); + } + + skt = new java.net.MulticastSocket( null ); + skt.bind( new InetSocketAddress( InetAddress.getByName( "0.0.0.0" ), bindPort ) ); + skt.setTimeToLive( Discovery.DEFAULT_TTL ); + skt.setSoTimeout( DEFAULT_TIMEOUT ); + skt.joinGroup( InetAddress.getByName( Discovery.SSDP_IP ) ); + + byte[] buf = new byte[2048]; + input = new DatagramPacket( buf, buf.length ); + + } + + public void run() { + if ( !Thread.currentThread().getName().equals( "DiscoveryListener daemon" ) ) { + throw new RuntimeException( "No right to call this method" ); + } + inService = true; + while ( inService ) { + try { + listenBroadCast(); + } catch ( SocketTimeoutException ex ) { + // ignoring + } catch ( IOException ioEx ) { + log.error( "IO Exception during UPNP DiscoveryListener messages listening thread", ioEx ); + } catch( Exception ex ) { + log.error( "Fatal Error during UPNP DiscoveryListener messages listening thread, thread will exit", ex ); + inService = false; + } + } + + try { + skt.leaveGroup( InetAddress.getByName( Discovery.SSDP_IP ) ); + skt.close(); + } catch ( Exception ex ) { + // ignoring + } + } + + private void listenBroadCast() throws IOException { + + skt.receive( input ); + InetAddress from = input.getAddress(); + String received = new String( input.getData(), input.getOffset(), input.getLength() ); + HttpResponse msg = null; + try { + msg = new HttpResponse( received ); + } catch (IllegalArgumentException ex ) { + // crappy http sent + if ( log.isDebugEnabled() ) log.debug( "Skipping uncompliant HTTP message " + received ); + return; + } + String header = msg.getHeader(); + if ( header != null && header.startsWith( "HTTP/1.1 200 OK" ) && msg.getHTTPHeaderField( "st" ) != null ) { + // probably a search repsonse ! + String deviceDescrLoc = msg.getHTTPHeaderField( "location" ); + if( deviceDescrLoc == null || deviceDescrLoc.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'location' field" ); + return; + } + URL loc = new URL( deviceDescrLoc ); + if ( MATCH_IP ) { + InetAddress locHost = InetAddress.getByName( loc.getHost() ); + if ( !from.equals( locHost ) ) { + log.warn( "Discovery message sender IP " + from + + " does not match device description IP " + locHost + + " skipping device, set the net.sbbi.upnp.ddos.matchip system property" + + " to false to avoid this check" ); + return; + } + } + if ( log.isDebugEnabled() ) log.debug( "Processing " + deviceDescrLoc + " device description location" ); + String st = msg.getHTTPHeaderField( "st" ); + if( st == null || st.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'st' field" ); + return; + } + String usn = msg.getHTTPHeaderField( "usn" ); + if( usn == null || usn.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'usn' field" ); + return; + } + String maxAge = msg.getHTTPFieldElement( "Cache-Control", "max-age" ); + if( maxAge == null || maxAge.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'max-age' field" ); + return; + } + String server = msg.getHTTPHeaderField( "server" ); + if( server == null || server.trim().length() == 0 ) { + if ( log.isDebugEnabled() ) log.debug( "Skipping SSDP message, missing HTTP header 'server' field" ); + return; + } + + String udn = usn; + int index = udn.indexOf( "::" ); + if ( index != -1 ) udn = udn.substring( 0, index ); + synchronized( REGISTRATION_PROCESS ) { + Set handlers = (Set)registeredHandlers.get( st ); + if ( handlers != null ) { + for ( Iterator i = handlers.iterator(); i.hasNext(); ) { + DiscoveryResultsHandler handler = (DiscoveryResultsHandler)i.next(); + handler.discoveredDevice( usn, udn, st, maxAge, loc, server ); + } + } + } + } else { + if ( log.isDebugEnabled() ) log.debug( "Skipping uncompliant HTTP message " + received ); + } + } +} diff --git a/source/net/sbbi/upnp/DiscoveryResultsHandler.java b/source/net/sbbi/upnp/DiscoveryResultsHandler.java new file mode 100644 index 000000000..1074bcac5 --- /dev/null +++ b/source/net/sbbi/upnp/DiscoveryResultsHandler.java @@ -0,0 +1,71 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +/** + * This interface can be use to register against the DiscoveryListener class + * to receive SSDP search responses. + * @author SuperBonBon + * @version 1.0 + */ + +public interface DiscoveryResultsHandler { + + /** + * Method called by the DiscoveryListener class when a search response message has been received from the + * network + * @param usn the device USN + * @param udn the device UDN + * @param nt the device NT + * @param maxAge the message max age + * @param location the device location + * @param firmware the device firmware + */ + public void discoveredDevice( String usn, String udn, String nt, String maxAge, java.net.URL location, String firmware ); + +} diff --git a/source/net/sbbi/upnp/HttpResponse.java b/source/net/sbbi/upnp/HttpResponse.java new file mode 100644 index 000000000..183d79d03 --- /dev/null +++ b/source/net/sbbi/upnp/HttpResponse.java @@ -0,0 +1,145 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +import java.util.HashMap; +import java.util.Map; +import java.util.StringTokenizer; + +/** + * A class to parse an HTTP response message. + * @author SuperBonBon + * @version 1.0 + */ + +public class HttpResponse { + + private String header; + private Map fields; + private String body; + + + /** + * Constructor of the response, will try to parse the raw response data + * @param rawHttpResponse the raw response data + * @throws IllegalArgumentException if some error occurs during parsing + */ + protected HttpResponse( String rawHttpResponse ) throws IllegalArgumentException { + if ( rawHttpResponse == null || rawHttpResponse.trim().length() == 0 ) { + throw new IllegalArgumentException( "Empty HTTP response message" ); + } + boolean bodyParsing = false; + StringBuffer bodyParsed = new StringBuffer(); + fields = new HashMap(); + String[] lines = rawHttpResponse.split( "\\r\\n" ); + this.header = lines[0].trim(); + + for ( int i = 1; i < lines.length; i++ ) { + + String line = lines[i]; + if ( line.length() == 0 ) { + // line break before body + bodyParsing = true; + } else if ( bodyParsing ) { + // we parse the message body + bodyParsed.append( line ).append( "\r\n" ); + } else { + // we parse the header + if ( line.length() > 0 ) { + int delim = line.indexOf( ':' ); + if ( delim != -1 ) { + String key = line.substring( 0, delim ).toUpperCase(); + String value = line.substring( delim + 1 ).trim(); + fields.put( key, value ); + } else { + throw new IllegalArgumentException( "Invalid HTTP message header :" + line ); + } + } + } + } + if ( bodyParsing ) { + body = bodyParsed.toString(); + } + } + + public String getHeader() { + return header; + } + + public String getBody() { + return body; + } + + public String getHTTPFieldElement( String fieldName, String elementName ) throws IllegalArgumentException { + String fieldNameValue = getHTTPHeaderField( fieldName ); + if ( fieldName!= null ) { + + StringTokenizer tokenizer = new StringTokenizer( fieldNameValue.trim(), "," ); + while (tokenizer.countTokens() > 0) { + String nextToken = tokenizer.nextToken().trim(); + if ( nextToken.startsWith( elementName ) ) { + int index = nextToken.indexOf( "=" ); + if ( index != -1 ) { + return nextToken.substring( index + 1 ).trim(); + } + } + } + } + throw new IllegalArgumentException( "HTTP element field " + elementName + " is not present" ); + } + + public String getHTTPHeaderField( String fieldName ) throws IllegalArgumentException { + String field = (String)fields.get( fieldName.toUpperCase() ); + if ( field == null ) { + throw new IllegalArgumentException( "HTTP field " + fieldName + " is not present"); + } + return field; + } + + +} diff --git a/source/net/sbbi/upnp/JXPathParser.java b/source/net/sbbi/upnp/JXPathParser.java new file mode 100644 index 000000000..d0aa8a37d --- /dev/null +++ b/source/net/sbbi/upnp/JXPathParser.java @@ -0,0 +1,95 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.commons.jxpath.xml.DOMParser; +import org.apache.commons.jxpath.xml.XMLParser; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Parser to use with JXPath, this is used to fix some problems encountered + * with some UPNP devices returning buggy xml docs... + * This parser acts like a wrapper and make some chars search and replace + * such as 0x0 with 0x20 to produce a valid XML doc. + * @author SuperBonBon + * @version 1.0 + */ +public class JXPathParser implements XMLParser { + + private final static Log log = LogFactory.getLog( JXPathParser.class ); + + private char buggyChar = (char)0; + + public Object parseXML( InputStream in ){ + StringBuffer xml = new StringBuffer(); + try { + byte[] buffer = new byte[512]; + int readen = 0; + while ( ( readen = in.read( buffer ) ) != -1 ) { + xml.append( new String( buffer, 0, readen ) ); + } + } catch ( IOException ex ) { + log.error( "IOException occured during XML reception", ex ); + return null; + } + String doc = xml.toString(); + log.debug( "Readen raw xml doc:\n" + doc ); + if ( doc.indexOf( buggyChar ) != -1 ) { + doc = doc.replace( buggyChar, ' ' ); + } + + ByteArrayInputStream in2 = new ByteArrayInputStream( doc.getBytes() ); + DOMParser parser = new DOMParser(); + return parser.parseXML( in2 ) ; + } +} diff --git a/source/net/sbbi/upnp/ServiceEventHandler.java b/source/net/sbbi/upnp/ServiceEventHandler.java new file mode 100644 index 000000000..480626277 --- /dev/null +++ b/source/net/sbbi/upnp/ServiceEventHandler.java @@ -0,0 +1,70 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +/** + * Interface to implement to receive notifications about state + * variables changes on au UPNP service. The object implementing this interface + * can be used with the ServicesEventing class register method to receive the + * desired notifications. + * @author SuperBonBon + * @version 1.0 + */ + +public interface ServiceEventHandler { + + /** + * Handle a var change, called each time a UPNP service fires a + * state variable eventing message.
    + * The code implemented in this method can block the thread. + * @param varName the state variable name + * @param newValue the new state variable value + */ + public void handleStateVariableEvent( String varName, String newValue ); + +} diff --git a/source/net/sbbi/upnp/ServiceEventMessageParser.java b/source/net/sbbi/upnp/ServiceEventMessageParser.java new file mode 100644 index 000000000..36b000cd6 --- /dev/null +++ b/source/net/sbbi/upnp/ServiceEventMessageParser.java @@ -0,0 +1,105 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +import java.util.HashMap; +import java.util.Map; + +import org.xml.sax.Attributes; + +/** + * Simple SAX handler for UPNP service event message parsing, this message is in SOAP format + * @author SuperBonBon + * @version 1.0 + */ + +public class ServiceEventMessageParser extends org.xml.sax.helpers.DefaultHandler { + + private boolean readPropertyName = false; + + private String currentPropName = null; + + private Map changedStateVars = new HashMap(); + + protected ServiceEventMessageParser() { + } + + public Map getChangedStateVars() { + return changedStateVars; + } + + public void characters( char[] ch, int start, int length ) { + if ( currentPropName != null ) { + String origChars = (String)changedStateVars.get( currentPropName ); + String newChars = new String( ch, start, length ); + if ( origChars == null ) { + changedStateVars.put( currentPropName, newChars ); + } else { + changedStateVars.put( currentPropName, origChars + newChars ); + } + } + } + + public void startElement( String uri, String localName, String qName, Attributes attributes ) { + if ( localName.equals( "property" ) ) { + readPropertyName = true; + } else if ( readPropertyName ) { + currentPropName = localName; + } + } + + public void endElement( String uri, String localName, String qName ) { + if ( currentPropName != null && localName.equals( currentPropName ) ) { + readPropertyName = false; + currentPropName = null; + } + } + +} + + diff --git a/source/net/sbbi/upnp/ServiceEventSubscription.java b/source/net/sbbi/upnp/ServiceEventSubscription.java new file mode 100644 index 000000000..8fbfa3b7f --- /dev/null +++ b/source/net/sbbi/upnp/ServiceEventSubscription.java @@ -0,0 +1,111 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +import java.net.InetAddress; +import java.net.URL; + +/** + * This class is used to provide information about a subscription done + * via the ServicesEventing class + * @author SuperBonBon + * @version 1.0 + */ + +public class ServiceEventSubscription { + + private String serviceType = null; + private String serviceId = null; + private URL serviceURL = null; + private String SID = null; + private InetAddress deviceIp = null; + private int durationTime = 0; + + public ServiceEventSubscription( String serviceType, String serviceId, URL serviceURL, + String sid, InetAddress deviceIp, int durationTime ) { + this.serviceType = serviceType; + this.serviceId = serviceId; + this.serviceURL = serviceURL; + SID = sid; + this.deviceIp = deviceIp; + this.durationTime = durationTime; + } + + public InetAddress getDeviceIp() { + return deviceIp; + } + + /** + * Subcription duration in seconds + * @return sub duration time, 0 for an infinite time + */ + public int getDurationTime() { + return durationTime; + } + + public String getServiceId() { + return serviceId; + } + + public String getServiceType() { + return serviceType; + } + + public URL getServiceURL() { + return serviceURL; + } + + /** + * The subscription ID returned by the UPNPDevice + * @return subscription id + */ + public String getSID() { + return SID; + } + +} diff --git a/source/net/sbbi/upnp/ServicesEventing.java b/source/net/sbbi/upnp/ServicesEventing.java new file mode 100644 index 000000000..8778192e0 --- /dev/null +++ b/source/net/sbbi/upnp/ServicesEventing.java @@ -0,0 +1,445 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.StringReader; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import net.sbbi.upnp.services.UPNPService; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.xml.sax.InputSource; + +/** + * This class can be used with the ServiceEventHandler interface + * to recieve notifications about state variables changes on + * a given UPNP service. + * @author SuperBonBon + * @version 1.0 + */ + +public class ServicesEventing implements Runnable { + + private final static Log log = LogFactory.getLog( ServicesEventing.class ); + + private final static ServicesEventing singleton = new ServicesEventing(); + private boolean inService = false; + + private boolean daemon = true; + private int daemonPort = 9999; + + private ServerSocket server = null; + + private List registered = new ArrayList(); + + private ServicesEventing() { + } + + public final static ServicesEventing getInstance() { + return singleton; + } + + /** + * Set the listeniner thread as a daemon, default to true. + * Only works when no more objects are registered. + * @param daemon the new thread type. + */ + public void setDaemon( boolean daemon ) { + this.daemon = daemon; + } + + /** + * Sets the listener thread port, default to 9999. + * Only works when no more objects are registered. + * @param daemonPort the new listening port + */ + public void setDaemonPort( int daemonPort ) { + this.daemonPort = daemonPort; + } + + /** + * Register state variable events notification for a device service + * @param service the service to register with + * @param handler the registrant object + * @param subscriptionDuration subscription time in seconds, -1 for infinite time + * @return the subscription duration returned by the device, 0 for an infinite duration or -1 if no subscription done + * @throws IOException if some IOException error happens during coms with the device + */ + public int register( UPNPService service, ServiceEventHandler handler, int subscriptionDuration ) throws IOException { + ServiceEventSubscription sub = registerEvent( service, handler, subscriptionDuration ); + if ( sub != null ) { + return sub.getDurationTime(); + } + return -1; + } + + /** + * Register state variable events notification for a device service + * @param service the service to register with + * @param handler the registrant object + * @param subscriptionDuration subscription time in seconds, -1 for infinite time + * @return an ServiceEventSubscription object instance containing all the required info or null if no subscription done + * @throws IOException if some IOException error happens during coms with the device + */ + public ServiceEventSubscription registerEvent( UPNPService service, ServiceEventHandler handler, int subscriptionDuration ) throws IOException { + + URL eventingLoc = service.getEventSubURL(); + + if ( eventingLoc != null ) { + + if ( !inService ) startServicesEventingThread(); + String duration = Integer.toString( subscriptionDuration ); + if ( subscriptionDuration == -1 ) { + duration = "infinite"; + } + + Subscription sub = lookupSubscriber( service, handler ); + if ( sub != null ) { + // allready registered let's try to unregister it + unRegister( service, handler ); + } + + StringBuffer packet = new StringBuffer( 64 ); + packet.append( "SUBSCRIBE " ).append( eventingLoc.getFile() ).append( " HTTP/1.1\r\n" ); + packet.append( "HOST: " ).append( eventingLoc.getHost() ).append( ":" ).append( eventingLoc.getPort() ).append( "\r\n" ); + packet.append( "CALLBACK: \r\n" ); + packet.append( "NT: upnp:event\r\n" ); + packet.append( "Connection: close\r\n" ); + packet.append( "TIMEOUT: Second-" ).append( duration ).append( "\r\n\r\n" ); + + Socket skt = new Socket( eventingLoc.getHost(), eventingLoc.getPort() ); + skt.setSoTimeout( 30000 ); // 30 secs timeout according to the specs + if ( log.isDebugEnabled() ) log.debug( packet ); + OutputStream out = skt.getOutputStream(); + out.write( packet.toString().getBytes() ); + out.flush(); + + InputStream in = skt.getInputStream(); + StringBuffer data = new StringBuffer(); + int readen = 0; + byte[] buffer = new byte[256]; + while ( ( readen = in.read( buffer ) ) != -1 ) { + data.append( new String( buffer, 0, readen ) ); + } + in.close(); + out.close(); + skt.close(); + if ( log.isDebugEnabled() ) log.debug( data.toString() ); + if ( data.toString().trim().length() > 0 ) { + HttpResponse resp = new HttpResponse( data.toString() ); + + if ( resp.getHeader().startsWith( "HTTP/1.1 200 OK" ) ) { + String sid = resp.getHTTPHeaderField( "SID" ); + String actualTimeout = resp.getHTTPHeaderField( "TIMEOUT" ); + int durationTime = 0; + // actualTimeout = Second-xxx or Second-infinite + if ( !actualTimeout.equalsIgnoreCase( "Second-infinite" ) ) { + durationTime = Integer.parseInt( actualTimeout.substring( 7 ) ); + } + sub = new Subscription(); + sub.handler = handler; + sub.sub = new ServiceEventSubscription( service.getServiceType(), service.getServiceId(), + service.getEventSubURL(), sid, skt.getInetAddress(), + durationTime ); + synchronized( registered ) { + registered.add( sub ); + } + return sub.sub; + } + } + } + return null; + + } + + private Subscription lookupSubscriber( UPNPService service, ServiceEventHandler handler ) { + synchronized( registered ) { + for ( Iterator i = registered.iterator(); i.hasNext(); ) { + Subscription sub = (Subscription)i.next(); + + if ( sub.handler == handler && + sub.sub.getServiceId().hashCode() == service.getServiceId().hashCode() && + sub.sub.getServiceType().hashCode() == service.getServiceType().hashCode() && + sub.sub.getServiceURL().equals( service.getEventSubURL() ) ) { + return sub; + } + } + } + return null; + } + + private Subscription lookupSubscriber( String sid, InetAddress deviceIp ) { + synchronized( registered ) { + for ( Iterator i = registered.iterator(); i.hasNext(); ) { + Subscription sub = (Subscription)i.next(); + + if ( sub.sub.getSID().equals( sid ) && sub.sub.getDeviceIp().equals( deviceIp ) ) { + return sub; + } + } + } + return null; + } + + private Subscription lookupSubscriber( String sid ) { + synchronized( registered ) { + for ( Iterator i = registered.iterator(); i.hasNext(); ) { + Subscription sub = (Subscription)i.next(); + + if ( sub.sub.getSID().equals( sid ) ) { + return sub; + } + } + } + return null; + } + + /** + * Unregisters events notifications from a service + * @param service the service that need to be unregistered + * @param handler the handler that registered for this service + * @return true if unregistered false otherwise ( the given handler never registred for the given service ) + * @throws IOException if some IOException error happens during coms with the device + */ + public boolean unRegister( UPNPService service, ServiceEventHandler handler ) throws IOException { + + URL eventingLoc = service.getEventSubURL(); + + if ( eventingLoc != null ) { + + Subscription sub = lookupSubscriber( service, handler ); + if ( sub != null ) { + synchronized( registered ) { + registered.remove( sub ); + } + if ( registered.size() == 0 ) { + stopServicesEventingThread(); + } + + StringBuffer packet = new StringBuffer( 64 ); + packet.append( "UNSUBSCRIBE " ).append( eventingLoc.getFile() ).append( " HTTP/1.1\r\n" ); + packet.append( "HOST: " ).append( eventingLoc.getHost() ).append( ":" ).append( eventingLoc.getPort() ).append( "\r\n" ); + packet.append( "SID: " ).append( sub.sub.getSID() ).append( "\r\n\r\n" ); + Socket skt = new Socket( eventingLoc.getHost(), eventingLoc.getPort() ); + skt.setSoTimeout( 30000 ); // 30 secs timeout according to the specs + if ( log.isDebugEnabled() ) log.debug( packet ); + OutputStream out = skt.getOutputStream(); + out.write( packet.toString().getBytes() ); + out.flush(); + + InputStream in = skt.getInputStream(); + StringBuffer data = new StringBuffer(); + int readen = 0; + byte[] buffer = new byte[256]; + while ( ( readen = in.read( buffer ) ) != -1 ) { + data.append( new String( buffer, 0, readen ) ); + } + in.close(); + out.close(); + skt.close(); + if ( log.isDebugEnabled() ) log.debug( data.toString() ); + if ( data.toString().trim().length() > 0 ) { + HttpResponse resp = new HttpResponse( data.toString() ); + if ( resp.getHeader().startsWith( "HTTP/1.1 200 OK" ) ) { + return true; + } + } + } + } + return false; + } + + + private void startServicesEventingThread() { + synchronized( singleton ) { + if ( !inService ) { + Thread deamon = new Thread( singleton, "ServicesEventing daemon" ); + deamon.setDaemon( daemon ); + inService = true; + deamon.start(); + } + } + } + + private void stopServicesEventingThread() { + synchronized( singleton ) { + inService = false; + try { + server.close(); + } catch ( IOException ex ) { + // should not happen + } + } + } + + public void run() { + // only the deamon thread is allowed to call such method + if ( !Thread.currentThread().getName().equals( "ServicesEventing daemon" ) ) return; + try { + server = new ServerSocket( daemonPort ); + } catch ( IOException ex ) { + log.error( "Error during daemon server socket on port " + daemonPort + " creation", ex ); + return; + } + while ( inService ) { + try { + Socket skt = server.accept(); + new Thread( new RequestProcessor( skt ) ).start(); + } catch ( IOException ioEx ) { + if ( inService ) { + log.error( "IO Exception during UPNP messages listening thread", ioEx ); + } + } + } + } + + private class Subscription { + private ServiceEventSubscription sub = null; + private ServiceEventHandler handler = null; + } + + private class RequestProcessor implements Runnable { + + private Socket client; + + private RequestProcessor( Socket client ) { + this.client = client; + } + + public void run() { + try { + client.setSoTimeout( 30000 ); + InputStream in = client.getInputStream(); + OutputStream out = client.getOutputStream(); + + int readen = 0; + StringBuffer data = new StringBuffer(); + byte[] buffer = new byte[256]; + boolean EOF = false; + while ( !EOF && ( readen = in.read( buffer ) ) != -1 ) { + data.append( new String( buffer, 0, readen ) ); + // avoid a strange behaviour with some impls.. the -1 is never reached and a sockettimeout occurs + // and a 0 byte is sent as the last byte + if ( data.charAt( data.length()-1 ) == (char)0 ) { + EOF = true; + } + } + + String packet = data.toString(); + if ( packet.trim().length() > 0 ) { + + if ( packet.indexOf( (char)0 ) != -1 ) packet = packet.replace( (char)0, ' ' ); + HttpResponse resp = new HttpResponse( packet ); + if ( resp.getHeader().startsWith( "NOTIFY" ) ) { + + String sid = resp.getHTTPHeaderField( "SID" ); + InetAddress deviceIp = client.getInetAddress(); + String postURL = resp.getHTTPHeaderField( "SID" ); + Subscription subscription = null; + if ( sid != null && postURL != null ) { + subscription = lookupSubscriber( sid, deviceIp ); + if ( subscription == null ) { + // not found maybe that the IP is not the same + subscription = lookupSubscriber( sid ); + } + } + if ( subscription != null ) { + // respond ok + out.write( "HTTP/1.1 200 OK\r\n".getBytes() ); + } else { + // unknown sid respond ko + out.write( "HTTP/1.1 412 Precondition Failed\r\n".getBytes() ); + } + + out.flush(); + in.close(); + out.close(); + client.close(); + + if ( subscription != null ) { + // let's parse it + SAXParserFactory saxParFact = SAXParserFactory.newInstance(); + saxParFact.setValidating( false ); + saxParFact.setNamespaceAware( true ); + SAXParser parser = saxParFact.newSAXParser(); + ServiceEventMessageParser msgParser = new ServiceEventMessageParser(); + StringReader stringReader = new StringReader( resp.getBody() ); + InputSource src = new InputSource( stringReader ); + parser.parse( src, msgParser ); + + Map changedStateVars = msgParser.getChangedStateVars(); + for ( Iterator i = changedStateVars.keySet().iterator(); i.hasNext(); ) { + String stateVarName = (String)i.next(); + String stateVarNewVal = (String)changedStateVars.get( stateVarName ); + subscription.handler.handleStateVariableEvent( stateVarName, stateVarNewVal ); + } + } + } + } + } catch ( IOException ioEx ) { + log.error( "IO Exception during client processing thread", ioEx ); + } catch( Exception ex ) { + log.error( "Unexpected error during client processing thread", ex ); + } + } + } +} diff --git a/source/net/sbbi/upnp/devices/DeviceIcon.java b/source/net/sbbi/upnp/devices/DeviceIcon.java new file mode 100644 index 000000000..7037a496b --- /dev/null +++ b/source/net/sbbi/upnp/devices/DeviceIcon.java @@ -0,0 +1,86 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.devices; + +import java.net.*; + +/** + * Java Bean for a device icon properties + * @author SuperBonBon + * @version 1.0 + */ + +public class DeviceIcon { + + protected String mimeType; + protected int width; + protected int height; + protected int depth; + protected URL url; + + public String getMimeType() { + return mimeType; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public int getDepth() { + return depth; + } + + public URL getUrl() { + return url; + } + +} diff --git a/source/net/sbbi/upnp/devices/UPNPDevice.java b/source/net/sbbi/upnp/devices/UPNPDevice.java new file mode 100644 index 000000000..c9f9e7450 --- /dev/null +++ b/source/net/sbbi/upnp/devices/UPNPDevice.java @@ -0,0 +1,298 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.devices; + +import net.sbbi.upnp.services.*; + +import java.util.*; +import java.net.*; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * This class represents an UPNP device, this device contains a set of services + * that will be needed to access the device functionalities. + * @author SuperBonBon + * @version 1.0 + */ + +public class UPNPDevice { + + private final static Log log = LogFactory.getLog( UPNPDevice.class ); + + protected String deviceType; + protected String friendlyName; + protected String manufacturer; + protected URL manufacturerURL; + protected URL presentationURL; + protected String modelDescription; + protected String modelName; + protected String modelNumber; + protected String modelURL; + protected String serialNumber; + protected String UDN; + protected String USN; + protected long UPC; + + protected List deviceIcons; + protected List services; + protected List childDevices; + + protected UPNPDevice parent; + + public URL getManufacturerURL() { + return manufacturerURL; + } + + /** + * Presentation URL + * @return URL the presenation URL, or null if the device does not provide + * such information + */ + public URL getPresentationURL() { + return presentationURL; + } + + public String getModelDescription() { + return modelDescription; + } + + public String getModelName() { + return modelName; + } + + public String getModelNumber() { + return modelNumber; + } + + public String getModelURL() { + return modelURL; + } + + public String getSerialNumber() { + return serialNumber; + } + + public String getUDN() { + return UDN; + } + + public String getUSN(){ + return USN; + } + + public long getUPC() { + return UPC; + } + + public String getDeviceType() { + return deviceType; + } + + public String getFriendlyName() { + return friendlyName; + } + + public String getManufacturer() { + return manufacturer; + } + + public boolean isRootDevice() { + return this instanceof UPNPRootDevice; + } + + /** + * Access to the device icons definitions + * @return a list containing DeviceIcon objects or null if no icons defined + */ + public List getDeviceIcons() { + return deviceIcons; + } + + /** + * Generates a list of all the child ( not only top level, full childrens hierarchy included ) + * UPNPDevice objects for this device. + * @return the generated list or null if no child devices bound + */ + public List getChildDevices() { + if ( childDevices == null ) return null; + List rtrVal = new ArrayList(); + for ( Iterator itr = childDevices.iterator(); itr.hasNext(); ) { + UPNPDevice device = (UPNPDevice)itr.next(); + rtrVal.add( device ); + List found = device.getChildDevices(); + if ( found != null ) { + rtrVal.addAll( found ); + } + } + return rtrVal; + + } + + /** + * Generates a list of all the child ( only top level ) + * UPNPDevice objects for this device. + * @return the generated list or null if no child devices bound + */ + public List getTopLevelChildDevices() { + if ( childDevices == null ) return null; + List rtrVal = new ArrayList(); + for ( Iterator itr = childDevices.iterator(); itr.hasNext(); ) { + UPNPDevice device = (UPNPDevice)itr.next(); + rtrVal.add( device ); + } + return rtrVal; + } + + /** + * Return the parent UPNPDevice, null if the device is an UPNPRootDevice + * @return the parent device instance + */ + public UPNPDevice getDirectParent() { + return parent; + } + + /** + * Looks for a child UPNP device definition file, + * the whole devices tree will be searched, starting from the current + * device node. + * @param deviceURI the device URI to search + * @return An UPNPDevice if anything matches or null + */ + public UPNPDevice getChildDevice( String deviceURI ) { + if ( log.isDebugEnabled() ) log.debug( "searching for device URI:" + deviceURI ); + if ( getDeviceType().equals( deviceURI ) ) return this; + if ( childDevices == null ) return null; + for ( Iterator itr = childDevices.iterator(); itr.hasNext(); ) { + UPNPDevice device = (UPNPDevice)itr.next(); + UPNPDevice found = device.getChildDevice( deviceURI ); + if ( found != null ) { + return found; + } + } + return null; + } + + /** + * Looks for all UPNP device service definitions objects + * @return A list of all device services + */ + public List getServices() { + if ( services == null ) return null; + List rtrVal = new ArrayList(); + rtrVal.addAll( services ); + return rtrVal; + } + + /** + * Looks for a UPNP device service definition object for the given service URI (Type) + * @param serviceURI the URI of the service + * @return A matching UPNPService object or null + */ + public UPNPService getService( String serviceURI ) { + if ( services == null ) return null; + if ( log.isDebugEnabled() ) log.debug( "searching for service URI:" + serviceURI ); + for ( Iterator itr = services.iterator(); itr.hasNext(); ) { + UPNPService service = (UPNPService)itr.next(); + if ( service.getServiceType().equals( serviceURI ) ) { + return service; + } + } + return null; + } + + /** + * Looks for a UPNP device service definition object for the given service ID + * @param serviceURI the ID of the service + * @return A matching UPNPService object or null + */ + public UPNPService getServiceByID( String serviceID ) { + if ( services == null ) return null; + if ( log.isDebugEnabled() ) log.debug( "searching for service ID:" + serviceID ); + for ( Iterator itr = services.iterator(); itr.hasNext(); ) { + UPNPService service = (UPNPService)itr.next(); + if ( service.getServiceId().equals( serviceID ) ) { + return service; + } + } + return null; + } + + /** + * Looks for the all the UPNP device service definition object for the current + * UPNP device object. This method can be used to retreive multiple same kind + * ( same service type ) of services with different services id on a device + * @param serviceURI the URI of the service + * @return A matching List of UPNPService objects or null + */ + public List getServices( String serviceURI ) { + if ( services == null ) return null; + List rtrVal = new ArrayList(); + if ( log.isDebugEnabled() ) log.debug( "searching for services URI:" + serviceURI ); + for ( Iterator itr = services.iterator(); itr.hasNext(); ) { + UPNPService service = (UPNPService)itr.next(); + if ( service.getServiceType().equals( serviceURI ) ) { + rtrVal.add( service ); + } + } + if ( rtrVal.size() == 0 ) { + return null; + } + return rtrVal; + } + + /** + * The toString return the device type + * @return the device type + */ + public String toString() { + return getDeviceType(); + } + +} diff --git a/source/net/sbbi/upnp/devices/UPNPRootDevice.java b/source/net/sbbi/upnp/devices/UPNPRootDevice.java new file mode 100644 index 000000000..f11a31e0e --- /dev/null +++ b/source/net/sbbi/upnp/devices/UPNPRootDevice.java @@ -0,0 +1,450 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.devices; + +import java.net.*; +import java.util.*; +import java.io.*; + +import org.apache.commons.jxpath.*; +import org.apache.commons.jxpath.xml.*; +import org.apache.commons.logging.*; + +import net.sbbi.upnp.JXPathParser; +import net.sbbi.upnp.services.*; + +/** + * Root UPNP device that is contained in a device definition file. + * Slightly differs from a simple UPNPDevice object. + * This object will contains all the child devices, this is the top + * objet in the UPNP device devices hierarchy. + * @author SuperBonBon + * @version 1.0 + */ + +public class UPNPRootDevice extends UPNPDevice { + + private final static Log log = LogFactory.getLog( UPNPRootDevice.class ); + + private int specVersionMajor; + private int specVersionMinor; + private URL URLBase; + private long validityTime; + private long creationTime; + private URL deviceDefLoc; + private String deviceDefLocData; + private String vendorFirmware; + private String discoveryUSN; + private String discoveryUDN; + + private DocumentContainer UPNPDevice; + + /** + * Constructor for the root device, constructs itself from + * An xml device definition file provided by the UPNP device via http normally. + * @param deviceDefLoc the location of the XML device definition file + * using "the urn:schemas-upnp-org:device-1-0" namespace + * @param maxAge the maximum age of this UPNP device in secs before considered to be outdated + * @param vendorFirmware the vendor firmware + * @param discoveryUSN the discovery USN used to find and create this device + * @param discoveryUDN the discovery UDN used to find and create this device + * @throws MalformedURLException if the location URL is invalid and cannot be used to populate this root object and its child devices + * IllegalStateException if the device has an unsupported version, currently only version 1.0 is supported + */ + public UPNPRootDevice( URL deviceDefLoc, String maxAge, String vendorFirmware, String discoveryUSN, String discoveryUDN ) throws MalformedURLException, IllegalStateException { + this( deviceDefLoc, maxAge ); + this.vendorFirmware = vendorFirmware; + this.discoveryUSN = discoveryUSN; + this.discoveryUDN = discoveryUDN; + } + + /** + * Constructor for the root device, constructs itself from + * An xml device definition file provided by the UPNP device via http normally. + * @param deviceDefLoc the location of the XML device definition file + * using "the urn:schemas-upnp-org:device-1-0" namespace + * @param maxAge the maximum age of this UPNP device in secs before considered to be outdated + * @param vendorFirmware the vendor firmware + * @throws MalformedURLException if the location URL is invalid and cannot be used to populate this root object and its child devices + * IllegalStateException if the device has an unsupported version, currently only version 1.0 is supported + */ + public UPNPRootDevice( URL deviceDefLoc, String maxAge, String vendorFirmware ) throws MalformedURLException, IllegalStateException { + this( deviceDefLoc, maxAge ); + this.vendorFirmware = vendorFirmware; + } + + /** + * Constructor for the root device, constructs itself from + * An xml device definition file provided by the UPNP device via http normally. + * @param deviceDefLoc the location of the XML device definition file + * using "the urn:schemas-upnp-org:device-1-0" namespace + * @param maxAge the maximum age in secs of this UPNP device before considered to be outdated + * @throws MalformedURLException if the location URL is invalid and cannot be used to populate this root object and its child devices + * IllegalStateException if the device has an unsupported version, currently only version 1.0 is supported + */ + public UPNPRootDevice( URL deviceDefLoc, String maxAge ) throws MalformedURLException, IllegalStateException { + this.deviceDefLoc = deviceDefLoc; + DocumentContainer.registerXMLParser( DocumentContainer.MODEL_DOM, new JXPathParser() ); + UPNPDevice = new DocumentContainer( deviceDefLoc, DocumentContainer.MODEL_DOM ); + validityTime = Integer.parseInt( maxAge ) * 1000; + creationTime = System.currentTimeMillis(); + + JXPathContext context = JXPathContext.newContext( this ); + Pointer rootPtr = context.getPointer( "UPNPDevice/root" ); + JXPathContext rootCtx = context.getRelativeContext( rootPtr ); + + specVersionMajor = Integer.parseInt( (String)rootCtx.getValue( "specVersion/major" ) ); + specVersionMinor = Integer.parseInt( (String)rootCtx.getValue( "specVersion/minor" ) ); + + if ( !( specVersionMajor == 1 && specVersionMinor == 0 ) ) { + throw new IllegalStateException( "Unsupported device version (" + specVersionMajor + "." + specVersionMinor + ")" ); + } + boolean buildURLBase = true; + String base = null; + try { + base = (String)rootCtx.getValue( "URLBase" ); + if ( base != null && base.trim().length() > 0 ) { + URLBase = new URL( base ); + if ( log.isDebugEnabled() ) log.debug( "device URLBase " + URLBase ); + buildURLBase = false; + } + } catch ( JXPathException ex ) { + // URLBase is not mandatory we assume we use the URL of the device + } catch ( MalformedURLException malformedEx ) { + // crappy urlbase provided + log.warn( "Error occured during device baseURL " + base + " parsing, building it from device default location", malformedEx ); + } + if ( buildURLBase ) { + String URL = deviceDefLoc.getProtocol() + "://" + deviceDefLoc.getHost() + ":" + deviceDefLoc.getPort(); + String path = deviceDefLoc.getPath(); + if ( path != null ) { + int lastSlash = path.lastIndexOf( '/' ); + if ( lastSlash != -1 ) { + URL += path.substring( 0, lastSlash ); + } + } + URLBase = new URL( URL ); + } + Pointer devicePtr = rootCtx.getPointer( "device" ); + JXPathContext deviceCtx = rootCtx.getRelativeContext( devicePtr ); + + fillUPNPDevice( this, null, deviceCtx, URLBase ); + } + + /** + * The validity time for this device in milliseconds, + * @return the number of milliseconds remaining before the device object that has been build is considered to + * be outdated, after this delay the UPNP device should resend an advertisement message or a negative value + * if the device is outdated + */ + public long getValidityTime() { + long elapsed = System.currentTimeMillis() - creationTime; + return validityTime - elapsed; + } + + /** + * Resets the device validity time + * @param newMaxAge the maximum age in secs of this UPNP device before considered to be outdated + */ + public void resetValidityTime( String newMaxAge ) { + validityTime = Integer.parseInt( newMaxAge ) * 1000; + creationTime = System.currentTimeMillis(); + } + + /** + * Retreives the device description file location + * @return an URL + */ + public URL getDeviceDefLoc() { + return deviceDefLoc; + } + + public int getSpecVersionMajor() { + return specVersionMajor; + } + + public int getSpecVersionMinor() { + return specVersionMinor; + } + + public String getVendorFirmware() { + return vendorFirmware; + } + + public String getDiscoveryUSN() { + return discoveryUSN; + } + + public String getDiscoveryUDN() { + return discoveryUDN; + } + + /** + * URL base acces + * @return URL the URL base, or null if the device does not provide + * such information + */ + public URL getURLBase() { + return URLBase; + } + + /** + * Parsing an UPNPdevice description element () in the description XML file + * @param device the device object that will be populated + * @param parent the device parent object + * @param deviceCtx an XPath context for object population + * @param baseURL the base URL of the UPNP device + * @throws MalformedURLException if some URL provided in the description file is invalid + */ + private void fillUPNPDevice( UPNPDevice device, UPNPDevice parent, JXPathContext deviceCtx, URL baseURL ) throws MalformedURLException { + + device.deviceType = getMandatoryData( deviceCtx, "deviceType" ); + if ( log.isDebugEnabled() ) log.debug( "parsing device " + device.deviceType ); + device.friendlyName = getMandatoryData( deviceCtx, "friendlyName" ); + device.manufacturer = getNonMandatoryData( deviceCtx, "manufacturer" ); + String base = getNonMandatoryData( deviceCtx, "manufacturerURL" ); + try { + if ( base != null ) device.manufacturerURL = new URL( base ); + } catch ( java.net.MalformedURLException ex ) { + // crappy data provided, keep the field null + } + try { + device.presentationURL = getURL( getNonMandatoryData( deviceCtx, "presentationURL" ), URLBase ); + } catch ( java.net.MalformedURLException ex ) { + // crappy data provided, keep the field null + } + device.modelDescription = getNonMandatoryData( deviceCtx, "modelDescription" ); + device.modelName = getMandatoryData( deviceCtx, "modelName" ); + device.modelNumber = getNonMandatoryData( deviceCtx, "modelNumber" ); + device.modelURL = getNonMandatoryData( deviceCtx, "modelURL" ); + device.serialNumber = getNonMandatoryData( deviceCtx, "serialNumber" ); + device.UDN = getMandatoryData( deviceCtx, "UDN" ); + device.USN = UDN.concat( "::" ).concat( deviceType ); + String tmp = getNonMandatoryData( deviceCtx, "UPC" ); + if ( tmp != null ) { + try { + device.UPC = Long.parseLong( tmp ); + } catch ( Exception ex ) { + // non all numeric field provided, non upnp compliant device + } + } + device.parent = parent; + + fillUPNPServicesList( device, deviceCtx ); + fillUPNPDeviceIconsList( device, deviceCtx, URLBase ); + + Pointer deviceListPtr; + try { + deviceListPtr = deviceCtx.getPointer( "deviceList" ); + } catch ( JXPathException ex ) { + // no pointers for this device list, this can happen + // if the device has no child devices, simply returning + return; + } + JXPathContext deviceListCtx = deviceCtx.getRelativeContext( deviceListPtr ); + Double arraySize = (Double)deviceListCtx.getValue( "count( device )" ); + device.childDevices = new ArrayList(); + if ( log.isDebugEnabled() ) log.debug( "child devices count is " + arraySize ); + for ( int i = 1; i <= arraySize.intValue(); i++ ) { + Pointer devicePtr = deviceListCtx.getPointer( "device[" + i + "]" ); + JXPathContext childDeviceCtx = deviceListCtx.getRelativeContext( devicePtr ); + UPNPDevice childDevice = new UPNPDevice(); + fillUPNPDevice( childDevice, device, childDeviceCtx, baseURL ); + if ( log.isDebugEnabled() ) log.debug( "adding child device " + childDevice.getDeviceType() ); + device.childDevices.add( childDevice ); + } + } + + private String getMandatoryData( JXPathContext ctx, String ctxFieldName ) { + String value = (String)ctx.getValue( ctxFieldName ); + if ( value != null && value.length() == 0 ) { + throw new JXPathException( "Mandatory field " + ctxFieldName + " not provided, uncompliant UPNP device !!" ); + } + return value; + } + + private String getNonMandatoryData( JXPathContext ctx, String ctxFieldName ) { + String value = null; + try { + value = (String)ctx.getValue( ctxFieldName ); + if ( value != null && value.length() == 0 ) { + value = null; + } + } catch ( JXPathException ex ) { + value = null; + } + return value; + } + + /** + * Parsing an UPNPdevice services list element () in the description XML file + * @param device the device object that will store the services list (UPNPService) objects + * @param deviceCtx an XPath context for object population + * @throws MalformedURLException if some URL provided in the description + * file for a service entry is invalid + */ + private void fillUPNPServicesList( UPNPDevice device, JXPathContext deviceCtx ) throws MalformedURLException { + Pointer serviceListPtr = deviceCtx.getPointer( "serviceList" ); + JXPathContext serviceListCtx = deviceCtx.getRelativeContext( serviceListPtr ); + Double arraySize = (Double)serviceListCtx.getValue( "count( service )" ); + if ( log.isDebugEnabled() ) log.debug( "device services count is " + arraySize ); + device.services = new ArrayList(); + for ( int i = 1; i <= arraySize.intValue(); i++ ) { + + Pointer servicePtr = serviceListCtx.getPointer( "service["+i+"]" ); + JXPathContext serviceCtx = serviceListCtx.getRelativeContext( servicePtr ); + // TODO possibility of bugs if deviceDefLoc contains a file name + URL base = URLBase != null ? URLBase : deviceDefLoc; + UPNPService service = new UPNPService( serviceCtx, base, this ); + device.services.add( service ); + } + } + + /** + * Parsing an UPNPdevice icons list element () in the description XML file + * This list can be null + * @param device the device object that will store the icons list (DeviceIcon) objects + * @param deviceCtx an XPath context for object population + * @throws MalformedURLException if some URL provided in the description + * file for an icon URL + */ + private void fillUPNPDeviceIconsList( UPNPDevice device, JXPathContext deviceCtx, URL baseURL ) throws MalformedURLException { + Pointer iconListPtr; + try { + iconListPtr = deviceCtx.getPointer( "iconList" ); + } catch ( JXPathException ex ) { + // no pointers for icons list, this can happen + // simply returning + return; + } + JXPathContext iconListCtx = deviceCtx.getRelativeContext( iconListPtr ); + Double arraySize = (Double)iconListCtx.getValue( "count( icon )" ); + if ( log.isDebugEnabled() ) log.debug( "device icons count is " + arraySize ); + device.deviceIcons = new ArrayList(); + for ( int i = 1; i <= arraySize.intValue(); i++ ) { + + DeviceIcon ico = new DeviceIcon(); + ico.mimeType = (String)iconListCtx.getValue( "icon["+i+"]/mimetype" ); + ico.width = Integer.parseInt( (String)iconListCtx.getValue( "icon["+i+"]/width" ) ); + ico.height = Integer.parseInt( (String)iconListCtx.getValue( "icon["+i+"]/height" ) ); + ico.depth = Integer.parseInt( (String)iconListCtx.getValue( "icon["+i+"]/depth" ) ); + ico.url = getURL( (String)iconListCtx.getValue( "icon["+i+"]/url" ), baseURL ); + if ( log.isDebugEnabled() ) log.debug( "icon URL is " + ico.url ); + device.deviceIcons.add( ico ); + } + } + + /** + * Parsing an URL from the descriptionXML file + * @param url the string representation fo the URL + * @param baseURL the base device URL, needed if the url param is relative + * @return an URL object defining the url param + * @throws MalformedURLException if the url param or baseURL.toExternalForm() + url + * cannot be parsed to create an URL object + */ + public final static URL getURL( String url, URL baseURL ) throws MalformedURLException { + URL rtrVal; + if ( url == null || url.trim().length() == 0 ) return null; + try { + rtrVal = new URL( url ); + } catch ( MalformedURLException malEx ) { + // maybe that the url is relative, we add the baseURL and reparse it + // if relative then we take the device baser url root and add the url + if ( baseURL != null ) { + url = url.replace( '\\', '/' ); + if ( url.charAt( 0 ) != '/' ) { + // the path is relative to the device baseURL + String externalForm = baseURL.toExternalForm(); + if ( !externalForm.endsWith( "/" ) ) { + externalForm += "/"; + } + rtrVal = new URL( externalForm + url ); + } else { + // the path is not relative + String URLRoot = baseURL.getProtocol() + "://" + baseURL.getHost() + ":" + baseURL.getPort(); + rtrVal = new URL( URLRoot + url ); + } + } else { + throw malEx; + } + } + return rtrVal; + } + + /** + * Retrieves the device definition XML data + * @return the device definition XML data as a String + */ + public String getDeviceDefLocData() { + if ( deviceDefLocData == null ) { + try { + java.io.InputStream in = deviceDefLoc.openConnection().getInputStream(); + int readen = 0; + byte[] buff = new byte[512]; + StringBuffer strBuff = new StringBuffer(); + while( ( readen = in.read( buff ) ) != -1 ) { + strBuff.append( new String( buff, 0, readen ) ); + } + in.close(); + deviceDefLocData = strBuff.toString(); + } catch ( IOException ioEx ) { + return null; + } + } + return deviceDefLocData; + } + + /** + * Used for JXPath parsing, do not use this method + * @return a Container object for Xpath parsing capabilities + */ + public Container getUPNPDevice() { + return UPNPDevice; + } + +} diff --git a/source/net/sbbi/upnp/impls/InternetGatewayDevice.java b/source/net/sbbi/upnp/impls/InternetGatewayDevice.java new file mode 100644 index 000000000..a82b2ac3c --- /dev/null +++ b/source/net/sbbi/upnp/impls/InternetGatewayDevice.java @@ -0,0 +1,506 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.impls; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.UnknownHostException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import net.sbbi.upnp.Discovery; +import net.sbbi.upnp.devices.UPNPDevice; +import net.sbbi.upnp.devices.UPNPRootDevice; +import net.sbbi.upnp.messages.ActionMessage; +import net.sbbi.upnp.messages.ActionResponse; +import net.sbbi.upnp.messages.StateVariableMessage; +import net.sbbi.upnp.messages.StateVariableResponse; +import net.sbbi.upnp.messages.UPNPMessageFactory; +import net.sbbi.upnp.messages.UPNPResponseException; +import net.sbbi.upnp.services.UPNPService; + +/** + * This class can be used to access some funtionalities on the + * InternetGatewayDevice on your network without having to know + * anything about the required input/output parameters. + * All device functions are not provided. + * @author SuperBonBon + * @version 1.0 + */ +public class InternetGatewayDevice { + + private final static Log log = LogFactory.getLog( InternetGatewayDevice.class ); + + private UPNPRootDevice igd; + private UPNPMessageFactory msgFactory; + + public InternetGatewayDevice( UPNPRootDevice igd ) throws UnsupportedOperationException { + this( igd, true, true ); + } + + private InternetGatewayDevice( UPNPRootDevice igd, boolean WANIPConnection, boolean WANPPPConnection ) throws UnsupportedOperationException { + this.igd = igd; + UPNPDevice myIGDWANConnDevice = igd.getChildDevice( "urn:schemas-upnp-org:device:WANConnectionDevice:1" ); + if ( myIGDWANConnDevice == null ) { + throw new UnsupportedOperationException( "device urn:schemas-upnp-org:device:WANConnectionDevice:1 not supported by IGD device " + igd.getModelName() ); + } + + UPNPService wanIPSrv = myIGDWANConnDevice.getService( "urn:schemas-upnp-org:service:WANIPConnection:1" ); + UPNPService wanPPPSrv = myIGDWANConnDevice.getService( "urn:schemas-upnp-org:service:WANPPPConnection:1" ); + + if ( ( WANIPConnection && WANPPPConnection ) && ( wanIPSrv == null && wanPPPSrv == null ) ) { + throw new UnsupportedOperationException( "Unable to find any urn:schemas-upnp-org:service:WANIPConnection:1 or urn:schemas-upnp-org:service:WANPPPConnection:1 service" ); + } else if ( ( WANIPConnection && !WANPPPConnection ) && wanIPSrv == null ) { + throw new UnsupportedOperationException( "Unable to find any urn:schemas-upnp-org:service:WANIPConnection:1 service" ); + } else if ( ( !WANIPConnection && WANPPPConnection ) && wanPPPSrv == null ) { + throw new UnsupportedOperationException( "Unable to find any urn:schemas-upnp-org:service:WANPPPConnection:1 service" ); + } + + if ( wanIPSrv != null && wanPPPSrv == null ) { + msgFactory = UPNPMessageFactory.getNewInstance( wanIPSrv ); + } else if ( wanPPPSrv != null && wanIPSrv == null ) { + msgFactory = UPNPMessageFactory.getNewInstance( wanPPPSrv ); + } else { + // Unable to test the following code since no router implementing both IP and PPP connection on hands.. + /*// discover the active WAN interface using the WANCommonInterfaceConfig specs + UPNPDevice wanDevice = igd.getChildDevice( "urn:schemas-upnp-org:device:WANDevice:1" ); + UPNPService configService = wanDevice.getService( "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1" ); + if ( configService != null ) { + // retreive the first active connection + ServiceAction act = configService.getUPNPServiceAction( "GetActiveConnection" ); + if ( act != null ) { + UPNPMessageFactory msg = UPNPMessageFactory.getNewInstance( configService ); + String deviceContainer = null; + String serviceID = null; + try { + // always lookup for the first index of active connections. + ActionResponse resp = msg.getMessage( "GetActiveConnection" ).setInputParameter( "NewActiveConnectionIndex", 0 ).service(); + deviceContainer = resp.getOutActionArgumentValue( "NewActiveConnDeviceContainer" ); + serviceID = resp.getOutActionArgumentValue( "NewActiveConnectionServiceID" ); + } catch ( IOException ex ) { + // no response returned + } catch ( UPNPResponseException respEx ) { + // should never happen unless the damn thing is bugged + } + if ( deviceContainer != null && deviceContainer.trim().length() > 0 && + serviceID != null && serviceID.trim().length() > 0 ) { + for ( Iterator i = igd.getChildDevices().iterator(); i.hasNext(); ) { + UPNPDevice dv = (UPNPDevice)i.next(); + + if ( deviceContainer.startsWith( dv.getUDN() ) && + dv.getDeviceType().indexOf( ":WANConnectionDevice:" ) != -1 ) { + myIGDWANConnDevice = dv; + break; + } + } + msgFactory = UPNPMessageFactory.getNewInstance( myIGDWANConnDevice.getServiceByID( serviceID ) ); + } + } + }*/ + // Doing a tricky test with external IP address, the unactive interface should return a null value or none + if ( testWANInterface( wanIPSrv ) ) { + msgFactory = UPNPMessageFactory.getNewInstance( wanIPSrv ); + } else if( testWANInterface( wanPPPSrv ) ) { + msgFactory = UPNPMessageFactory.getNewInstance( wanPPPSrv ); + } + if ( msgFactory == null ) { + // Nothing found using WANCommonInterfaceConfig! IP by default + log.warn( "Unable to detect active WANIPConnection, dfaulting to urn:schemas-upnp-org:service:WANIPConnection:1" ); + msgFactory = UPNPMessageFactory.getNewInstance( wanIPSrv ); + } + } + } + + private boolean testWANInterface( UPNPService srv ) { + UPNPMessageFactory tmp = UPNPMessageFactory.getNewInstance( srv ); + + ActionMessage msg = tmp.getMessage( "GetExternalIPAddress" ); + String ipToParse = null; + try { + ipToParse = msg.service().getOutActionArgumentValue( "NewExternalIPAddress" ); + } catch ( UPNPResponseException ex ) { + // ok probably not the IP interface + } catch ( IOException ex ) { + // not really normal + log.warn( "IOException occured during device detection", ex ); + } + if ( ipToParse != null && ipToParse.length() > 0 && !ipToParse.equals( "0.0.0.0" ) ) { + try { + return InetAddress.getByName( ipToParse ) != null; + } catch ( UnknownHostException ex ) { + // ok a crappy IP provided, definitly the wrong interface.. + } + } + return false; + } + + /** + * Retreives the IDG UNPNRootDevice object + * @return the UNPNRootDevie object bound to this object + */ + public UPNPRootDevice getIGDRootDevice() { + return igd; + } + + /** + * Lookup all the IGD (IP or PPP) devices on the network. If a device implements both + * IP and PPP, the active service will be used for nat mappings. + * @param timeout the timeout in ms to listen for devices response, -1 for default value + * @return an array of devices to play with or null if nothing found. + * @throws IOException if some IO Exception occurs during discovery + */ + public static InternetGatewayDevice[] getDevices( int timeout ) throws IOException { + return lookupDeviceDevices( timeout, Discovery.DEFAULT_TTL, Discovery.DEFAULT_MX, true, true, null ); + } + + /** + * Lookup all the IGD (IP urn:schemas-upnp-org:service:WANIPConnection:1, or PPP urn:schemas-upnp-org:service:WANPPPConnection:1) + * devices for a given network interface. If a device implements both + * IP and PPP, the active service will be used for nat mappings. + * @param timeout the timeout in ms to listen for devices response, -1 for default value + * @param ttl the discovery ttl such as {@link net.sbbi.upnp.Discovery#DEFAULT_TTL} + * @param mx the discovery mx such as {@link net.sbbi.upnp.Discovery#DEFAULT_MX} + * @param ni the network interface where to lookup IGD devices + * @return an array of devices to play with or null if nothing found. + * @throws IOException if some IO Exception occurs during discovery + */ + public static InternetGatewayDevice[] getDevices( int timeout, int ttl, int mx, NetworkInterface ni ) throws IOException { + return lookupDeviceDevices( timeout, ttl, mx, true, true, ni ); + } + + /** + * Lookup all the IGD IP devices on the network (urn:schemas-upnp-org:service:WANIPConnection:1 service) + * @param timeout the timeout in ms to listen for devices response, -1 for default value + * @return an array of devices to play with or null if nothing found or if found devices + * do not have the urn:schemas-upnp-org:service:WANIPConnection:1 service + * @deprecated use generic {@link #getDevices(int)} or {@link #getDevices(int, int, int, NetworkInterface)} methods since this one is not + * usable with all IGD devices ( will only work with devices implementing the urn:schemas-upnp-org:service:WANIPConnection:1 service ) + */ + public static InternetGatewayDevice[] getIPDevices( int timeout ) throws IOException { + return lookupDeviceDevices( timeout, Discovery.DEFAULT_TTL, Discovery.DEFAULT_MX, true, false, null ); + } + + /** + * Lookup all the IGD PPP devices on the network (urn:schemas-upnp-org:service:WANPPPConnection:1 service) + * @param timeout the timeout in ms to listen for devices response, -1 for default value + * @return an array of devices to play with or null if nothing found or if found devices + * do not have the urn:schemas-upnp-org:service:WANPPPConnection:1 service + * @deprecated use generic {@link #getDevices(int)} or {@link #getDevices(int, int, int, NetworkInterface)} methods since this one is not + * usable with all IGD devices ( will only work with devices implementing the urn:schemas-upnp-org:service:WANPPPConnection:1 service ) + */ + public static InternetGatewayDevice[] getPPPDevices( int timeout ) throws IOException { + return lookupDeviceDevices( timeout, Discovery.DEFAULT_TTL, Discovery.DEFAULT_MX, false, true, null ); + } + + private static InternetGatewayDevice[] lookupDeviceDevices( int timeout, int ttl, int mx, boolean WANIPConnection, boolean WANPPPConnection, NetworkInterface ni ) throws IOException { + UPNPRootDevice[] devices = null; + InternetGatewayDevice[] rtrVal = null; + if ( timeout == -1 ) { + devices = Discovery.discover( Discovery.DEFAULT_TIMEOUT, ttl, mx, "urn:schemas-upnp-org:device:InternetGatewayDevice:1", ni ); + } else { + devices = Discovery.discover( timeout, ttl, mx, "urn:schemas-upnp-org:device:InternetGatewayDevice:1", ni ); + } + + if ( devices != null ) { + Set valid = new HashSet(); + for ( int i = 0; i < devices.length; i++ ) { + try { + valid.add( new InternetGatewayDevice( devices[i], WANIPConnection, WANPPPConnection ) ); + } catch ( UnsupportedOperationException ex ) { + // the device is either not IP or PPP + if ( log.isDebugEnabled() ) log.debug( "UnsupportedOperationException during discovery " + ex.getMessage() ); + } + } + if ( valid.size() == 0 ) { + return null; + } + rtrVal = new InternetGatewayDevice[valid.size()]; + int i = 0; + for ( Iterator itr = valid.iterator(); itr.hasNext(); ) { + rtrVal[i++] = (InternetGatewayDevice)itr.next(); + } + + } + return rtrVal; + } + + /** + * Retreives the external IP address + * @return a String representing the external IP + * @throws UPNPResponseException if the devices returns an error code + * @throws IOException if some error occurs during communication with the device + */ + public String getExternalIPAddress() throws UPNPResponseException, IOException { + ActionMessage msg = msgFactory.getMessage( "GetExternalIPAddress" ); + return msg.service().getOutActionArgumentValue( "NewExternalIPAddress" ); + } + + /** + * Retreives a generic port mapping entry. + * @param newPortMappingIndex the index to lookup in the nat table of the upnp device + * @return an action response Object containing the following fields : + * NewRemoteHost, NewExternalPort, NewProtocol, NewInternalPort, + * NewInternalClient, NewEnabled, NewPortMappingDescription, NewLeaseDuration or null if the index does not exists + * @throws IOException if some error occurs during communication with the device + * @throws UPNPResponseException if some unexpected error occurs on the UPNP device + */ + public ActionResponse getGenericPortMappingEntry( int newPortMappingIndex ) throws IOException, UPNPResponseException { + + ActionMessage msg = msgFactory.getMessage( "GetGenericPortMappingEntry" ); + msg.setInputParameter( "NewPortMappingIndex", newPortMappingIndex ); + + try { + return msg.service(); + } catch ( UPNPResponseException ex ) { + if ( ex.getDetailErrorCode() == 714 ) { + return null; + } + throw ex; + } + + } + + /** + * Retreives information about a specific port mapping + * @param remoteHost the remote host ip to check, null if wildcard + * @param externalPort the port to check + * @param protocol the protocol for the mapping, either TCP or UDP + * @return an action response Object containing the following fields : + * NewInternalPort, NewInternalClient, NewEnabled, NewPortMappingDescription, NewLeaseDuration or + * null if no such entry exists in the device NAT table + * @throws IOException if some error occurs during communication with the device + * @throws UPNPResponseException if some unexpected error occurs on the UPNP device + */ + public ActionResponse getSpecificPortMappingEntry( String remoteHost, int externalPort, String protocol ) throws IOException, UPNPResponseException { + remoteHost = remoteHost == null ? "" : remoteHost; + checkPortMappingProtocol( protocol ); + checkPortRange( externalPort ); + + ActionMessage msg = msgFactory.getMessage( "GetSpecificPortMappingEntry" ); + msg.setInputParameter( "NewRemoteHost", remoteHost ) + .setInputParameter( "NewExternalPort", externalPort ) + .setInputParameter( "NewProtocol", protocol ); + + try { + return msg.service(); + } catch ( UPNPResponseException ex ) { + if ( ex.getDetailErrorCode() == 714 ) { + return null; + } + throw ex; + } + } + + /** + * Configures a nat entry on the UPNP device. + * @param description the mapping description, null for no description + * @param remoteHost the remote host ip for this entry, null for a wildcard value + * @param internalPort the internal client port where data should be redirected + * @param externalPort the external port to open on the UPNP device an map on the internal client, 0 for a wildcard value + * @param internalClient the internal client ip where data should be redirected + * @param leaseDuration the lease duration in seconds 0 for an infinite time + * @param protocol the protocol, either TCP or UDP + * @return true if the port is mapped false if the mapping is allready done for another internal client + * @throws IOException if some error occurs during communication with the device + * @throws UPNPResponseException if the device does not accept some settings :
    + * 402 Invalid Args See UPnP Device Architecture section on Control
    + * 501 Action Failed See UPnP Device Architecture section on Control
    + * 715 WildCardNotPermittedInSrcIP The source IP address cannot be wild-carded
    + * 716 WildCardNotPermittedInExtPort The external port cannot be wild-carded
    + * 724 SamePortValuesRequired Internal and External port values must be the same
    + * 725 OnlyPermanentLeasesSupported The NAT implementation only supports permanent lease times on port mappings
    + * 726 RemoteHostOnlySupportsWildcard RemoteHost must be a wildcard and cannot be a specific IP address or DNS name
    + * 727 ExternalPortOnlySupportsWildcard ExternalPort must be a wildcard and cannot be a specific port value + */ + public boolean addPortMapping( String description, String remoteHost, + int internalPort, int externalPort, + String internalClient, int leaseDuration, + String protocol ) throws IOException, UPNPResponseException { + remoteHost = remoteHost == null ? "" : remoteHost; + checkPortMappingProtocol( protocol ); + if ( externalPort != 0 ) { + checkPortRange( externalPort ); + } + checkPortRange( internalPort ); + description = description == null ? "" : description; + if ( leaseDuration < 0 ) throw new IllegalArgumentException( "Invalid leaseDuration (" + leaseDuration + ") value" ); + + ActionMessage msg = msgFactory.getMessage( "AddPortMapping" ); + msg.setInputParameter( "NewRemoteHost", remoteHost ) + .setInputParameter( "NewExternalPort", externalPort ) + .setInputParameter( "NewProtocol", protocol ) + .setInputParameter( "NewInternalPort", internalPort ) + .setInputParameter( "NewInternalClient", internalClient ) + .setInputParameter( "NewEnabled", true ) + .setInputParameter( "NewPortMappingDescription", description ) + .setInputParameter( "NewLeaseDuration", leaseDuration ); + try { + msg.service(); + return true; + } catch ( UPNPResponseException ex ) { + if ( ex.getDetailErrorCode() == 718 ) { + return false; + } + throw ex; + } + } + + /** + * Deletes a port mapping on the IDG device + * @param remoteHost the host ip for which the mapping was done, null value for a wildcard value + * @param externalPort the port to close + * @param protocol the protocol for the mapping, TCP or UDP + * @return true if the port has been unmapped correctly otherwise false ( entry does not exists ). + * @throws IOException if some error occurs during communication with the device + * @throws UPNPResponseException if the devices returns an error message + */ + public boolean deletePortMapping( String remoteHost, int externalPort, String protocol ) throws IOException, UPNPResponseException { + + remoteHost = remoteHost == null ? "" : remoteHost; + checkPortMappingProtocol( protocol ); + checkPortRange( externalPort ); + ActionMessage msg = msgFactory.getMessage( "DeletePortMapping" ); + msg.setInputParameter( "NewRemoteHost", remoteHost ) + .setInputParameter( "NewExternalPort", externalPort ) + .setInputParameter( "NewProtocol", protocol ); + try { + msg.service(); + return true; + } catch ( UPNPResponseException ex ) { + if ( ex.getDetailErrorCode() == 714 ) { + return false; + } + throw ex; + } + } + + /** + * Retreives the current number of mapping in the NAT table + * @return the nat table current number of mappings or null if the device does not allow to query state variables + * @throws IOException if some error occurs during communication with the device + * @throws UPNPResponseException if the devices returns an error message with error code other than 404 + */ + public Integer getNatMappingsCount() throws IOException, UPNPResponseException { + + Integer rtrval = null; + StateVariableMessage natTableSize = msgFactory.getStateVariableMessage( "PortMappingNumberOfEntries" ); + try { + StateVariableResponse resp = natTableSize.service(); + rtrval = new Integer( resp.getStateVariableValue() ); + } catch ( UPNPResponseException ex ) { + // 404 can happen if device do not implement state variables queries + if ( ex.getDetailErrorCode() != 404 ) { + throw ex; + } + } + return rtrval; + } + + /** + * Computes the total entries in avaliable in the nat table size, not that this method is not guaranteed to work + * with all upnp devices since it is not an generic IGD command + * @return the number of entries or null if the NAT table size cannot be computed for the device + * @throws IOException if some error occurs during communication with the device + * @throws UPNPResponseException if the devices returns an error message with error code other than 713 or 402 + */ + public Integer getNatTableSize() throws IOException, UPNPResponseException { + + // first let's look at the first index.. some crappy devices do not start with index 0 + // we stop at index 50 + int startIndex = -1; + for ( int i = 0; i < 50; i++ ) { + try { + this.getGenericPortMappingEntry( i ); + startIndex = i; + break; + } catch ( UPNPResponseException ex ) { + // some devices return the 402 code + if ( ex.getDetailErrorCode() != 713 && ex.getDetailErrorCode() != 402 ) { + throw ex; + } + } + } + if ( startIndex == -1 ) { + // humm nothing found within the first 200 indexes.. + // returning null + return null; + } + int size = 0; + while ( true ) { + + try { + this.getGenericPortMappingEntry( startIndex++ ); + size++; + } catch ( UPNPResponseException ex ) { + if ( ex.getDetailErrorCode() == 713 || ex.getDetailErrorCode() == 402 ) { + /// ok index unknown + break; + } + throw ex; + } + } + return new Integer( size ); + } + + private void checkPortMappingProtocol( String prot ) throws IllegalArgumentException { + if ( prot == null || ( !prot.equals( "TCP" ) && !prot.equals( "UDP" ) ) ) + throw new IllegalArgumentException( "PortMappingProtocol must be either TCP or UDP" ); + } + + private void checkPortRange( int port ) throws IllegalArgumentException { + if ( port < 1 || port > 65535 ) + throw new IllegalArgumentException( "Port range must be between 1 and 65535" ); + } + + +} diff --git a/source/net/sbbi/upnp/messages/ActionMessage.java b/source/net/sbbi/upnp/messages/ActionMessage.java new file mode 100644 index 000000000..f10eb3fef --- /dev/null +++ b/source/net/sbbi/upnp/messages/ActionMessage.java @@ -0,0 +1,437 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.messages; + +import java.util.*; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.xml.sax.*; +import net.sbbi.upnp.services.*; + +import javax.xml.parsers.*; + +/** + * Message object for an UPNP action, simply call setInputParameter() to add + * the required action message params and then service() to receive the ActionResponse + * built with the parsed UPNP device SOAP xml response. + * @author SuperBonBon + * @version 1.0 + */ +public class ActionMessage { + + private final static Log log = LogFactory.getLog( ActionMessage.class ); + + private UPNPService service; + private ServiceAction serviceAction; + private List inputParameters; + + /** + * Protected constuctor so that only messages factories can build it + * @param service the service for which the + * @param serviceAction + */ + protected ActionMessage( UPNPService service, ServiceAction serviceAction ) { + this.service = service; + this.serviceAction = serviceAction; + if ( serviceAction.getInputActionArguments() != null ) { + inputParameters = new ArrayList(); + } + } + + /** + * Method to clear all set input parameters so that + * this object can be reused + */ + public void clearInputParameters() { + inputParameters.clear(); + } + + /** + * Executes the message and retuns the UPNP device response, according to the UPNP specs, + * this method could take up to 30 secs to process ( time allowed for a device to respond to a request ) + * @return a response object containing the UPNP parsed response + * @throws IOException if some IOException occurs during message send and reception process + * @throws UPNPResponseException if an UPNP error message is returned from the server + * or if some parsing exception occurs ( detailErrorCode = 899, detailErrorDescription = SAXException message ) + */ + public ActionResponse service() throws IOException, UPNPResponseException { + ActionResponse rtrVal = null; + UPNPResponseException upnpEx = null; + IOException ioEx = null; + StringBuffer body = new StringBuffer( 256 ); + + body.append( "\r\n" ); + body.append( "" ); + body.append( "" ); + body.append( "" ); + + if ( serviceAction.getInputActionArguments() != null ) { + // this action requires params so we just set them... + for ( Iterator itr = inputParameters.iterator(); itr.hasNext(); ) { + InputParamContainer container = (InputParamContainer)itr.next(); + body.append( "<" ).append( container.name ).append( ">" ).append( container.value ); + body.append( "" ); + } + } + body.append( "" ); + body.append( "" ); + body.append( "" ); + + if ( log.isDebugEnabled() ) log.debug( "POST prepared for URL " + service.getControlURL() ); + URL url = new URL( service.getControlURL().toString() ); + HttpURLConnection conn = (HttpURLConnection)url.openConnection(); + conn.setDoInput( true ); + conn.setDoOutput( true ); + conn.setUseCaches( false ); + conn.setRequestMethod( "POST" ); + HttpURLConnection.setFollowRedirects( false ); + //conn.setConnectTimeout( 30000 ); + conn.setRequestProperty( "HOST", url.getHost() + ":" + url.getPort() ); + conn.setRequestProperty( "CONTENT-TYPE", "text/xml; charset=\"utf-8\"" ); + conn.setRequestProperty( "CONTENT-LENGTH", Integer.toString( body.length() ) ); + conn.setRequestProperty( "SOAPACTION", "\"" + service.getServiceType() + "#" + serviceAction.getName() + "\"" ); + OutputStream out = conn.getOutputStream(); + out.write( body.toString().getBytes() ); + out.flush(); + out.close(); + conn.connect(); + InputStream input = null; + + if ( log.isDebugEnabled() ) log.debug( "executing query :\n" + body ); + try { + input = conn.getInputStream(); + } catch ( IOException ex ) { + // java can throw an exception if he error code is 500 or 404 or something else than 200 + // but the device sends 500 error message with content that is required + // this content is accessible with the getErrorStream + input = conn.getErrorStream(); + } + + if ( input != null ) { + int response = conn.getResponseCode(); + String responseBody = getResponseBody( input ); + if ( log.isDebugEnabled() ) log.debug( "received response :\n" + responseBody ); + SAXParserFactory saxParFact = SAXParserFactory.newInstance(); + saxParFact.setValidating( false ); + saxParFact.setNamespaceAware( true ); + ActionMessageResponseParser msgParser = new ActionMessageResponseParser( serviceAction ); + StringReader stringReader = new StringReader( responseBody ); + InputSource src = new InputSource( stringReader ); + try { + SAXParser parser = saxParFact.newSAXParser(); + parser.parse( src, msgParser ); + } catch ( ParserConfigurationException confEx ) { + // should never happen + // we throw a runtimeException to notify the env problem + throw new RuntimeException( "ParserConfigurationException during SAX parser creation, please check your env settings:" + confEx.getMessage() ); + } catch ( SAXException saxEx ) { + // kind of tricky but better than nothing.. + upnpEx = new UPNPResponseException( 899, saxEx.getMessage() ); + } finally { + try { + input.close(); + } catch ( IOException ex ) { + // ignore + } + } + if ( upnpEx == null ) { + if ( response == HttpURLConnection.HTTP_OK ) { + rtrVal = msgParser.getActionResponse(); + } else if ( response == HttpURLConnection.HTTP_INTERNAL_ERROR ) { + upnpEx = msgParser.getUPNPResponseException(); + } else { + ioEx = new IOException( "Unexpected server HTTP response:" + response ); + } + } + } + try { + out.close(); + } catch ( IOException ex ) { + // ignore + } + conn.disconnect(); + if ( upnpEx != null ) { + throw upnpEx; + } + if ( rtrVal == null && ioEx == null ) { + ioEx = new IOException( "Unable to receive a response from the UPNP device" ); + } + if ( ioEx != null ) { + throw ioEx; + } + return rtrVal; + } + + private String getResponseBody( InputStream in ) throws IOException { + byte[] buffer = new byte[256]; + int readen = 0; + StringBuffer content = new StringBuffer( 256 ); + while ( ( readen = in.read( buffer ) ) != -1 ) { + content.append( new String( buffer, 0 , readen ) ); + } + // some devices add \0 chars at XML message end + // which causes XML parsing errors... + int len = content.length(); + while ( content.charAt( len-1 ) == '\0' ) { + len--; + content.setLength( len ); + } + return content.toString().trim(); + } + + /** + * The list of input parameters that should be accepted by the device service for this message + * @return a list of required input parameters ServiceActionArgument objects for this message + * or null if the message does not require any input params + */ + public List getInputParameterNames() { + return serviceAction.getInputActionArgumentsNames(); + } + + /** + * The list of output parameters that should be returned by the device service + * @return a list of output parameters ServiceActionArgument objects for this message + * or null if the message does not contains any output params. + */ + public List getOutputParameterNames() { + return serviceAction.getOutputActionArgumentsNames(); + } + + /** + * Set the value of an input parameter before a message service call. If the param name already + * exists, the param value will be overwritten with the new value provided. + * @param parameterName the parameter name + * @param parameterValue the parameter value as an object, primitive object are handled, all other object + * will be assigned with a call to their toString() method call + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, Object parameterValue ) throws IllegalArgumentException { + if ( parameterValue == null ) { + return setInputParameter( parameterName, "" ); + } else if ( parameterValue instanceof Date ) { + return setInputParameter( parameterName, (Date)parameterValue ); + } else if ( parameterValue instanceof Boolean ) { + return setInputParameter( parameterName, ((Boolean)parameterValue).booleanValue() ); + } else if ( parameterValue instanceof Integer ) { + return setInputParameter( parameterName, ((Integer)parameterValue).intValue() ); + } else if ( parameterValue instanceof Byte ) { + return setInputParameter( parameterName, ((Byte)parameterValue).byteValue() ); + } else if ( parameterValue instanceof Short ) { + return setInputParameter( parameterName, ((Short)parameterValue).shortValue() ); + } else if ( parameterValue instanceof Float ) { + return setInputParameter( parameterName, ((Float)parameterValue).floatValue() ); + } else if ( parameterValue instanceof Double ) { + return setInputParameter( parameterName, ((Double)parameterValue).doubleValue() ); + } else if ( parameterValue instanceof Long ) { + return setInputParameter( parameterName, ((Long)parameterValue).longValue() ); + } + return setInputParameter( parameterName, parameterValue.toString() ); + } + + + + /** + * Set the value of an input parameter before a message service call. If the param name already + * exists, the param value will be overwritten with the new value provided + * @param parameterName the parameter name + * @param parameterValue the string parameter value + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, String parameterValue ) throws IllegalArgumentException { + if ( serviceAction.getInputActionArguments() == null ) throw new IllegalArgumentException( "No input parameters required for this message" ); + ServiceActionArgument arg = serviceAction.getInputActionArgument( parameterName ); + if ( arg == null ) throw new IllegalArgumentException( "Wrong input argument name for this action:" + parameterName + " available parameters are : " + getInputParameterNames() ); + for ( Iterator i = inputParameters.iterator(); i.hasNext(); ) { + InputParamContainer container = (InputParamContainer)i.next(); + if ( container.name.equals( parameterName ) ) { + container.value = parameterValue; + return this; + } + } + // nothing found add the new value + InputParamContainer container = new InputParamContainer(); + container.name = parameterName; + container.value = parameterValue; + inputParameters.add( container ); + return this; + } + + /** + * Set the value of an input parameter before a message service call + * @param parameterName the parameter name + * @param parameterValue the date parameter value, will be automatically translated to the correct + * ISO 8601 date format for the given action input param related state variable + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, Date parameterValue ) throws IllegalArgumentException { + if ( serviceAction.getInputActionArguments() == null ) throw new IllegalArgumentException( "No input parameters required for this message" ); + ServiceActionArgument arg = serviceAction.getInputActionArgument( parameterName ); + if ( arg == null ) throw new IllegalArgumentException( "Wrong input argument name for this action:" + parameterName + " available parameters are : " + getInputParameterNames() ); + ServiceStateVariable linkedVar = arg.getRelatedStateVariable(); + if ( linkedVar.getDataType().equals( ServiceStateVariable.TIME ) ) { + return setInputParameter( parameterName, ISO8601Date.getIsoTime( parameterValue ) ); + } else if ( linkedVar.getDataType().equals( ServiceStateVariable.TIME_TZ ) ) { + return setInputParameter( parameterName, ISO8601Date.getIsoTimeZone( parameterValue ) ); + } else if ( linkedVar.getDataType().equals( ServiceStateVariable.DATE ) ) { + return setInputParameter( parameterName, ISO8601Date.getIsoDate( parameterValue ) ); + } else if ( linkedVar.getDataType().equals( ServiceStateVariable.DATETIME ) ) { + return setInputParameter( parameterName, ISO8601Date.getIsoDateTime( parameterValue ) ); + } else if ( linkedVar.getDataType().equals( ServiceStateVariable.DATETIME_TZ ) ) { + return setInputParameter( parameterName, ISO8601Date.getIsoDateTimeZone( parameterValue ) ); + } else { + throw new IllegalArgumentException( "Related input state variable " + linkedVar.getName() + " is not of an date type" ); + } + } + + + /** + * Set the value of an input parameter before a message service call + * @param parameterName the parameter name + * @param parameterValue the boolean parameter value + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, boolean parameterValue ) throws IllegalArgumentException { + return setInputParameter( parameterName, parameterValue ? "1" : "0" ); + } + + /** + * Set the value of an input parameter before a message service call + * @param parameterName the parameter name + * @param parameterValue the byte parameter value + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, byte parameterValue ) throws IllegalArgumentException { + return setInputParameter( parameterName, Byte.toString( parameterValue ) ); + } + + /** + * Set the value of an input parameter before a message service call + * @param parameterName the parameter name + * @param parameterValue the short parameter value + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, short parameterValue ) throws IllegalArgumentException { + return setInputParameter( parameterName, Short.toString( parameterValue ) ); + } + + /** + * Set the value of an input parameter before a message service call + * @param parameterName the parameter name + * @param parameterValue the integer parameter value + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, int parameterValue ) throws IllegalArgumentException { + return setInputParameter( parameterName, Integer.toString( parameterValue ) ); + } + + /** + * Set the value of an input parameter before a message service call + * @param parameterName the parameter name + * @param parameterValue the long parameter value + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, long parameterValue ) throws IllegalArgumentException { + return setInputParameter( parameterName, Long.toString( parameterValue ) ); + } + + /** + * Set the value of an input parameter before a message service call + * @param parameterName the parameter name + * @param parameterValue the float parameter value + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, float parameterValue ) throws IllegalArgumentException { + return setInputParameter( parameterName, Float.toString( parameterValue ) ); + } + + /** + * Set the value of an input parameter before a message service call + * @param parameterName the parameter name + * @param parameterValue the double parameter value + * @return the current ActionMessage object instance + * @throws IllegalArgumentException if the provided parameterName is not valid for this message + * or if no input parameters are required for this message + */ + public ActionMessage setInputParameter( String parameterName, double parameterValue ) throws IllegalArgumentException { + return setInputParameter( parameterName, Double.toString( parameterValue ) ); + } + + /** + * Input params class container + */ + private class InputParamContainer { + + private String name; + private String value; + + } + +} diff --git a/source/net/sbbi/upnp/messages/ActionMessageResponseParser.java b/source/net/sbbi/upnp/messages/ActionMessageResponseParser.java new file mode 100644 index 000000000..ce9e29392 --- /dev/null +++ b/source/net/sbbi/upnp/messages/ActionMessageResponseParser.java @@ -0,0 +1,160 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.messages; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.xml.sax.Attributes; + +import net.sbbi.upnp.services.*; + +/** + * Simple SAX handler for UPNP response message parsing, this message is in SOAP format + * @author SuperBonBon + * @version 1.0 + */ + +public class ActionMessageResponseParser extends org.xml.sax.helpers.DefaultHandler { + + private final static Log log = LogFactory.getLog( ActionMessageResponseParser.class ); + + private final static String SOAP_FAULT_EL = "Fault"; + + private ServiceAction serviceAction; + private String bodyElementName; + private boolean faultResponse = false; + private UPNPResponseException msgEx; + + private boolean readFaultCode = false; + private boolean readFaultString = false; + private boolean readErrorCode = false; + private boolean readErrorDescription = false; + private boolean parseOutputParams = false; + private ActionResponse result; + private ServiceActionArgument parsedResultOutArg; + + protected ActionMessageResponseParser( ServiceAction serviceAction ) { + this.serviceAction = serviceAction; + bodyElementName = serviceAction.getName() + "Response"; + } + + protected UPNPResponseException getUPNPResponseException() { + return msgEx; + } + + protected ActionResponse getActionResponse() { + return result; + } + + public void characters( char[] ch, int start, int length ) { + if ( parseOutputParams ) { + if ( parsedResultOutArg != null ) { + String origChars = result.getOutActionArgumentValue( parsedResultOutArg.getName() ); + String newChars = new String( ch, start, length ); + if ( origChars == null ) { + result.addResult( parsedResultOutArg, newChars ); + } else { + result.addResult( parsedResultOutArg, origChars + newChars ); + } + } + } else if ( readFaultCode ) { + msgEx.faultCode = new String( ch, start, length ); + readFaultCode = false; + } else if ( readFaultString ) { + msgEx.faultString = new String( ch, start, length ); + readFaultString = false; + } else if ( readErrorCode ) { + String code = new String( ch, start, length ); + try { + msgEx.detailErrorCode = Integer.parseInt( code ); + } catch ( Throwable ex ) { + log.debug( "Error during returned error code " + code + " parsing" ); + } + readErrorCode = false; + } else if ( readErrorDescription ) { + msgEx.detailErrorDescription = new String( ch, start, length ); + readErrorDescription = false; + } + } + + public void startElement( String uri, String localName, String qName, Attributes attributes ) { + if ( parseOutputParams ) { + ServiceActionArgument arg = serviceAction.getActionArgument( localName ); + if ( arg != null && arg.getDirection() == ServiceActionArgument.DIRECTION_OUT ) { + parsedResultOutArg = arg; + result.addResult( parsedResultOutArg, null ); + } else { + parsedResultOutArg = null; + } + } else if ( faultResponse ) { + if ( localName.equals( "faultcode") ) { + readFaultCode = true; + } else if ( localName.equals( "faultstring" ) ) { + readFaultString = true; + } else if ( localName.equals( "errorCode" ) ) { + readErrorCode = true; + } else if ( localName.equals( "errorDescription" ) ) { + readErrorDescription = true; + } + } else if ( localName.equals( SOAP_FAULT_EL ) ) { + msgEx = new UPNPResponseException(); + faultResponse = true; + } else if ( localName.equals( bodyElementName ) ) { + parseOutputParams = true; + result = new ActionResponse(); + } + } + + public void endElement( String uri, String localName, String qName ) { + if ( parsedResultOutArg != null && parsedResultOutArg.getName().equals( localName ) ) { + parsedResultOutArg = null; + } else if ( localName.equals( bodyElementName ) ) { + parseOutputParams = false; + } + } +} diff --git a/source/net/sbbi/upnp/messages/ActionResponse.java b/source/net/sbbi/upnp/messages/ActionResponse.java new file mode 100644 index 000000000..bc67aa9e4 --- /dev/null +++ b/source/net/sbbi/upnp/messages/ActionResponse.java @@ -0,0 +1,101 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.messages; + +import net.sbbi.upnp.services.ServiceActionArgument; + +import java.util.*; + +/** + * An action respons container Object + * @author SuperBonBon + * @version 1.0 + */ +public class ActionResponse { + + private Map outArguments = new HashMap(); + private Map outArgumentsVals = new HashMap(); + + protected ActionResponse() { + } + + public ServiceActionArgument getOutActionArgument( String actionArgumentName ) { + return (ServiceActionArgument)outArguments.get( actionArgumentName ); + } + + public String getOutActionArgumentValue( String actionArgumentName ) { + return (String)outArgumentsVals.get( actionArgumentName ); + } + + public Set getOutActionArgumentNames() { + return outArguments.keySet(); + } + + /** + * Adds a result to the response, adding an existing result ServiceActionArgument + * will override the ServiceActionArgument value + * @param arg the service action argument + * @param value the arg value + */ + protected void addResult( ServiceActionArgument arg, String value ) { + outArguments.put( arg.getName(), arg ); + outArgumentsVals.put( arg.getName(), value ); + } + + public String toString() { + StringBuffer rtrVal = new StringBuffer(); + for ( Iterator i = outArguments.keySet().iterator(); i.hasNext(); ) { + String name = (String)i.next(); + String value = (String)outArgumentsVals.get( name ); + rtrVal.append( name ).append( "=" ).append( value ); + if ( i.hasNext() ) rtrVal.append( "\n" ); + } + return rtrVal.toString(); + } + +} diff --git a/source/net/sbbi/upnp/messages/StateVariableMessage.java b/source/net/sbbi/upnp/messages/StateVariableMessage.java new file mode 100644 index 000000000..89fdf4b5d --- /dev/null +++ b/source/net/sbbi/upnp/messages/StateVariableMessage.java @@ -0,0 +1,204 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.messages; + +import org.xml.sax.*; +import javax.xml.parsers.*; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import net.sbbi.upnp.services.*; + +/** + * This class is used to create state variable messages to + * comminicate with the device + * @author SuperBonBon + * @version 1.0 + */ + +public class StateVariableMessage { + + private final static Log log = LogFactory.getLog( StateVariableMessage.class ); + + private UPNPService service; + private ServiceStateVariable serviceStateVar; + + protected StateVariableMessage( UPNPService service, ServiceStateVariable serviceStateVar ) { + this.service = service; + this.serviceStateVar = serviceStateVar; + } + + /** + * Executes the state variable query and retuns the UPNP device response, according to the UPNP specs, + * this method could take up to 30 secs to process ( time allowed for a device to respond to a request ) + * @return a state variable response object containing the variable value + * @throws IOException if some IOException occurs during message send and reception process + * @throws UPNPResponseException if an UPNP error message is returned from the server + * or if some parsing exception occurs ( detailErrorCode = 899, detailErrorDescription = SAXException message ) + */ + public StateVariableResponse service() throws IOException, UPNPResponseException { + StateVariableResponse rtrVal = null; + UPNPResponseException upnpEx = null; + IOException ioEx = null; + StringBuffer body = new StringBuffer( 256 ); + + body.append( "\r\n" ); + body.append( "" ); + body.append( "" ); + body.append( "" ); + body.append( "" ).append( serviceStateVar.getName() ).append( "" ); + body.append( "" ); + body.append( "" ); + body.append( "" ); + + if ( log.isDebugEnabled() ) log.debug( "POST prepared for URL " + service.getControlURL() ); + URL url = new URL( service.getControlURL().toString() ); + HttpURLConnection conn = (HttpURLConnection)url.openConnection(); + conn.setDoInput( true ); + conn.setDoOutput( true ); + conn.setUseCaches( false ); + conn.setRequestMethod( "POST" ); + HttpURLConnection.setFollowRedirects( false ); + //conn.setConnectTimeout( 30000 ); + conn.setRequestProperty( "HOST", url.getHost() + ":" + url.getPort() ); + conn.setRequestProperty( "SOAPACTION", "\"urn:schemas-upnp-org:control-1-0#QueryStateVariable\"" ); + conn.setRequestProperty( "CONTENT-TYPE", "text/xml; charset=\"utf-8\"" ); + conn.setRequestProperty( "CONTENT-LENGTH", Integer.toString( body.length() ) ); + OutputStream out = conn.getOutputStream(); + out.write( body.toString().getBytes() ); + out.flush(); + conn.connect(); + InputStream input = null; + + if ( log.isDebugEnabled() ) log.debug( "executing query :\n" + body ); + try { + input = conn.getInputStream(); + } catch ( IOException ex ) { + // java can throw an exception if he error code is 500 or 404 or something else than 200 + // but the device sends 500 error message with content that is required + // this content is accessible with the getErrorStream + input = conn.getErrorStream(); + } + + if ( input != null ) { + int response = conn.getResponseCode(); + String responseBody = getResponseBody( input ); + if ( log.isDebugEnabled() ) log.debug( "received response :\n" + responseBody ); + SAXParserFactory saxParFact = SAXParserFactory.newInstance(); + saxParFact.setValidating( false ); + saxParFact.setNamespaceAware( true ); + StateVariableResponseParser msgParser = new StateVariableResponseParser( serviceStateVar ); + StringReader stringReader = new StringReader( responseBody ); + InputSource src = new InputSource( stringReader ); + try { + SAXParser parser = saxParFact.newSAXParser(); + parser.parse( src, msgParser ); + } catch ( ParserConfigurationException confEx ) { + // should never happen + // we throw a runtimeException to notify the env problem + throw new RuntimeException( "ParserConfigurationException during SAX parser creation, please check your env settings:" + confEx.getMessage() ); + } catch ( SAXException saxEx ) { + // kind of tricky but better than nothing.. + upnpEx = new UPNPResponseException( 899, saxEx.getMessage() ); + } finally { + try { + input.close(); + } catch ( IOException ex ) { + // ignoring + } + } + if ( upnpEx == null ) { + if ( response == HttpURLConnection.HTTP_OK ) { + rtrVal = msgParser.getStateVariableResponse(); + } else if ( response == HttpURLConnection.HTTP_INTERNAL_ERROR ) { + upnpEx = msgParser.getUPNPResponseException(); + } else { + ioEx = new IOException( "Unexpected server HTTP response:" + response ); + } + } + } + try { + out.close(); + } catch ( IOException ex ) { + // ignore + } + conn.disconnect(); + if ( upnpEx != null ) { + throw upnpEx; + } + if ( rtrVal == null && ioEx == null ) { + ioEx = new IOException( "Unable to receive a response from the UPNP device" ); + } + if ( ioEx != null ) { + throw ioEx; + } + return rtrVal; + } + + private String getResponseBody( InputStream in ) throws IOException { + byte[] buffer = new byte[256]; + int readen = 0; + StringBuffer content = new StringBuffer( 256 ); + while ( ( readen = in.read( buffer ) ) != -1 ) { + content.append( new String( buffer, 0 , readen ) ); + } + // some devices add \0 chars at XML message end + // which causes XML parsing errors... + int len = content.length(); + while ( content.charAt( len-1 ) == '\0' ) { + len--; + content.setLength( len ); + } + return content.toString().trim(); + } +} diff --git a/source/net/sbbi/upnp/messages/StateVariableResponse.java b/source/net/sbbi/upnp/messages/StateVariableResponse.java new file mode 100644 index 000000000..196f7c036 --- /dev/null +++ b/source/net/sbbi/upnp/messages/StateVariableResponse.java @@ -0,0 +1,74 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.messages; + +import net.sbbi.upnp.services.ServiceStateVariable; + +/** + * This class contains data returned by a state variable query response + * @author SuperBonBon + * @version 1.0 + */ +public class StateVariableResponse { + + protected ServiceStateVariable stateVar; + protected String stateVariableValue; + + protected StateVariableResponse() { + } + + public ServiceStateVariable getStateVar() { + return stateVar; + } + + public String getStateVariableValue() { + return stateVariableValue; + } + + +} diff --git a/source/net/sbbi/upnp/messages/StateVariableResponseParser.java b/source/net/sbbi/upnp/messages/StateVariableResponseParser.java new file mode 100644 index 000000000..000164ce0 --- /dev/null +++ b/source/net/sbbi/upnp/messages/StateVariableResponseParser.java @@ -0,0 +1,154 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.messages; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; + +import net.sbbi.upnp.services.*; + +/** + * Simple SAX handler for UPNP state variable query response message parsing, this message is in SOAP format + * @author SuperBonBon + * @version 1.0 + */ + +public class StateVariableResponseParser extends org.xml.sax.helpers.DefaultHandler { + + private final static Log log = LogFactory.getLog( StateVariableResponseParser.class ); + + private final static String SOAP_FAULT_EL = "Fault"; + + private ServiceStateVariable stateVar; + private boolean faultResponse = false; + private UPNPResponseException msgEx; + + private boolean readFaultCode = false; + private boolean readFaultString = false; + private boolean readErrorCode = false; + private boolean readErrorDescription = false; + private boolean parseStateVar = false; + private StateVariableResponse result; + + protected StateVariableResponseParser( ServiceStateVariable stateVar ) { + this.stateVar = stateVar; + } + + protected UPNPResponseException getUPNPResponseException() { + return msgEx; + } + + protected StateVariableResponse getStateVariableResponse() { + return result; + } + + public void characters( char[] ch, int start, int length ) { + if ( parseStateVar ) { + String origChars = result.stateVariableValue; + String newChars = new String( ch, start, length ); + if ( origChars == null ) { + result.stateVariableValue = newChars; + } else { + result.stateVariableValue = origChars + newChars; + } + } else if ( readFaultCode ) { + msgEx.faultCode = new String( ch, start, length ); + readFaultCode = false; + } else if ( readFaultString ) { + msgEx.faultString = new String( ch, start, length ); + readFaultString = false; + } else if ( readErrorCode ) { + String code = new String( ch, start, length ); + try { + msgEx.detailErrorCode = Integer.parseInt( code ); + } catch ( Throwable ex ) { + log.debug( "Error during returned error code " + code + " parsing" ); + } + readErrorCode = false; + } else if ( readErrorDescription ) { + msgEx.detailErrorDescription = new String( ch, start, length ); + readErrorDescription = false; + } + } + + public void startElement( String uri, String localName, String qName, Attributes attributes ) { + + if ( faultResponse ) { + if ( localName.equals( "faultcode") ) { + readFaultCode = true; + } else if ( localName.equals( "faultstring" ) ) { + readFaultString = true; + } else if ( localName.equals( "errorCode" ) ) { + readErrorCode = true; + } else if ( localName.equals( "errorDescription" ) ) { + readErrorDescription = true; + } + } else if ( localName.equals( SOAP_FAULT_EL ) ) { + msgEx = new UPNPResponseException(); + faultResponse = true; + } else if ( localName.equals( "return" ) || localName.equals( "varName" ) ) { + // some buggy implementations ( intel sample media server ) + // do not use the specs compliant return element name but varName ... + parseStateVar = true; + result = new StateVariableResponse(); + result.stateVar = stateVar; + } + } + + public void endElement( String uri, String localName, String qName ) throws SAXException { + // some buggy implementations ( intel sample media server ) + // do not use the specs compliant return element name but varName ... + if ( localName.equals( "return" ) || localName.equals( "varName" ) ) { + parseStateVar = false; + } + } + +} + diff --git a/source/net/sbbi/upnp/messages/UPNPMessageFactory.java b/source/net/sbbi/upnp/messages/UPNPMessageFactory.java new file mode 100644 index 000000000..9880582dc --- /dev/null +++ b/source/net/sbbi/upnp/messages/UPNPMessageFactory.java @@ -0,0 +1,108 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.messages; + +import net.sbbi.upnp.services.*; + +/** + * Factory to create UPNP messages to access and communicate with + * a given UPNPDevice service capabilities + * @author SuperBonBon + * @version 1.0 + */ + +public class UPNPMessageFactory { + + private UPNPService service; + + /** + * Private constructor since this is a factory. + * @param service the UPNPService that will be used to generate messages by thid factory + */ + private UPNPMessageFactory( UPNPService service ) { + this.service = service; + } + + /** + * Generate a new factory instance for a given device service definition object + * @param service the UPNP service definition object for messages creation + * @return a new message factory + */ + public static UPNPMessageFactory getNewInstance( UPNPService service ) { + return new UPNPMessageFactory( service ); + } + + /** + * Creation of a new ActionMessage to communicate with the UPNP device + * @param serviceActionName the name of a service action, this name is case sensitive + * and matches exactly the name provided by the UPNP device in the XML definition file + * @return a ActionMessage object or null if the action is unknown for this service messages factory + */ + public ActionMessage getMessage( String serviceActionName ) { + ServiceAction serviceAction = service.getUPNPServiceAction( serviceActionName ); + if ( serviceAction != null ) { + return new ActionMessage( service, serviceAction ); + } + return null; + } + + /** + * Creation of a new StateVariableMessage to communicate with the UPNP device, for a service state variable query + * @param serviceStateVariable the name of a service state variable, this name is case sensitive + * and matches exactly the name provided by the UPNP device in the XML definition file + * @return a StateVariableMessage object or null if the state variable is unknown for this service mesages factory + */ + public StateVariableMessage getStateVariableMessage( String serviceStateVariable ) { + ServiceStateVariable stateVar = service.getUPNPServiceStateVariable( serviceStateVariable ); + if ( stateVar != null ) { + return new StateVariableMessage( service, stateVar ); + } + return null; + } + +} diff --git a/source/net/sbbi/upnp/messages/UPNPResponseException.java b/source/net/sbbi/upnp/messages/UPNPResponseException.java new file mode 100644 index 000000000..d3a5e1f48 --- /dev/null +++ b/source/net/sbbi/upnp/messages/UPNPResponseException.java @@ -0,0 +1,97 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.messages; + +/** + * An exception throws when parsing a message if a SOAP fault + * exception is returned. + * @author SuperBonBon + * @version 1.0 + */ +public class UPNPResponseException extends Exception { + + private static final long serialVersionUID = 8313107558129180594L; + + protected String faultCode; + protected String faultString; + protected int detailErrorCode; + protected String detailErrorDescription; + + public UPNPResponseException() { + } + + public UPNPResponseException( int detailErrorCode, String detailErrorDescription ) { + this.detailErrorCode = detailErrorCode; + this.detailErrorDescription = detailErrorDescription; + } + + public String getFaultCode() { + return faultCode == null ? "Client" : faultCode ; + } + + public String getFaultString() { + return faultString == null ? "UPnPError" : faultString; + } + + public int getDetailErrorCode() { + return detailErrorCode; + } + + public String getDetailErrorDescription() { + return detailErrorDescription; + } + + public String getMessage() { + return "Detailed error code :" + detailErrorCode + ", Detailed error description :" + detailErrorDescription; + } + + public String getLocalizedMessage() { + return getMessage(); + } + +} diff --git a/source/net/sbbi/upnp/services/ISO8601Date.java b/source/net/sbbi/upnp/services/ISO8601Date.java new file mode 100644 index 000000000..6194a7109 --- /dev/null +++ b/source/net/sbbi/upnp/services/ISO8601Date.java @@ -0,0 +1,331 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.services; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.NoSuchElementException; +import java.util.StringTokenizer; +import java.util.TimeZone; + +/** + * ISO8601 Date implementation taken from org.w3c package and modified + * to work with UPNP date types + * @author SuperBonBon + * @version 1.0 + */ + +public class ISO8601Date { + + private static boolean check(StringTokenizer st, String token) throws NumberFormatException { + try { + if (st.nextToken().equals(token)) { + return true; + } else { + throw new NumberFormatException("Missing [" + token + "]"); + } + } catch (NoSuchElementException ex) { + return false; + } + } + + private static Calendar getCalendar( String isodate ) throws NumberFormatException { + // YYYY-MM-DDThh:mm:ss.sTZD or hh:mm:ss.sTZD + // does it contains a date ? + boolean isATime = isodate.indexOf( ':' ) != -1; + boolean isADate = isodate.indexOf( '-' ) != -1 || ( isodate.length() == 4 && !isATime ); + if ( isATime && ! isADate ) { + if ( !isodate.toUpperCase().startsWith( "T" ) ) { + isodate = "T" + isodate; + } + } + StringTokenizer st = new StringTokenizer(isodate, "-T:.+Z", true); + Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC")); + calendar.clear(); + if ( isADate ) { + // Year + if (st.hasMoreTokens()) { + int year = Integer.parseInt(st.nextToken()); + calendar.set(Calendar.YEAR, year); + } else { + return calendar; + } + // Month + if (check(st, "-") && (st.hasMoreTokens())) { + int month = Integer.parseInt(st.nextToken()) - 1; + calendar.set(Calendar.MONTH, month); + } else { + return calendar; + } + // Day + if (check(st, "-") && (st.hasMoreTokens())) { + int day = Integer.parseInt(st.nextToken()); + calendar.set(Calendar.DAY_OF_MONTH, day); + } else { + return calendar; + } + } + // Hour + if ( ( check(st, "T") ) && ( st.hasMoreTokens() ) ) { + int hour = Integer.parseInt(st.nextToken()); + calendar.set(Calendar.HOUR_OF_DAY, hour); + } else { + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar; + } + // Minutes + if (check(st, ":") && (st.hasMoreTokens())) { + int minutes = Integer.parseInt(st.nextToken()); + calendar.set(Calendar.MINUTE, minutes); + } else { + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar; + } + + // + // Not mandatory now + // + + // Secondes + if (!st.hasMoreTokens()) { + return calendar; + } + String tok = st.nextToken(); + if (tok.equals(":")) { // secondes + if (st.hasMoreTokens()) { + int secondes = Integer.parseInt(st.nextToken()); + calendar.set(Calendar.SECOND, secondes); + if (!st.hasMoreTokens()) { + return calendar; + } + // frac sec + tok = st.nextToken(); + if (tok.equals(".")) { + // bug fixed, thx to Martin Bottcher + String nt = st.nextToken(); + while (nt.length() < 3) { + nt += "0"; + } + nt = nt.substring(0, 3); // Cut trailing chars.. + int millisec = Integer.parseInt(nt); + // int millisec = Integer.parseInt(st.nextToken()) * 10; + calendar.set(Calendar.MILLISECOND, millisec); + if (!st.hasMoreTokens()) { + return calendar; + } + tok = st.nextToken(); + } else { + calendar.set(Calendar.MILLISECOND, 0); + } + } else { + throw new NumberFormatException("No secondes specified"); + } + } else { + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + } + // Timezone + if (!tok.equals("Z")) { // UTC + if (!(tok.equals("+") || tok.equals("-"))) { + throw new NumberFormatException("only Z, + or - allowed"); + } + boolean plus = tok.equals("+"); + if (!st.hasMoreTokens()) { + throw new NumberFormatException("Missing hour field"); + } + int tzhour = Integer.parseInt(st.nextToken()); + int tzmin = 0; + if (check(st, ":") && (st.hasMoreTokens())) { + tzmin = Integer.parseInt(st.nextToken()); + } else { + throw new NumberFormatException("Missing minute field"); + } + if (plus) { + calendar.add(Calendar.HOUR, -tzhour); + calendar.add(Calendar.MINUTE, -tzmin); + } else { + calendar.add(Calendar.HOUR, tzhour); + calendar.add(Calendar.MINUTE, tzmin); + } + } + return calendar; + } + + /** + * Parse the given string in ISO 8601 format and build a Date object. + * @param isodate the date in ISO 8601 format + * @return a Date instance + * @exception InvalidDateException + * if the date is not valid + */ + public static Date parse(String isodate) throws NumberFormatException { + Calendar calendar = getCalendar(isodate); + return calendar.getTime(); + } + + private static String twoDigit(int i) { + if (i >= 0 && i < 10) { + return "0" + String.valueOf(i); + } + return String.valueOf(i); + } + + /** + * Generate a ISO 8601 date + * @param date a Date instance + * @return a string representing the date in the ISO 8601 format + */ + public static String getIsoDate(Date date) { + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + StringBuffer buffer = new StringBuffer(); + buffer.append(calendar.get(Calendar.YEAR)); + buffer.append("-"); + buffer.append(twoDigit(calendar.get(Calendar.MONTH) + 1)); + buffer.append("-"); + buffer.append(twoDigit(calendar.get(Calendar.DAY_OF_MONTH))); + return buffer.toString(); + } + + /** + * Generate a ISO 8601 date time without timezone + * @param date a Date instance + * @return a string representing the date in the ISO 8601 format + */ + public static String getIsoDateTime(Date date) { + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + StringBuffer buffer = new StringBuffer(); + buffer.append(calendar.get(Calendar.YEAR)); + buffer.append("-"); + buffer.append(twoDigit(calendar.get(Calendar.MONTH) + 1)); + buffer.append("-"); + buffer.append(twoDigit(calendar.get(Calendar.DAY_OF_MONTH))); + buffer.append("T"); + buffer.append(twoDigit(calendar.get(Calendar.HOUR_OF_DAY))); + buffer.append(":"); + buffer.append(twoDigit(calendar.get(Calendar.MINUTE))); + buffer.append(":"); + buffer.append(twoDigit(calendar.get(Calendar.SECOND))); + buffer.append("."); + buffer.append(twoDigit(calendar.get(Calendar.MILLISECOND) / 10)); + return buffer.toString(); + } + + /** + * Generate a ISO 8601 date time with timezone + * @param date a Date instance + * @return a string representing the date in the ISO 8601 format + */ + public static String getIsoDateTimeZone(Date date) { + Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC")); + calendar.setTime(date); + StringBuffer buffer = new StringBuffer(); + buffer.append(calendar.get(Calendar.YEAR)); + buffer.append("-"); + buffer.append(twoDigit(calendar.get(Calendar.MONTH) + 1)); + buffer.append("-"); + buffer.append(twoDigit(calendar.get(Calendar.DAY_OF_MONTH))); + buffer.append("T"); + buffer.append(twoDigit(calendar.get(Calendar.HOUR_OF_DAY))); + buffer.append(":"); + buffer.append(twoDigit(calendar.get(Calendar.MINUTE))); + buffer.append(":"); + buffer.append(twoDigit(calendar.get(Calendar.SECOND))); + buffer.append("."); + buffer.append(twoDigit(calendar.get(Calendar.MILLISECOND) / 10)); + buffer.append("Z"); + return buffer.toString(); + } + + /** + * Generate a ISO 8601 time + * @param date a Date instance + * @return a string representing the date in the ISO 8601 format + */ + public static String getIsoTime(Date date) { + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + StringBuffer buffer = new StringBuffer(); + buffer.append(twoDigit(calendar.get(Calendar.HOUR_OF_DAY))); + buffer.append(":"); + buffer.append(twoDigit(calendar.get(Calendar.MINUTE))); + buffer.append(":"); + buffer.append(twoDigit(calendar.get(Calendar.SECOND))); + buffer.append("."); + buffer.append(twoDigit(calendar.get(Calendar.MILLISECOND) / 10)); + return buffer.toString(); + } + + /** + * Generate a ISO 8601 time + * @param date a Date instance + * @return a string representing the date in the ISO 8601 format + */ + public static String getIsoTimeZone(Date date) { + Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC")); + calendar.setTime(date); + StringBuffer buffer = new StringBuffer(); + buffer.append(twoDigit(calendar.get(Calendar.HOUR_OF_DAY))); + buffer.append(":"); + buffer.append(twoDigit(calendar.get(Calendar.MINUTE))); + buffer.append(":"); + buffer.append(twoDigit(calendar.get(Calendar.SECOND))); + buffer.append("."); + buffer.append(twoDigit(calendar.get(Calendar.MILLISECOND) / 10)); + buffer.append("Z"); + return buffer.toString(); + } + +} diff --git a/source/net/sbbi/upnp/services/ServiceAction.java b/source/net/sbbi/upnp/services/ServiceAction.java new file mode 100644 index 000000000..b994ffc16 --- /dev/null +++ b/source/net/sbbi/upnp/services/ServiceAction.java @@ -0,0 +1,202 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.services; + +import java.util.*; + +/** + * An object to represent a service action proposed by an UPNP service + * @author SuperBonBon + * @version 1.0 + */ +public class ServiceAction { + + protected String name; + protected UPNPService parent; + private List orderedActionArguments; + private List orderedInputActionArguments; + private List orderedOutputActionArguments; + private List orderedInputActionArgumentsNames; + private List orderedOutputActionArgumentsNames; + + protected ServiceAction() { + } + + public UPNPService getParent() { + return parent; + } + + /** + * The action in and out arguments ServiceActionArgument objects list + * @return the list with ServiceActionArgument objects or null if the action has no params + */ + public List getActionArguments() { + return orderedActionArguments; + } + + /** + * Look for an ServiceActionArgument for a given name + * @param argumentName the argument name + * @return the argument or null if not found or not available + */ + public ServiceActionArgument getActionArgument( String argumentName ) { + if ( orderedActionArguments == null ) return null; + for ( Iterator i = orderedActionArguments.iterator(); i.hasNext(); ) { + ServiceActionArgument arg = (ServiceActionArgument)i.next(); + if ( arg.getName().equals( argumentName ) ) return arg; + } + return null; + } + + protected void setActionArguments( List orderedActionArguments ) { + this.orderedActionArguments = orderedActionArguments; + orderedInputActionArguments = getListForActionArgument( orderedActionArguments, ServiceActionArgument.DIRECTION_IN ); + orderedOutputActionArguments = getListForActionArgument( orderedActionArguments, ServiceActionArgument.DIRECTION_OUT ); + orderedInputActionArgumentsNames = getListForActionArgumentNames( orderedActionArguments, ServiceActionArgument.DIRECTION_IN ); + orderedOutputActionArgumentsNames = getListForActionArgumentNames( orderedActionArguments, ServiceActionArgument.DIRECTION_OUT ); + } + + /** + * Return a list containing input ( when a response is sent ) arguments objects + * @return a list containing input arguments ServiceActionArgument objects or null when nothing + * is needed for such operation + */ + public List getInputActionArguments() { + return orderedInputActionArguments; + } + + /** + * Look for an input ServiceActionArgument for a given name + * @param argumentName the input argument name + * @return the argument or null if not found or not available + */ + public ServiceActionArgument getInputActionArgument( String argumentName ) { + if ( orderedInputActionArguments == null ) return null; + for ( Iterator i = orderedInputActionArguments.iterator(); i.hasNext(); ) { + ServiceActionArgument arg = (ServiceActionArgument)i.next(); + if ( arg.getName().equals( argumentName ) ) return arg; + } + return null; + } + + + /** + * Return a list containing output ( when a response is received ) arguments objects + * @return a list containing output arguments ServiceActionArgument objects or null when nothing + * returned for such operation + */ + public List getOutputActionArguments() { + return orderedOutputActionArguments; + } + + /** + * Look for an output ServiceActionArgument for a given name + * @param argumentName the input argument name + * @return the argument or null if not found or not available + */ + public ServiceActionArgument getOutputActionArgument( String argumentName ) { + if ( orderedOutputActionArguments == null ) return null; + for ( Iterator i = orderedOutputActionArguments.iterator(); i.hasNext(); ) { + ServiceActionArgument arg = (ServiceActionArgument)i.next(); + if ( arg.getName().equals( argumentName ) ) return arg; + } + return null; + } + + /** + * Return a list containing input ( when a response is sent ) arguments names + * @return a list containing input arguments names as Strings or null when nothing + * is needed for such operation + */ + public List getInputActionArgumentsNames() { + return orderedInputActionArgumentsNames; + } + + /** + * Return a list containing output ( when a response is received ) arguments names + * @return a list containing output arguments names as Strings or null when nothing + * returned for such operation + */ + public List getOutputActionArgumentsNames() { + return orderedOutputActionArgumentsNames; + } + + /** + * The action name + * @return The action name + */ + public String getName() { + return name; + } + + private List getListForActionArgument( List args, String direction ) { + if ( args == null ) return null; + List rtrVal = new ArrayList(); + for ( Iterator itr = args.iterator(); itr.hasNext(); ) { + ServiceActionArgument actArg = (ServiceActionArgument)itr.next(); + if ( actArg.getDirection() == direction ) { + rtrVal.add( actArg ); + } + } + if ( rtrVal.size() == 0 ) rtrVal = null; + return rtrVal; + } + + private List getListForActionArgumentNames( List args, String direction ) { + if ( args == null ) return null; + List rtrVal = new ArrayList(); + for ( Iterator itr = args.iterator(); itr.hasNext(); ) { + ServiceActionArgument actArg = (ServiceActionArgument)itr.next(); + if ( actArg.getDirection() == direction ) { + rtrVal.add( actArg.getName() ); + } + } + if ( rtrVal.size() == 0 ) rtrVal = null; + return rtrVal; + } +} diff --git a/source/net/sbbi/upnp/services/ServiceActionArgument.java b/source/net/sbbi/upnp/services/ServiceActionArgument.java new file mode 100644 index 000000000..4bd1a613e --- /dev/null +++ b/source/net/sbbi/upnp/services/ServiceActionArgument.java @@ -0,0 +1,87 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.services; + +/** + * An argument for a service action + * @author SuperBonBon + * @version 1.0 + */ +public class ServiceActionArgument { + + public final static String DIRECTION_IN = "in"; + public final static String DIRECTION_OUT = "out"; + + protected ServiceStateVariable relatedStateVariable; + protected String name; + protected String direction; + + /** + * The related service state variable for this ServiceActionArgument + * @return The related service state variable for this ServiceActionArgument + */ + public ServiceStateVariable getRelatedStateVariable() { + return relatedStateVariable; + } + + /** + * The argument name + * @return the argument name + */ + public String getName() { + return name; + } + + /** + * The argument direction + * @return the argument direction (in|out) + */ + public String getDirection() { + return direction; + } +} diff --git a/source/net/sbbi/upnp/services/ServiceStateVariable.java b/source/net/sbbi/upnp/services/ServiceStateVariable.java new file mode 100644 index 000000000..0ae5e3437 --- /dev/null +++ b/source/net/sbbi/upnp/services/ServiceStateVariable.java @@ -0,0 +1,263 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.services; + +import java.io.IOException; +import java.net.URI; +import java.util.Date; +import java.util.Set; + +import net.sbbi.upnp.messages.StateVariableMessage; +import net.sbbi.upnp.messages.UPNPMessageFactory; +import net.sbbi.upnp.messages.UPNPResponseException; + +/** + * Class to contain a service state variable definition + * @author SuperBonBon + * @version 1.0 + */ + +public class ServiceStateVariable implements ServiceStateVariableTypes { + + private StateVariableMessage stateVarMsg = null; + + protected String name; + protected boolean sendEvents; + protected String dataType; + protected String defaultValue; + + protected String minimumRangeValue; + protected String maximumRangeValue; + protected String stepRangeValue; + protected Set allowedvalues; + protected UPNPService parent; + + protected ServiceStateVariable() { + } + + /** + * Call to the UPNP device to retreive the state variable actual value + * @return the state variable actual value on the device, should be never null, an empty string could be returned by the device + * @throws UPNPResponseException if the device throws an exception during query + * @throws IOException if some IO error with device occurs during query + */ + public String getValue() throws UPNPResponseException, IOException { + if ( stateVarMsg == null ) { + synchronized( this ) { + if ( stateVarMsg == null ) { + UPNPMessageFactory factory = UPNPMessageFactory.getNewInstance( parent ); + stateVarMsg = factory.getStateVariableMessage( name ); + } + } + } + return stateVarMsg.service().getStateVariableValue(); + } + + /** + * State variable name + * @return the state variable name + */ + public String getName() { + return name; + } + + /** + * The parent UPNPService Object + * @return the parent object instance + */ + public UPNPService getParent() { + return parent; + } + + /** + * Boolean to indicate if the variable is sending events when value + * of the var is changing. The events can be subscribed via the {@link net.sbbi.upnp.ServicesEventing} + * class + * @return true if sending events + */ + public boolean isSendEvents() { + return sendEvents; + } + + /** + * The default value of the state variable + * @return the default value representation as an string + */ + public String getDefaultValue() { + return defaultValue; + } + + /** + * The variable UPNP data type + * @return the data type + */ + public String getDataType() { + return dataType; + } + + /** + * The varialbe JAVA data type (using an UPNP->Java mapping) + * @return the class mapped + */ + public Class getDataTypeAsClass() { + return getDataTypeClassMapping( dataType ); + } + + /** + * A set of allowed values (String objects) for the variable + * @return the allowed values or null if none + */ + public Set getAllowedvalues() { + return allowedvalues; + } + + /** + * The minimum value as a string + * @return the minimum value or null if no restriction + */ + public String getMinimumRangeValue() { + return minimumRangeValue; + } + + /** + * The maximum value as a string + * @return the maximum value or null if no restriction + */ + public String getMaximumRangeValue() { + return maximumRangeValue; + } + + /** + * The value step range as a string + * @return the value step raqnge or null if no restriction + */ + public String getStepRangeValue() { + return stepRangeValue; + } + + public static Class getDataTypeClassMapping( String dataType ) { + int hash = dataType.hashCode(); + if ( hash == UI1_INT ) return Short.class; + else if ( hash == UI2_INT ) return Integer.class; + else if ( hash == UI4_INT ) return Long.class; + else if ( hash == I1_INT ) return Byte.class; + else if ( hash == I2_INT ) return Short.class; + else if ( hash == I4_INT ) return Integer.class; + else if ( hash == INT_INT ) return Integer.class; + else if ( hash == R4_INT ) return Float.class; + else if ( hash == R8_INT ) return Double.class; + else if ( hash == NUMBER_INT ) return Double.class; + else if ( hash == FIXED_14_4_INT ) return Double.class; + else if ( hash == FLOAT_INT ) return Float.class; + else if ( hash == CHAR_INT) return Character.class; + else if ( hash == STRING_INT ) return String.class; + else if ( hash == DATE_INT ) return Date.class; + else if ( hash == DATETIME_INT ) return Date.class; + else if ( hash == DATETIME_TZ_INT ) return Date.class; + else if ( hash == TIME_INT ) return Date.class; + else if ( hash == TIME_TZ_INT ) return Date.class; + else if ( hash == BOOLEAN_INT ) return Boolean.class; + else if ( hash == BIN_BASE64_INT ) return String.class; + else if ( hash == BIN_HEX_INT ) return String.class; + else if ( hash == URI_INT ) return URI.class; + else if ( hash == UUID_INT ) return String.class; + return null; + } + + public static String getUPNPDataTypeMapping( String className ) { + if ( className.equals( Short.class.getName() ) || className.equals( "short" )) return I2; + else if ( className.equals( Byte.class.getName() ) || className.equals( "byte" )) return I1; + else if ( className.equals( Integer.class.getName() ) || className.equals( "int" ) ) return INT; + else if ( className.equals( Long.class.getName() ) || className.equals( "long" ) ) return UI4; + else if ( className.equals( Float.class.getName() ) || className.equals( "float" )) return FLOAT; + else if ( className.equals( Double.class.getName() ) || className.equals( "double" ) ) return NUMBER; + else if ( className.equals( Character.class.getName() ) || className.equals( "char" ) ) return CHAR; + else if ( className.equals( String.class.getName() ) || className.equals( "string" ) ) return STRING; + else if ( className.equals( Date.class.getName() ) ) return DATETIME; + else if ( className.equals( Boolean.class.getName() ) || className.equals( "boolean" ) ) return BOOLEAN; + else if ( className.equals( URI.class.getName() ) ) return URI; + return null; + } + + public static Object UPNPToJavaObject( String dataType, String value ) throws Throwable { + if ( value == null ) throw new Exception( "null value" ); + if ( dataType == null ) throw new Exception( "null dataType" ); + int hash = dataType.hashCode(); + if ( hash == UI1_INT ) return new Short( value ); + else if ( hash == UI2_INT ) return new Integer( value ); + else if ( hash == UI4_INT ) return new Long( value ); + else if ( hash == I1_INT ) return new Byte( value ); + else if ( hash == I2_INT ) return new Short( value ); + else if ( hash == I4_INT ) return new Integer( value ); + else if ( hash == INT_INT ) return new Integer( value ); + else if ( hash == R4_INT ) return new Float( value ); + else if ( hash == R8_INT ) return new Double( value ); + else if ( hash == NUMBER_INT ) return new Double( value ); + else if ( hash == FIXED_14_4_INT ) return new Double( value ); + else if ( hash == FLOAT_INT ) return new Float( value ); + else if ( hash == CHAR_INT) return new Character( value.charAt( 0 ) ); + else if ( hash == STRING_INT ) return value; + else if ( hash == DATE_INT ) return ISO8601Date.parse( value ); + else if ( hash == DATETIME_INT ) return ISO8601Date.parse( value ); + else if ( hash == DATETIME_TZ_INT ) return ISO8601Date.parse( value ); + else if ( hash == TIME_INT ) return ISO8601Date.parse( value ); + else if ( hash == TIME_TZ_INT ) return ISO8601Date.parse( value ); + else if ( hash == BOOLEAN_INT ) { + if ( value.equals( "1" ) || value.equalsIgnoreCase( "yes" ) || value.equals( "true" ) ) { + return Boolean.TRUE; + } + return Boolean.FALSE; + } + else if ( hash == BIN_BASE64_INT ) return value; + else if ( hash == BIN_HEX_INT ) return value; + else if ( hash == URI_INT ) return new URI( value ); + else if ( hash == UUID_INT ) return value; + throw new Exception( "Unhandled data type " + dataType ); + } + +} diff --git a/source/net/sbbi/upnp/services/ServiceStateVariableTypes.java b/source/net/sbbi/upnp/services/ServiceStateVariableTypes.java new file mode 100644 index 000000000..558d559c0 --- /dev/null +++ b/source/net/sbbi/upnp/services/ServiceStateVariableTypes.java @@ -0,0 +1,188 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.services; + +/** + * Interface to defined allowed values for service state variables data types + * @author SuperBonBon + * @version 1.0 + */ +public interface ServiceStateVariableTypes { + + /** + * Unsigned 1 Byte int. Same format as int without leading sign. + */ + public final static String UI1 = "ui1"; + /** + * Unsigned 2 Byte int. Same format as int without leading sign. + */ + public final static String UI2 = "ui2"; + /** + * Unsigned 4 Byte int. Same format as int without leading sign. + */ + public final static String UI4 = "ui4"; + /** + * 1 Byte int. Same format as int. + */ + public final static String I1 = "i1"; + /** + * 2 Byte int. Same format as int. + */ + public final static String I2 = "i2"; + /** + * 4 Byte int. Same format as int. + */ + public final static String I4 = "i4"; + /** + * Fixed point, integer number. May have leading sign. May have leading zeros. + * (No currency symbol.) (No grouping of digits to the left of the decimal, e.g., no commas.) + */ + public final static String INT = "int"; + /** + * 4 Byte float. Same format as float. Must be between 3.40282347E+38 to 1.17549435E-38. + */ + public final static String R4 = "r4"; + /** + * 8 Byte float. Same format as float. Must be between -1.79769313486232E308 and -4.94065645841247E-324 + * for negative values, and between 4.94065645841247E-324 and 1.79769313486232E308 for positive values, + * i.e., IEEE 64-bit (8-Byte) double. + */ + public final static String R8 = "r8"; + /** + * Same as r8. + */ + public final static String NUMBER = "number"; + /** + * Same as r8 but no more than 14 digits to the left of the decimal point and no more than 4 to the right. + */ + public final static String FIXED_14_4 = "fixed.14.4"; + /** + * Floating point number. Mantissa (left of the decimal) and/or exponent may have a leading sign. + * Mantissa and/or exponent may have leading zeros. Decimal character in mantissa is a period, i.e., + * whole digits in mantissa separated from fractional digits by period. Mantissa separated from exponent + * by E. (No currency symbol.) (No grouping of digits in the mantissa, e.g., no commas.) + */ + public final static String FLOAT = "float"; + /** + * Unicode string. One character long. + */ + public final static String CHAR = "char"; + /** + * Unicode string. No limit on length. + */ + public final static String STRING = "string"; + /** + * Date in a subset of ISO 8601 format without time data. + */ + public final static String DATE = "date"; + /** + * Date in ISO 8601 format with optional time but no time zone. + */ + public final static String DATETIME = "dateTime"; + /** + * Date in ISO 8601 format with optional time and optional time zone. + */ + public final static String DATETIME_TZ = "dateTime.tz"; + /** + * Time in a subset of ISO 8601 format with no date and no time zone. + */ + public final static String TIME = "time"; + /** + * Time in a subset of ISO 8601 format with optional time zone but no date. + */ + public final static String TIME_TZ = "time.tz"; + /** + * 0, false, or no for false; 1, true, or yes for true. + */ + public final static String BOOLEAN = "boolean"; + /** + * MIME-style Base64 encoded binary BLOB. Takes 3 Bytes, splits them into 4 parts, + * and maps each 6 bit piece to an octet. (3 octets are encoded as 4.) No limit on size. + */ + public final static String BIN_BASE64 = "bin.base64"; + /** + * Hexadecimal digits representing octets. Treats each nibble as a hex digit and encodes + * as a separate Byte. (1 octet is encoded as 2.) No limit on size. + */ + public final static String BIN_HEX = "bin.hex"; + /** + * Universal Resource Identifier. + */ + public final static String URI = "uri"; + /** + * Universally Unique ID. Hexadecimal digits representing octets. + * Optional embedded hyphens are ignored. + */ + public final static String UUID = "uuid"; + + public final static int UI1_INT = "ui1".hashCode(); + public final static int UI2_INT = "ui2".hashCode(); + public final static int UI4_INT = "ui4".hashCode(); + public final static int I1_INT = "i1".hashCode(); + public final static int I2_INT = "i2".hashCode(); + public final static int I4_INT = "i4".hashCode(); + public final static int INT_INT = "int".hashCode(); + public final static int R4_INT = "r4".hashCode(); + public final static int R8_INT = "r8".hashCode(); + public final static int NUMBER_INT = "number".hashCode(); + public final static int FIXED_14_4_INT = "fixed.14.4".hashCode(); + public final static int FLOAT_INT = "float".hashCode(); + public final static int CHAR_INT = "char".hashCode(); + public final static int STRING_INT = "string".hashCode(); + public final static int DATE_INT = "date".hashCode(); + public final static int DATETIME_INT = "dateTime".hashCode(); + public final static int DATETIME_TZ_INT = "dateTime.tz".hashCode(); + public final static int TIME_INT = "time".hashCode(); + public final static int TIME_TZ_INT = "time.tz".hashCode(); + public final static int BOOLEAN_INT = "boolean".hashCode(); + public final static int BIN_BASE64_INT = "bin.base64".hashCode(); + public final static int BIN_HEX_INT = "bin.hex".hashCode(); + public final static int URI_INT = "uri".hashCode(); + public final static int UUID_INT = "uuid".hashCode(); + +} diff --git a/source/net/sbbi/upnp/services/UPNPService.java b/source/net/sbbi/upnp/services/UPNPService.java new file mode 100644 index 000000000..4c3bf2d90 --- /dev/null +++ b/source/net/sbbi/upnp/services/UPNPService.java @@ -0,0 +1,326 @@ +/* + * ============================================================================ + * The Apache Software License, Version 1.1 + * ============================================================================ + * + * Copyright (C) 2002 The Apache Software Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modifica- + * tion, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. The end-user documentation included with the redistribution, if any, must + * include the following acknowledgment: "This product includes software + * developed by SuperBonBon Industries (http://www.sbbi.net/)." + * Alternately, this acknowledgment may appear in the software itself, if + * and wherever such third-party acknowledgments normally appear. + * + * 4. The names "UPNPLib" and "SuperBonBon Industries" must not be + * used to endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * info@sbbi.net. + * + * 5. Products derived from this software may not be called + * "SuperBonBon Industries", nor may "SBBI" appear in their name, + * without prior written permission of SuperBonBon Industries. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT,INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * This software consists of voluntary contributions made by many individuals + * on behalf of SuperBonBon Industries. For more information on + * SuperBonBon Industries, please see . + */ +package net.sbbi.upnp.services; + +import org.apache.commons.jxpath.*; +import org.apache.commons.jxpath.xml.*; + +import java.util.*; +import java.io.IOException; +import java.net.*; + +import net.sbbi.upnp.JXPathParser; +import net.sbbi.upnp.devices.*; + +/** + * Representation of an UPNP service + * @author SuperBonBon + * @version 1.0 + */ +public class UPNPService { + + protected String serviceType; + protected String serviceId; + private int specVersionMajor; + private int specVersionMinor; + protected URL SCPDURL; + protected String SCPDURLData; + protected URL controlURL; + protected URL eventSubURL; + protected UPNPDevice serviceOwnerDevice; + + protected Map UPNPServiceActions; + protected Map UPNPServiceStateVariables; + private String USN; + + private boolean parsedSCPD = false; + private DocumentContainer UPNPService; + + public UPNPService( JXPathContext serviceCtx, URL baseDeviceURL, UPNPDevice serviceOwnerDevice ) throws MalformedURLException { + this.serviceOwnerDevice = serviceOwnerDevice; + serviceType = (String)serviceCtx.getValue( "serviceType" ); + serviceId = (String)serviceCtx.getValue( "serviceId" ); + SCPDURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "SCPDURL" ), baseDeviceURL ); + controlURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "controlURL" ), baseDeviceURL ); + eventSubURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "eventSubURL" ), baseDeviceURL ); + USN = serviceOwnerDevice.getUDN().concat( "::" ).concat( serviceType ); + } + + public String getServiceType() { + return serviceType; + } + + public String getServiceId() { + return serviceId; + } + + public String getUSN(){ + return USN; + } + + public URL getSCPDURL() { + return SCPDURL; + } + + public URL getControlURL() { + return controlURL; + } + + public URL getEventSubURL() { + return eventSubURL; + } + + public int getSpecVersionMajor() { + lazyInitiate(); + return specVersionMajor; + } + + public int getSpecVersionMinor() { + lazyInitiate(); + return specVersionMinor; + } + + public UPNPDevice getServiceOwnerDevice() { + return serviceOwnerDevice; + } + + /** + * Retreives a service action for its given name + * @param actionName the service action name + * @return a ServiceAction object or null if no matching action for this service has been found + */ + public ServiceAction getUPNPServiceAction( String actionName ) { + lazyInitiate(); + return (ServiceAction)UPNPServiceActions.get( actionName ); + } + + /** + * Retreives a service state variable for its given name + * @param stateVariableName the state variable name + * @return a ServiceStateVariable object or null if no matching state variable has been found + */ + public ServiceStateVariable getUPNPServiceStateVariable( String stateVariableName ) { + lazyInitiate(); + return (ServiceStateVariable)UPNPServiceStateVariables.get( stateVariableName ); + } + + public Iterator getAvailableActionsName() { + lazyInitiate(); + return UPNPServiceActions.keySet().iterator(); + } + + public int getAvailableActionsSize() { + lazyInitiate(); + return UPNPServiceActions.keySet().size(); + } + + public Iterator getAvailableStateVariableName() { + lazyInitiate(); + return UPNPServiceStateVariables.keySet().iterator(); + } + + public int getAvailableStateVariableSize() { + lazyInitiate(); + return UPNPServiceStateVariables.keySet().size(); + } + + private void parseSCPD() { + try { + DocumentContainer.registerXMLParser( DocumentContainer.MODEL_DOM, new JXPathParser() ); + UPNPService = new DocumentContainer( SCPDURL, DocumentContainer.MODEL_DOM ); + JXPathContext context = JXPathContext.newContext( this ); + Pointer rootPtr = context.getPointer( "UPNPService/scpd" ); + JXPathContext rootCtx = context.getRelativeContext( rootPtr ); + + specVersionMajor = Integer.parseInt( (String)rootCtx.getValue( "specVersion/major" ) ); + specVersionMinor = Integer.parseInt( (String)rootCtx.getValue( "specVersion/minor" ) ); + + parseServiceStateVariables( rootCtx ); + + Pointer actionsListPtr = rootCtx.getPointer( "actionList" ); + JXPathContext actionsListCtx = context.getRelativeContext( actionsListPtr ); + Double arraySize = (Double)actionsListCtx.getValue( "count( action )" ); + UPNPServiceActions = new HashMap(); + for ( int i = 1; i <= arraySize.intValue(); i++ ) { + ServiceAction action = new ServiceAction(); + action.name = (String)actionsListCtx.getValue( "action["+i+"]/name" ); + action.parent = this; + Pointer argumentListPtr = null; + try { + argumentListPtr = actionsListCtx.getPointer( "action["+i+"]/argumentList" ); + } catch ( JXPathException ex ) { + // there is no arguments list. + } + if ( argumentListPtr != null ) { + JXPathContext argumentListCtx = actionsListCtx.getRelativeContext( argumentListPtr ); + Double arraySizeArgs = (Double)argumentListCtx.getValue( "count( argument )" ); + + List orderedActionArguments = new ArrayList(); + for ( int z = 1; z <= arraySizeArgs.intValue(); z++ ) { + ServiceActionArgument arg = new ServiceActionArgument(); + arg.name = (String)argumentListCtx.getValue( "argument["+z+"]/name" ); + String direction = (String)argumentListCtx.getValue( "argument["+z+"]/direction" ); + arg.direction = direction.equals( ServiceActionArgument.DIRECTION_IN ) ? ServiceActionArgument.DIRECTION_IN : ServiceActionArgument.DIRECTION_OUT; + String stateVarName = (String)argumentListCtx.getValue( "argument["+z+"]/relatedStateVariable" ); + ServiceStateVariable stateVar = (ServiceStateVariable)UPNPServiceStateVariables.get( stateVarName ); + if ( stateVar == null ) { + throw new IllegalArgumentException( "Unable to find any state variable named " + stateVarName + " for service " + getServiceId() + " action " + action.name + " argument " + arg.name ); + } + arg.relatedStateVariable = stateVar; + orderedActionArguments.add( arg ); + } + + if ( arraySizeArgs.intValue() > 0 ) { + action.setActionArguments( orderedActionArguments ); + } + } + + UPNPServiceActions.put( action.getName(), action ); + } + parsedSCPD = true; + } catch ( Throwable t ) { + throw new RuntimeException( "Error during lazy SCDP file parsing at " + SCPDURL, t ); + } + } + + private void parseServiceStateVariables( JXPathContext rootContext ) { + Pointer serviceStateTablePtr = rootContext.getPointer( "serviceStateTable" ); + JXPathContext serviceStateTableCtx = rootContext.getRelativeContext( serviceStateTablePtr ); + Double arraySize = (Double)serviceStateTableCtx.getValue( "count( stateVariable )" ); + UPNPServiceStateVariables = new HashMap(); + for ( int i = 1; i <= arraySize.intValue(); i++ ) { + ServiceStateVariable srvStateVar = new ServiceStateVariable(); + String sendEventsLcl = null; + try { + sendEventsLcl = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/@sendEvents" ); + } catch ( JXPathException defEx ) { + // sendEvents not provided defaulting according to specs to "yes" + sendEventsLcl = "yes"; + } + srvStateVar.parent = this; + srvStateVar.sendEvents = sendEventsLcl.equalsIgnoreCase( "no" ) ? false : true; + srvStateVar.name = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/name" ); + srvStateVar.dataType = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/dataType" ); + try { + srvStateVar.defaultValue = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/defaultValue" ); + } catch ( JXPathException defEx ) { + // can happend since default value is not + } + Pointer allowedValuesPtr = null; + try { + allowedValuesPtr = serviceStateTableCtx.getPointer( "stateVariable["+i+"]/allowedValueList" ); + } catch ( JXPathException ex ) { + // there is no allowed values list. + } + if ( allowedValuesPtr != null ) { + JXPathContext allowedValuesCtx = serviceStateTableCtx.getRelativeContext( allowedValuesPtr ); + Double arraySizeAllowed = (Double)allowedValuesCtx.getValue( "count( allowedValue )" ); + srvStateVar.allowedvalues = new HashSet(); + for ( int z = 1; z <= arraySizeAllowed.intValue(); z++ ) { + String allowedValue = (String)allowedValuesCtx.getValue( "allowedValue["+z+"]" ); + srvStateVar.allowedvalues.add( allowedValue ); + } + } + + Pointer allowedValueRangePtr = null; + try { + allowedValueRangePtr = serviceStateTableCtx.getPointer( "stateVariable["+i+"]/allowedValueRange" ); + } catch ( JXPathException ex ) { + // there is no allowed values list, can happen + } + if ( allowedValueRangePtr != null ) { + + srvStateVar.minimumRangeValue = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/allowedValueRange/minimum" ); + srvStateVar.maximumRangeValue = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/allowedValueRange/maximum" ); + try { + srvStateVar.stepRangeValue = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/allowedValueRange/step" ); + } catch ( JXPathException stepEx ) { + // can happend since step is not mandatory + } + } + UPNPServiceStateVariables.put( srvStateVar.getName(), srvStateVar ); + } + + } + + private void lazyInitiate() { + if ( !parsedSCPD ) + synchronized( this ) { + if ( !parsedSCPD ) + parseSCPD(); + } + } + + /** + * Used for JXPath parsing, do not use this method + * @return a Container object for Xpath parsing capabilities + */ + public Container getUPNPService() { + return UPNPService; + } + + public String getSCDPData() { + if ( SCPDURLData == null ) { + try { + + java.io.InputStream in = SCPDURL.openConnection().getInputStream(); + int readen = 0; + byte[] buff = new byte[512]; + StringBuffer strBuff = new StringBuffer(); + while( ( readen = in.read( buff ) ) != -1 ) { + strBuff.append( new String( buff, 0, readen ) ); + } + in.close(); + SCPDURLData = strBuff.toString(); + } catch ( IOException ioEx ) { + return null; + } + } + return SCPDURLData; + } +} diff --git a/source/net/sbbi/upnp/version.properties b/source/net/sbbi/upnp/version.properties new file mode 100644 index 000000000..d948172d8 --- /dev/null +++ b/source/net/sbbi/upnp/version.properties @@ -0,0 +1,8 @@ +# please make sur to update those values +# when crating a new release +# especially to create cvs changelogs +release.version=1.0.4 +release.version.cvs.tag=V1_0_4 +release.version.publish.date=20 Nov 2006 +last.release.version.cvs.tag=V1_0_3 +last.release.version.publish.date=14 Feb 2006 \ No newline at end of file