All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jupnp.android.AndroidUpnpServiceConfiguration Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2011-2025 4th Line GmbH, Switzerland and others
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License Version 1 or later
 * ("CDDL") (collectively, the "License"). You may not use this file
 * except in compliance with the License. See LICENSE.txt for more
 * information.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * SPDX-License-Identifier: CDDL-1.0
 */
package org.jupnp.android;

import org.jupnp.DefaultUpnpServiceConfiguration;
import org.jupnp.binding.xml.DeviceDescriptorBinder;
import org.jupnp.binding.xml.RecoveringUDA10DeviceDescriptorBinderImpl;
import org.jupnp.binding.xml.ServiceDescriptorBinder;
import org.jupnp.binding.xml.UDA10ServiceDescriptorBinderSAXImpl;
import org.jupnp.model.Namespace;
import org.jupnp.model.ServerClientTokens;
import org.jupnp.transport.impl.GENAEventProcessorImpl;
import org.jupnp.transport.impl.SOAPActionProcessorImpl;
import org.jupnp.transport.impl.ServletStreamServerConfigurationImpl;
import org.jupnp.transport.impl.ServletStreamServerImpl;
import org.jupnp.transport.impl.jetty.JettyServletContainer;
import org.jupnp.transport.impl.jetty.JettyStreamClientImpl;
import org.jupnp.transport.impl.jetty.StreamClientConfigurationImpl;
import org.jupnp.transport.spi.GENAEventProcessor;
import org.jupnp.transport.spi.NetworkAddressFactory;
import org.jupnp.transport.spi.SOAPActionProcessor;
import org.jupnp.transport.spi.StreamClient;
import org.jupnp.transport.spi.StreamServer;

import android.os.Build;

/**
 * Configuration settings for deployment on Android.
 * 

* This configuration utilizes the Jetty transport implementation found in org.jupnp.transport.impl.jetty * for TCP/HTTP networking, as client and server. The servlet context path for UPnP is set to /upnp. *

*

* This configuration utilizes {@link UDA10ServiceDescriptorBinderSAXImpl}, the system property * org.xml.sax.driver is set to org.xmlpull.v1.sax2.Driver. *

*

* To preserve battery, the {@link org.jupnp.registry.Registry} will only be maintained every 3 seconds. *

* * @author Christian Bauer */ public class AndroidUpnpServiceConfiguration extends DefaultUpnpServiceConfiguration { public AndroidUpnpServiceConfiguration() { this(0, 0); // Ephemeral port } public AndroidUpnpServiceConfiguration(int streamListenPort, int multicastResponsePort) { super(streamListenPort, multicastResponsePort, false); // This should be the default on Android 2.1 but it's not set by default System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver"); } @Override protected NetworkAddressFactory createNetworkAddressFactory(int streamListenPort, int multicastResponsePort) { return new AndroidNetworkAddressFactory(streamListenPort, multicastResponsePort); } @Override protected Namespace createNamespace() { // For the Jetty server, this is the servlet context path return new Namespace("/upnp"); } @Override public StreamClient createStreamClient() { // Use Jetty return new JettyStreamClientImpl(new StreamClientConfigurationImpl(getSyncProtocolExecutorService()) { @Override public String getUserAgentValue(int majorVersion, int minorVersion) { // TODO: UPNP VIOLATION: Synology NAS requires User-Agent to contain // "Android" to return DLNA protocolInfo required to stream to Samsung TV // see: http://two-play.com/forums/viewtopic.php?f=6&t=81 ServerClientTokens tokens = new ServerClientTokens(majorVersion, minorVersion); tokens.setOsName("Android"); tokens.setOsVersion(Build.VERSION.RELEASE); return tokens.toString(); } }); } @Override public StreamServer createStreamServer(NetworkAddressFactory networkAddressFactory) { // Use Jetty, start/stop a new shared instance of JettyServletContainer return new ServletStreamServerImpl(new ServletStreamServerConfigurationImpl(JettyServletContainer.INSTANCE, networkAddressFactory.getStreamListenPort())); } @Override protected DeviceDescriptorBinder createDeviceDescriptorBinderUDA10() { return new RecoveringUDA10DeviceDescriptorBinderImpl(); } @Override protected ServiceDescriptorBinder createServiceDescriptorBinderUDA10() { return new UDA10ServiceDescriptorBinderSAXImpl(); } @Override protected SOAPActionProcessor createSOAPActionProcessor() { return new SOAPActionProcessorImpl(); } @Override protected GENAEventProcessor createGENAEventProcessor() { return new GENAEventProcessorImpl(); } @Override public int getRegistryMaintenanceIntervalMillis() { return 3000; // Preserve battery on Android, only run every 3 seconds } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy