Author: furfari
Date: Tue Sep 23 09:50:24 2008
New Revision: 698237

URL: http://svn.apache.org/viewvc?rev=698237&view=rev
Log:
Added warning message to ThreadExporter when devices are not exported.
First revision of UPnP interface implementation provided by the basedriver 
importer 
Changed serviceFromSid() implementation in MyCtrlPoint;Now we don't rely now on 
the Cyberdomo internal list to associate the subscription ID (sid) to a 
services.
Added Thread.yield() to Notifier and SubScriber to avoid starvation.
Added critical section in Subscriber to synchronize  sidServices structure.
 

Modified:
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java
    
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/export/ThreadExporter.java
 Tue Sep 23 09:50:24 2008
@@ -146,16 +146,19 @@
                                Device d = 
BuildDevice.createCyberLinkDevice(dn.getReference());
                                if (d != null) {
                                        if(!bindInvokes(d,rootDevice)){
-                                               Activator.logger.DEBUG("Unable 
to find all the sub device or to set action listener");
+                                               
Activator.logger.WARNING("Unable to to set action listener for the exported 
device: "  + d.getUDN());
                                                continue;
                                        }
                                        ServiceRegistration listenReg = 
bindSubscribe(d);
                                        if(listenReg==null){
-                                               Activator.logger.DEBUG("Unable 
to set action listener event listener");
+                                               
Activator.logger.WARNING("Unable to set event listener for the exported device: 
" + d.getUDN());
                                                continue;
                                        }                       
                                        
//makeIcons(r.getRootDevice(),xml.getAbsolutePath());
-                                       d.start();
+                                       if (d.start() == false){
+                                               
Activator.logger.WARNING("Unable to allocate resources for the exported device: 
" + d.getUDN());
+                                               continue;                       
                
+                                       }
                                        exportedDevices.put(
                                                        
rootDevice.getProperty(UPnPDevice.UDN),
                                                        new 
ExportedDeviceInfo(d,listenReg,dn)

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/MyCtrlPoint.java
 Tue Sep 23 09:50:24 2008
@@ -79,8 +79,6 @@
         "(" + UPnPDevice.UPNP_EXPORT + "=*" + ")";
     private final String IMPORT_FLTR =
         "(" + org.apache.felix.upnp.basedriver.util.Constants.UPNP_IMPORT + 
"=*" + ")";
-//     private Hashtable waitingEvents;
-//     private Hashtable sidServices;
 
     
     public MyCtrlPoint(BundleContext context, SubscriptionQueue subQueue,
@@ -90,8 +88,6 @@
                
         devices = new Hashtable();
         addDeviceChangeListener(this);
-//      waitingEvents = new Hashtable();
-//      sidServices = new Hashtable();
                try {
                        context.addServiceListener(this, 
UPNP_EVENT_LISTENER_FLTR);
                } catch (InvalidSyntaxException e) {
@@ -111,7 +107,6 @@
        public void deviceAdded(Device cyberDevice) {
                String udn = cyberDevice.getUDN();
                String friendlyName = cyberDevice.getFriendlyName();
-               
                if (isExportedDevice(udn)) {
             Activator.logger.INFO("[Importer] discoverded Exported Device 
:"+friendlyName+"("+udn+")" );
                }
@@ -256,7 +251,7 @@
                                                                String 
serviceId = (String) filters[j].get(UPnPService.ID);
                                                                UPnPServiceImpl 
service = (UPnPServiceImpl) device.getService(serviceId);
                                                                FirstMessage 
msg = new FirstMessage(
-                                                                               
service.getCyberService(),
+                                                                               
service,
                                                                                
upnpEventListenerService);
                                                                
subQueue.enqueue(msg);                                                          
                        
                                                        }                       
                                
@@ -274,7 +269,7 @@
 
                                                for (int j = 0; j < 
eventedServices.length; j++) {
                                                        FirstMessage msg = new 
FirstMessage(
-                                                                       
eventedServices[j].getCyberService(),
+                                                                       
eventedServices[j],
                                                                        
upnpEventListenerService);
                                                        subQueue.enqueue(msg);
                                                }
@@ -298,7 +293,7 @@
                                                        if 
(filter.match(filters[j])) {
                                                                String 
serviceId = (String) filters[j].get(UPnPService.ID);
                                                                UPnPServiceImpl 
service = (UPnPServiceImpl) device.getService(serviceId);
-                                                               
newServices.add(service.getCyberService());
+                                                               
newServices.add(service);
                                                        }                       
                                
                                                }
                                                
context.ungetService(devicesRefs[i]);
@@ -359,9 +354,7 @@
                
        }
        
-    public void searchForListener(UPnPDeviceImpl device) {
-       System.out.println("searching for UPnPEvent Listners already 
registered");
-       
+    public void searchForListener(UPnPDeviceImpl device) {     
        Activator.logger.DEBUG("[Importer] searching for UPnPEventListener");
        ServiceReference[] listeners = null;
        try {
@@ -378,7 +371,7 @@
                                UPnPServiceImpl[] eventedServices = 
device.getEventedServices();
                                for (int j = 0; j < eventedServices.length; 
j++) {
                                        FirstMessage msg = new FirstMessage(
-                                                       
eventedServices[j].getCyberService(),
+                                                       eventedServices[j],
                                                        listener);
                                        subQueue.enqueue(msg);
                                }
@@ -388,7 +381,7 @@
                                        if( filter.match(filters[j])){
                                                String serviceId = (String) 
filters[j].get(UPnPService.ID);
                                                UPnPServiceImpl service = 
(UPnPServiceImpl) device.getService(serviceId);                                 
                      
-                                               subQueue.enqueue(new 
FirstMessage(service.getCyberService(), listener));
+                                               subQueue.enqueue(new 
FirstMessage(service, listener));
                                        }
                                }
                        }
@@ -411,7 +404,7 @@
         * @see 
org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.ServiceEvent)
         */
        
-       synchronized public void httpRequestRecieved(HTTPRequest httpReq) {
+       public void httpRequestRecieved(HTTPRequest httpReq) {
         Activator.logger.DEBUG("[Importer] httpRequestRecieved event");
         Activator.logger.PACKET(httpReq.toString());
 
@@ -433,13 +426,9 @@
         Activator.logger.DEBUG("[Importer] newEventArrived");
                String uuid = notifyReq.getSID();
 
-               Service service = serviceFromSid(uuid);
-               //System.out.println("new event arrived" + " seq: " +seq + " 
uuis: " +uuid );
+               UPnPServiceImpl service = serviceFromSid(uuid);
                if (service == null) {
                        System.out.println(" but SERVICE IS NULL !!!!!!!!!!! 
sid: " +uuid);
-//                     synchronized (waitingEvents) {
-//                             waitingEvents.put(uuid, notifyReq);             
                
-//                     }
                }
                else if (service != null) {
                        long seq = notifyReq.getSEQ();
@@ -450,7 +439,7 @@
                 Property prop = props.getProperty(i);
                 String varName = prop.getName();
                 String varValue = prop.getValue();
-                String upnpType = 
service.getStateVariable(varName).getDataType();
+                String upnpType = 
service.getStateVariable(varName).getUPnPDataType();
                 Object valueObj;
                 try {
                     valueObj = Converter.parseString(varValue,upnpType);
@@ -462,98 +451,70 @@
                 hash.put(varName, valueObj);
             }
            
-                       Device device = service.getDevice();
-                       StateChanged msg = new StateChanged(uuid, seq, hash, 
device, service);
-                       //System.out.println("notifierQueue.enqueue(msg);");
+                       String deviceId = service.getDeviceId();
+                       String serviceId = service.getId();
+                       StateChanged msg = new StateChanged(uuid, seq, hash, 
deviceId, serviceId);
                        notifierQueue.enqueue(msg);
                }
        }
     
 
-       public Service serviceFromSid(String sid) {
-               
-//             synchronized (sidServices) {
-//                     return (Service) sidServices.get(sid);
-//             }
-               
-               
-               synchronized (devices) {
-                       
-               Enumeration e = devices.elements();
-               //System.out.println("#### DEVICES SIZE" +devices.size());
-               Service cyberService = null;
-               while (e.hasMoreElements()) {
-                       OSGiDeviceInfo deviceinfo = (OSGiDeviceInfo) 
e.nextElement();
-                       UPnPDevice device = deviceinfo.getOSGiDevice();
-                       UPnPService[] services = (UPnPService[]) 
device.getServices();
-                       UPnPServiceImpl[] servicesImpl = new 
UPnPServiceImpl[services.length];
-                       for (int i = 0; i < servicesImpl.length; i++) {
-                               servicesImpl[i] = (UPnPServiceImpl) services[i];
-                       }
-                       for (int i = 0; i < servicesImpl.length; i++) {
-                               cyberService = 
servicesImpl[i].getCyberService();
-                               boolean bool = cyberService.isSubscribed();
-                               if (bool) {
-                                       if (cyberService.getSID().equals(sid)) {
-                                               return cyberService;
-                                       }
-                               }
-                       }
-                       //System.out.println("Device NOT MATCHED " 
+device.getDescriptions(null).get(UPnPDevice.ID));
-               }
+       public UPnPServiceImpl serviceFromSid(String sid) {
+
+               synchronized (sidServices) {
+                       return (UPnPServiceImpl) sidServices.get(sid);
                }
                
-               return null;
-       }
-         
-    
-
-     
-
-//     public Hashtable getWaitingEvents() {
-//             return waitingEvents;
-//             
-//     }
-       
-       synchronized public boolean subscribe(Service service, long timeout)
-       {
-               return super.subscribe(service,timeout);
-               
-//             if (service.isSubscribed() == true) {
-//                     System.out.println( "isSubsribed "+ 
service.getServiceID() + " " +service.getDevice().getUDN());
-//                     String sid = service.getSID();
-//                     return subscribe(service, sid, timeout);
-//             }
-//             
-//             Device rootDev = service.getRootDevice();
-//             if (rootDev == null)
-//                     return false;
-//             String ifAddress = rootDev.getInterfaceAddress();               
 
-//             SubscriptionRequest subReq = new SubscriptionRequest();
-//             subReq.setSubscribeRequest(service, 
getEventSubCallbackURL(ifAddress), timeout);
-//             SubscriptionResponse subRes = subReq.post();
-//             if (subRes.isSuccessful() == true) {
-//                     //System.out.println( "subscription response "+ 
service.getServiceID() + " " +service.getDevice().getUDN());
-//                     String sid = subRes.getSID();
-
-//                     synchronized (sidServices) {
-//                             sidServices.put(sid,service);                   
        
+               
+//             synchronized (devices) {
+//
+//                     Enumeration e = devices.elements();
+//                     //System.out.println("#### DEVICES SIZE" 
+devices.size());
+//                     Service cyberService = null;
+//                     while (e.hasMoreElements()) {
+//                             OSGiDeviceInfo deviceinfo = (OSGiDeviceInfo) 
e.nextElement();
+//                             UPnPDevice device = deviceinfo.getOSGiDevice();
+//                             UPnPService[] services = (UPnPService[]) 
device.getServices();
+//                             UPnPServiceImpl[] servicesImpl = new 
UPnPServiceImpl[services.length];
+//                             for (int i = 0; i < servicesImpl.length; i++) {
+//                                     servicesImpl[i] = (UPnPServiceImpl) 
services[i];
+//                             }
+//                             for (int i = 0; i < servicesImpl.length; i++) {
+//                                     cyberService = 
servicesImpl[i].getCyberService();
+//                                     boolean bool = 
cyberService.isSubscribed();
+//                                     if (bool) {
+//                                             if 
(cyberService.getSID().equals(sid)) {
+//                                                     return cyberService;
+//                                             }
+//                                     }
+//                             }
+//                             //System.out.println("Device NOT MATCHED " 
+device.getDescriptions(null).get(UPnPDevice.ID));
 //                     }
-
-//                     service.setSID(sid);
-//                     service.setTimeout(subRes.getTimeout());
-//                     return true;
-//                     
 //             }
-//             service.clearSID();
-//             return false;
+//             
+//             return null;
        }
+         
+       
+
        /*
         * (non-Javadoc)
         * 
         * @see org.cybergarage.upnp.ControlPoint#removeExpiredDevices()
         *  
         */
+
+       public Hashtable sidServices = new Hashtable();
+       public void saveSid(String sid, UPnPServiceImpl service) {
+               synchronized (sidServices) {
+                       sidServices.put(sid, service);
+               }               
+       }
+       public void clearSid(String sid) {
+               synchronized (sidServices) {
+                       sidServices.remove(sid);
+               }               
+       }
        
        
 

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/FirstMessage.java
 Tue Sep 23 09:50:24 2008
@@ -21,6 +21,8 @@
 
 import org.osgi.service.upnp.UPnPEventListener;
 
+import org.apache.felix.upnp.basedriver.importer.core.upnp.UPnPServiceImpl;
+
 import org.cybergarage.upnp.Device;
 import org.cybergarage.upnp.Service;
 
@@ -34,18 +36,19 @@
  
 
 public class FirstMessage {
-       private Service service;
+       
+
+       private UPnPServiceImpl service;
        private UPnPEventListener listener;
        private String sid;
-       private Device device;
-
-       public FirstMessage(Service service, UPnPEventListener listener) {
+       
+       public FirstMessage(UPnPServiceImpl service, UPnPEventListener 
listener) {
                this.service = service;
                this.listener = listener;
                this.sid = "";
-               this.device = service.getDevice();
        }
-       public Service getService() {
+       
+       public UPnPServiceImpl getService() {
                return service;
        }
        public UPnPEventListener getListener() {

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/message/StateChanged.java
 Tue Sep 23 09:50:24 2008
@@ -31,27 +31,22 @@
        private String sid;
        private Dictionary dic;
        private long seq;
-       private Service service;
-       private Device device;
+       private String serviceId;
+       private String deviceId;
        /**
         * @param sid
         * @param dic
         * @param varName
         * @param varValue
         */
-       public StateChanged(String sid, long seq, Dictionary dic, Device device,
-                       Service service) {
-               super();
+       public StateChanged(String sid, long seq, Dictionary dic, String 
deviceId,
+                       String serviceId) {
+
                this.sid = sid;
-               /*
-                * this.varName = varName; this.varValue = varValue;
-                */
                this.dic = dic;
-               /* dic.put(this.varName, this.varValue); */
-               //this.service=service;
                this.seq = seq;
-               this.device = device;
-               this.service = service;
+               this.deviceId = deviceId;
+               this.serviceId = serviceId;
        }
 
        public Dictionary getDictionary() {
@@ -72,9 +67,9 @@
         *  
         */
        public String getDeviceID() {
-               return device.getUDN();
+               return deviceId;
        }
        public String getServiceID() {
-               return service.getServiceID();
+               return serviceId;
        }
 }

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/structs/Monitor.java
 Tue Sep 23 09:50:24 2008
@@ -32,6 +32,7 @@
 import org.apache.felix.upnp.basedriver.importer.core.MyCtrlPoint;
 import 
org.apache.felix.upnp.basedriver.importer.core.event.message.FirstMessage;
 import 
org.apache.felix.upnp.basedriver.importer.core.event.message.ListenerModified;
+import org.apache.felix.upnp.basedriver.importer.core.upnp.UPnPServiceImpl;
 
 /* 
 * @author <a href="mailto:[EMAIL PROTECTED]">Felix Project Team</a>
@@ -125,10 +126,7 @@
                     sidListSid.getListenersFromSid(sid);
                                listeners.remove(listener);
                                if (listeners.size() == 0) {
-                                       Service service = 
-                        ctrl.serviceFromSid(sid);
-                                       //##renew  Renewer renewer = 
sidRenewer.get((String) sids.elementAt(i));
-                                       //##renew  renewer.stop();
+                                       Service service =  
ctrl.serviceFromSid(sid).getCyberService();
                                        if (service != null) {
                                                boolean ok = 
ctrl.unsubscribe(service);
                                                if (!ok) {
@@ -153,16 +151,17 @@
                Vector notSubscribed = new Vector();
                
                for (int i = 0; i < newServices.size(); i++) {
-                       Service ser = (Service) newServices.elementAt(i);
-                       if (ser.isSubscribed()) {
-                               subscribed.add(ser);
+                       UPnPServiceImpl osgiService = (UPnPServiceImpl) 
newServices.get(i);
+                       Service cyberService = osgiService.getCyberService();
+                       if (cyberService.isSubscribed()) {
+                               subscribed.add(osgiService);
                        } else {
-                               notSubscribed.add(ser);
+                               notSubscribed.add(osgiService);
                        }
                }
                
                for (int i = 0; i < notSubscribed.size(); i++) {
-                       Service ser = (Service) notSubscribed.elementAt(i);
+                       UPnPServiceImpl ser = (UPnPServiceImpl) 
notSubscribed.get(i);
                        subqueue.enqueue(new FirstMessage(ser, listener));
                }
 
@@ -195,7 +194,7 @@
         Vector listeners = sidListSid.getListenersFromSid(sid);
         listeners.remove(listener);
         if(listeners.size()==0){
-                       Service service = ctrl.serviceFromSid(sid);
+                       Service service = 
ctrl.serviceFromSid(sid).getCyberService();
                        if (service != null) {
                                boolean ok = ctrl.unsubscribe(service);
                                if (!ok) {

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/Notifier.java
 Tue Sep 23 09:50:24 2008
@@ -53,6 +53,7 @@
                                } else {
                                        
monitor.updateStateVars(msg.getSid(),msg.getDictionary());
                                }
+                               Thread.yield();
             }
                }
        }

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/event/thread/SubScriber.java
 Tue Sep 23 09:50:24 2008
@@ -29,6 +29,7 @@
 import org.cybergarage.upnp.event.NotifyRequest;
 import org.cybergarage.upnp.event.Property;
 import org.cybergarage.upnp.event.PropertyList;
+import org.cybergarage.upnp.event.Subscription;
 
 import org.apache.felix.upnp.basedriver.Activator;
 import org.apache.felix.upnp.basedriver.importer.core.MyCtrlPoint;
@@ -64,35 +65,34 @@
                        Object msg = subQueue.dequeue();
                        if (running) {
                                if (msg instanceof FirstMessage) {
-                                       //System.out.println("msg instanceof 
FirstMessage");
-
                                        FirstMessage firstmsg = (FirstMessage) 
msg;
-                                       Service service = firstmsg.getService();
+                                       Service service = 
firstmsg.getService().getCyberService();
                                        if (!service.isSubscribed()) {//is not 
subscribe
-                                               boolean ok = 
ctrl.subscribe(service,120000);
-                                               String sid = "";
-                                               if (ok) {//subcribe ok          
                
-                                                       sid = service.getSID();
-                                                       firstmsg.setSid(sid);   
                     
-                                                       
monitor.addListener(sid,firstmsg.getListener());
-//                                                     wakeupEventsForSid(sid);
-                                               } else {//subscribe not ok
-                                                       
Activator.logger.log(LogService.LOG_ERROR,"Sucribe failed");
-                                                       //System.out.println(" 
subscribe failed");
+
+                                               synchronized (ctrl.sidServices) 
{
+                                                       boolean ok = 
ctrl.subscribe(service,Subscription.INFINITE_VALUE);
+                                                       String sid = "";
+                                                       if (ok) {//subcribe ok  
                        
+                                                               sid = 
service.getSID();
+                                                               
firstmsg.setSid(sid);                        
+                                                               
monitor.addListener(sid,firstmsg.getListener());
+                                                               
ctrl.saveSid(sid,firstmsg.getService());
+                                                       } else {//subscribe not 
ok
+                                                               
Activator.logger.log(LogService.LOG_ERROR,"Sucribe failed");
+                                                               
System.out.println(" subscribe failed");
+                                                       }                       
                
                                                }
                                        } else {// already subscribe
                                                
monitor.addListener(service.getSID(),firstmsg.getListener());
-//                                             
wakeupEventsForSid(service.getSID());
-                                               //System.out.println("already 
subscribed");
                                        }
                                } else if (msg instanceof ListenerModified) {
-                                       //System.out.println("msg instanceof 
ListenerModified");
                                        
monitor.updateListener((ListenerModified)msg,subQueue,ctrl);
                                } else if (msg instanceof 
ListenerUnRegistration) {
-                                       //System.out.println("msg instanceof 
ListenerUnRegistration");
                                        ListenerUnRegistration 
unreg=(ListenerUnRegistration)msg;
                                        
monitor.delListener(unreg.getListener(),ctrl);
+                                       //TODO invoke ctrl.clearSID()
                                }
+                               Thread.yield();                         
                        }
                }
        }

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPDeviceImpl.java
 Tue Sep 23 09:50:24 2008
@@ -215,7 +215,7 @@
                }
                
                /* 
-                * service of this device
+                * services of this device
                 */ 
                ServiceList serviceList = dev.getServiceList();
                int size = serviceList.size();
@@ -225,7 +225,7 @@
                ArrayList eventedServiceList = new ArrayList();
                for (int i = 0; i < size; i++) {
                        Service service = serviceList.getService(i);
-                       UPnPServiceImpl serviceImpl = new 
UPnPServiceImpl(service);
+                       UPnPServiceImpl serviceImpl = new 
UPnPServiceImpl(service,udn);
                        services.put(service.getServiceID(), serviceImpl);
                        servicesArray[i] = serviceImpl;
                        if (serviceImpl.hasEventedStateVariables()) 
eventedServiceList.add(serviceImpl);
@@ -233,16 +233,8 @@
                        seriviceTypeSet.add(serviceImpl.getType());
                }
                
-               //TODO check null for eventedservices
                String[] servicesTypeProperty = (String[]) 
seriviceTypeSet.toArray(new String[]{});
                eventedServices = (UPnPServiceImpl[]) 
eventedServiceList.toArray(new UPnPServiceImpl[]{});
-//             String[] servicesTypeProperty = new String[serTypeSet.size()];
-//             Iterator iter = serTypeSet.iterator();
-//             int i = 0;
-//             while (iter.hasNext()) {
-//                     servicesTypeProperty[i] = (String) iter.next();
-//                     i++;
-//             }
                properties.put(UPnPService.ID, servicesIDProperty);
                properties.put(UPnPService.TYPE, servicesTypeProperty);
 

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPServiceImpl.java
 Tue Sep 23 09:50:24 2008
@@ -44,9 +44,15 @@
        private UPnPActionImpl[] actionsArray;
        private UPnPStateVariableImpl[] stateVariablesArray;
        private boolean hasEventedStateVariables;
+       private String deviceId;
+       private String serviceId;
+       private String serviceType;
        
-       public UPnPServiceImpl(Service service) {
+       public UPnPServiceImpl(Service service, String udn) {
                this.service = service;
+               this.deviceId = udn;
+               this.serviceId = service.getServiceID();
+               this.serviceType = service.getServiceType();
                actions = new Hashtable();
                stateVariables=new Hashtable();
                
@@ -78,7 +84,7 @@
           * @see org.osgi.service.upnp.UPnPService#getId()
           */
        public String getId() {
-               return service.getServiceID();
+               return serviceId;
        }
 
        /*
@@ -87,7 +93,7 @@
         * @see org.osgi.service.upnp.UPnPService#getType()
         */
        public String getType() {
-               return service.getServiceType();
+               return serviceType;
        }
 
        /*
@@ -144,5 +150,9 @@
        public boolean hasEventedStateVariables(){
                return hasEventedStateVariables;
        }
+       
+       public String getDeviceId(){
+               return deviceId;
+       }
 
 }

Modified: 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java
URL: 
http://svn.apache.org/viewvc/felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java?rev=698237&r1=698236&r2=698237&view=diff
==============================================================================
--- 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java
 (original)
+++ 
felix/sandbox/furfari/Version-1.0.0/basedriver/src/main/java/org/apache/felix/upnp/basedriver/importer/core/upnp/UPnPStateVariableImpl.java
 Tue Sep 23 09:50:24 2008
@@ -46,7 +46,13 @@
     private String[] values = null;    
     
     private Boolean hasMaxMinStep = null;
-    private Boolean hasRangeValues = null;    
+    private Boolean hasRangeValues = null;
+
+       private String name;
+
+       private String dataType;
+
+       private boolean isSendEvent;    
 
        private static Hashtable upnp2javaTable = null;
        
@@ -107,27 +113,30 @@
        public UPnPStateVariableImpl(StateVariable variable) {
 
                this.variable = variable;
+               this.name = variable.getName();
+               this.dataType = variable.getDataType();
+               this.isSendEvent = variable.isSendEvents();
        } 
 
     /**
      * @see org.osgi.service.upnp.UPnPStateVariable#getName()
         */
        public String getName() {
-               return variable.getName();
+               return name;
        }
 
        /**
         * @see org.osgi.service.upnp.UPnPStateVariable#getJavaDataType()
         */
        public Class getJavaDataType() {
-               return (Class) upnp2javaTable.get(variable.getDataType());
+               return (Class) upnp2javaTable.get(dataType);
        }
 
        /**
         * @see org.osgi.service.upnp.UPnPStateVariable#getUPnPDataType()
         */
        public String getUPnPDataType() {
-               return variable.getDataType();
+               return dataType;
        }
 
        /**
@@ -267,7 +276,7 @@
         * @see org.osgi.service.upnp.UPnPStateVariable#sendsEvents()
         */
        public boolean sendsEvents() {
-               return variable.isSendEvents();
+               return isSendEvent;
        }
 
 


Reply via email to