Added new system properties to configure the UPnP basedriver:
felix.upnpbase.log (default 2) (range 0 - 4)
felix.upnpbase.exporter.enabled (default true)
felix.upnpbase.importer.enabled (default true)
felix.upnpbase.cyberdomo.log (default false)
felix.upnpbase.cyberdomo.net.loopback (default false)
felix.upnpbase.cyberdomo.net.onlyIPV4 (default true)
felix.upnpbase.cyberdomo.net.onlyIPV6 (default false)
cyberdomo.ssdp.mx (default 5) it represent the delay in seconds to receive an MSearch reply. (it should be between 2 and 10)
cyberdomo.ssdp.buffersize (default 2048) (range from 512 to 65636)
cyberdomo.ssdp.port (default 1900) (according to the UPnP Spec. it should never be changed; range 1024 - 49151 )


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@607467 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java b/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
index 2d1685e..66201ba 100644
--- a/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
+++ b/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/Activator.java
@@ -19,16 +19,6 @@
 
 package org.apache.felix.upnp.basedriver;
 
-import org.apache.felix.upnp.extra.controller.DevicesInfo;
-import org.apache.felix.upnp.extra.controller.DriverController;
-
-import org.cybergarage.upnp.UPnP;
-import org.cybergarage.xml.parser.JaxpParser;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
-
 import org.apache.felix.upnp.basedriver.controller.impl.DriverControllerImpl;
 import org.apache.felix.upnp.basedriver.export.RootDeviceExportingQueue;
 import org.apache.felix.upnp.basedriver.export.RootDeviceListener;
@@ -41,12 +31,26 @@
 import org.apache.felix.upnp.basedriver.importer.core.event.thread.SubScriber;
 import org.apache.felix.upnp.basedriver.tool.Logger;
 import org.apache.felix.upnp.basedriver.tool.Util;
+import org.apache.felix.upnp.extra.controller.DevicesInfo;
+import org.apache.felix.upnp.extra.controller.DriverController;
+import org.cybergarage.upnp.UPnP;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 
 /* 
 * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
 */
 public class Activator implements BundleActivator {
-
+	
+	private final static String BASEDRIVER_LOG_PROP = "felix.upnpbase.log";
+	private final static String EXPORTER_ENABLED_PROP = "felix.upnpbase.exporter.enabled";
+	private final static String IMPORTER_ENABLED_PROP = "felix.upnpbase.importer.enabled";
+	private final static String NET_ONLY_IPV4_PROP = "felix.upnpbase.cyberdomo.net.onlyIPV4";
+	private final static String NET_ONLY_IPV6_PROP = "felix.upnpbase.cyberdomo.net.onlyIPV6";
+	private final static String NET_USE_LOOPBACK_PROP = "felix.upnpbase.cyberdomo.net.loopback";
+	private final static String CYBERDOMO_LOG_PROP = "felix.upnpbase.cyberdomo.log";
+	
     public static BundleContext bc;
     public static Logger logger;        
 	private RootDeviceExportingQueue queue;
@@ -70,36 +74,71 @@
         
  		Activator.bc = context;				
 		
-	    String levelStr = (String) Util.getPropertyDefault(context,"felix.upnpbase.log","2");	    
+ 		//
+ 		// Debugger configuration
+ 		//
+	    String levelStr = Util.getPropertyDefault(context,BASEDRIVER_LOG_PROP,"2");	    
 		Activator.logger = new Logger(levelStr);
-	    String cyberLog = (String) Util.getPropertyDefault(context,"felix.upnpbase.cyberlink.log","false");
+		
+	    String cyberLog = Util.getPropertyDefault(context,CYBERDOMO_LOG_PROP,"false");
 	    Activator.logger.setCyberDebug(cyberLog);
+	    
+	    
+ 		//
+	    // NET configuration
+	   	//
+	    String useOnlyIPV4 = Util.getPropertyDefault(context,NET_ONLY_IPV4_PROP,"true");
+    	if (useOnlyIPV4.equalsIgnoreCase("true"))
+            UPnP.setEnable(UPnP.USE_ONLY_IPV4_ADDR);
+    	else
+    		UPnP.setDisable(UPnP.USE_ONLY_IPV4_ADDR);
+    	
+       	String useOnlyIPV6 = Util.getPropertyDefault(context,NET_ONLY_IPV6_PROP,"false");
+    	if (useOnlyIPV6.equalsIgnoreCase("true"))
+            UPnP.setEnable(UPnP.USE_ONLY_IPV6_ADDR);
+    	else
+    		UPnP.setDisable(UPnP.USE_ONLY_IPV6_ADDR);
 
-        UPnP.setEnable(UPnP.USE_ONLY_IPV4_ADDR);
-        UPnP.setDisable(UPnP.USE_LOOPBACK_ADDR);
-		
-		//Setting up Base Driver Exporter
-		this.queue = new RootDeviceExportingQueue();
-		this.producerDeviceToExport = new RootDeviceListener(queue);
-		producerDeviceToExport.activate();
-		consumerDeviceToExport = new ThreadExporter(queue);
-		new Thread(consumerDeviceToExport, "upnp.basedriver.Exporter").start();
+       	String useLoopback = Util.getPropertyDefault(context,NET_USE_LOOPBACK_PROP,"false");
+    	if (useLoopback.equalsIgnoreCase("true"))
+            UPnP.setEnable(UPnP.USE_LOOPBACK_ADDR);
+    	else
+    		UPnP.setDisable(UPnP.USE_LOOPBACK_ADDR);
 
-		//Setting up Base Driver Importer
-		this.notifierQueue = new NotifierQueue();
-		this.subQueue = new SubscriptionQueue();
-		ctrl = new MyCtrlPoint(context, subQueue, notifierQueue);
-		
-		//Enable CyberLink re-new for Event
-		ctrl.setNMPRMode(true);
+    	//
+    	// Exporter configuration		
+       	//
+    	String useExporter = Util.getPropertyDefault(context,EXPORTER_ENABLED_PROP,"true");
+       	if (useExporter.equalsIgnoreCase("true")){
+			//Setting up Base Driver Exporter
+			this.queue = new RootDeviceExportingQueue();
+			this.producerDeviceToExport = new RootDeviceListener(queue);
+			producerDeviceToExport.activate();
+			consumerDeviceToExport = new ThreadExporter(queue);
+			new Thread(consumerDeviceToExport, "upnp.basedriver.Exporter").start();
+       	}
+
+    	//
+       	// Importer configuration		
+      	//
+       	String useImporter = Util.getPropertyDefault(context,IMPORTER_ENABLED_PROP,"true");
+       	if (useImporter.equalsIgnoreCase("true")){
+			//Setting up Base Driver Importer
+			this.notifierQueue = new NotifierQueue();
+			this.subQueue = new SubscriptionQueue();
+			ctrl = new MyCtrlPoint(context, subQueue, notifierQueue);
 			
-		this.monitor=new Monitor();
-		this.notifier = new Notifier(notifierQueue,monitor);
-		this.subScriber = new SubScriber(ctrl, subQueue,monitor);
-		
-		ctrl.start();
-		subScriber.start();
-		notifier.start();
+			//Enable CyberLink re-new for Event
+			ctrl.setNMPRMode(true);
+				
+			this.monitor=new Monitor();
+			this.notifier = new Notifier(notifierQueue,monitor);
+			this.subScriber = new SubScriber(ctrl, subQueue,monitor);
+			
+			ctrl.start();
+			subScriber.start();
+			notifier.start();
+       	}
         
         doControllerRegistration();
         
@@ -123,15 +162,20 @@
         
         drvControllerRegistrar.unregister();
         
-		//Setting up Base Driver Exporter
-		consumerDeviceToExport.end();
-		consumerDeviceToExport.cleanUp();
-		producerDeviceToExport.deactive();
+		//Base Driver Exporter
+        if (consumerDeviceToExport != null) {
+			consumerDeviceToExport.end();
+			consumerDeviceToExport.cleanUp();
+			producerDeviceToExport.deactive();
+        }
 
-		//Setting up Base Driver Importer
-		ctrl.stop();
-		subScriber.close();
-		notifier.close();
+		//Base Driver Importer
+        if (ctrl != null){
+			ctrl.stop();
+			subScriber.close();
+			notifier.close();
+        }
+        
 		Activator.logger.close();
 		Activator.logger=null;
 		Activator.bc = null;
diff --git a/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java b/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
index a772516..f5832e4 100644
--- a/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
+++ b/upnp/basedriver/src/main/java/org/apache/felix/upnp/basedriver/controller/impl/DriverControllerImpl.java
@@ -58,13 +58,24 @@
     }

 

     public String getLocationURL(String udn) {

+    	if (myCtrl == null){

+    		logger.WARNING("UPnP Importer is disabled. getLocationURL is not available");

+    		return null;

+    	}

         if (udn == null || udn.equals(""))  throw new IllegalArgumentException("Invalid udn paramenter");

         Device device = myCtrl.getDevice(udn);

-        if (device == null) logger.WARNING("getLocationURL():: No device data available for UDN:"+udn);

-        return myCtrl.getDevice(udn).getLocation();

+        if (device == null) {

+        	logger.WARNING("getLocationURL():: No device data available for UDN:"+udn);

+        	return null;

+        }

+        return device.getLocation();

     }

     

     public String getSCPDURL(String udn, String serviceId) {

+    	if (myCtrl == null){

+    		logger.WARNING("UPnP Importer is disabled. getSCPDURL() is not available");

+    		return null;

+    	}

         if (udn == null || udn.equals("") )  throw new IllegalArgumentException("Invalid udn paramenter");

         if (serviceId == null || serviceId.equals("") )  throw new IllegalArgumentException("Invalid serviceId paramenter");

         Device device= myCtrl.getDevice(udn);

@@ -82,8 +93,16 @@
     }

     

     public String resolveRelativeUrl(String udn, String link) {

-        if (udn == null || udn.equals(""))  throw new IllegalArgumentException("Invalid udn paramenter");

+       	if (myCtrl == null){

+    		logger.WARNING("UPnP Importer is disabled. resolveRelativeUrl() is not available");

+    		return null;

+    	}

+       if (udn == null || udn.equals(""))  throw new IllegalArgumentException("Invalid udn paramenter");

         Device device = myCtrl.getDevice(udn);

+        if (device == null) {

+            logger.WARNING("resolveRelativeUrl():: No device data available for UDN: "+udn);

+            return null;

+        }

         return resolveRelativeLink(device,link);        

     }

 

@@ -117,7 +136,11 @@
    }

 

     public void search(String target) {

-        myCtrl.search(target);       

+       	if (myCtrl == null){

+    		logger.WARNING("UPnP Importer is disabled. resolveRelativeUrl() is not available");

+    		return ;

+    	}

+       myCtrl.search(target);       

     }

 

 

diff --git a/upnp/doc/config.properties.upnp b/upnp/doc/config.properties.upnp
index fbacad7..95aef41 100644
--- a/upnp/doc/config.properties.upnp
+++ b/upnp/doc/config.properties.upnp
@@ -36,7 +36,6 @@
  file:../org.osgi.core/target/org.osgi.core-1.1.0-SNAPSHOT.jar \

  file:../javax.servlet/target/javax.servlet-0.9.0-SNAPSHOT.jar \

  file:../org.osgi.compendium/target/org.osgi.compendium-0.9.0-SNAPSHOT.jar \

- file:../log/target/org.apache.felix.log-0.9.0-SNAPSHOT.jar \

  file:../http.jetty/target/org.apache.felix.http.jetty-0.9.0-SNAPSHOT.jar \

  file:../upnp/basedriver/target/org.apache.felix.upnp.basedriver-0.3.0-SNAPSHOT.jar \

  file:../upnp/extra/target/org.apache.felix.upnp.extra-0.3.0-SNAPSHOT.jar \

@@ -59,6 +58,23 @@
 

 

 #

+# UPnP Basedriver properties

+#

+#felix.upnpbase.log=2

+#felix.upnpbase.exporter.enabled=true

+#felix.upnpbase.importer.enabled=true

+#felix.upnpbase.cyberdomo.log=false

+#felix.upnpbase.cyberdomo.net.loopback=false

+#felix.upnpbase.cyberdomo.net.onlyIPV4=true

+#felix.upnpbase.cyberdomo.net.onlyIPV6=false

+#cyberdomo.ssdp.mx=5

+#cyberdomo.ssdp.buffersize=2048

+#cyberdomo.ssdp.port=1900

+

+

+

+

+#

 # Java platform package export properties.

 #

 jre-1.3=, \