Fixed a bug in RCSDiscoveryManager and some minor issues.
authorcoderhyme <jhyo.kim@samsung.com>
Tue, 23 Feb 2016 03:03:46 +0000 (19:03 -0800)
committerUze Choi <uzchoi@samsung.com>
Wed, 24 Feb 2016 07:17:15 +0000 (07:17 +0000)
An empty resource type must be allowed only when there is no other requested types,
because an empty resource type means all resource types, which means other types are meaningless.

Change-Id: I51be73a3a21c3e84151b12333ab86aed656c2a3c
Signed-off-by: coderhyme <jhyo.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/5123
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/resource-encapsulation/include/RCSDiscoveryManager.h
service/resource-encapsulation/src/resourceClient/RCSDiscoveryManager.cpp
service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.cpp
service/resource-encapsulation/src/resourceClient/RCSDiscoveryManagerImpl.h

index 3aaf3d0..18572b5 100644 (file)
@@ -65,7 +65,7 @@ namespace OIC
                 DiscoveryTask& operator =(DiscoveryTask&&) const = delete;
 
                 /**
-                 * It is cancelling the task of discovery.
+                 * It cancels the task of discovery.
                  * If it is already canceled, the operation is ignored.
                  */
                 void cancel();
index 6fbeb73..007d49c 100755 (executable)
@@ -83,10 +83,8 @@ namespace OIC
                 const RCSAddress& address, const std::string& relativeUri,
                 const std::string& resourceType, ResourceDiscoveredCallback cb)
         {
-            return discoverResourceByTypes(address,
-                    relativeUri.empty() ? OC_RSRVD_WELL_KNOWN_URI : relativeUri,
-                    std::vector< std::string >
-                    { resourceType }, std::move(cb));
+            return discoverResourceByTypes(address, relativeUri,
+                    std::vector< std::string >{ resourceType }, std::move(cb));
         }
 
         RCSDiscoveryManager::DiscoveryTask::Ptr RCSDiscoveryManager::discoverResourceByTypes(
@@ -94,7 +92,9 @@ namespace OIC
                 const std::vector< std::string >& resourceTypes, ResourceDiscoveredCallback cb)
         {
             return RCSDiscoveryManagerImpl::getInstance()->startDiscovery(address,
-                    relativeUri.empty() ? OC_RSRVD_WELL_KNOWN_URI : relativeUri, resourceTypes,
+                    relativeUri.empty() ? OC_RSRVD_WELL_KNOWN_URI : relativeUri,
+                    resourceTypes.empty() ? std::vector< std::string >{
+                            RCSDiscoveryManagerImpl::ALL_RESOURCE_TYPE } : resourceTypes,
                     std::move(cb));
         }
     }
index cc9db98..bc57893 100755 (executable)
@@ -34,6 +34,19 @@ namespace
     {
         return resource->getSid() + resource->getUri();
     }
+
+    void validateTypes(const std::vector< std::string >& resourceTypes) {
+        if (resourceTypes.size() == 1) return;
+
+        for (const auto& type : resourceTypes)
+        {
+            if (type == OIC::Service::RCSDiscoveryManagerImpl::ALL_RESOURCE_TYPE)
+            {
+                throw OIC::Service::RCSBadRequestException{
+                    "resource types must have no empty string!" };
+            }
+        }
+    }
 }
 
 namespace OIC
@@ -45,7 +58,7 @@ namespace OIC
 
         RCSDiscoveryManagerImpl::RCSDiscoveryManagerImpl()
         {
-            subscribePresenceWithMuticast();
+            subscribePresenceWithMulticast();
 
             m_timer.post(POLLING_INTERVAL_TIME,
                     std::bind(&RCSDiscoveryManagerImpl::onPolling, this));
@@ -83,13 +96,7 @@ namespace OIC
                 throw RCSInvalidParameterException{ "Callback is empty" };
             }
 
-            for(auto it = resourceTypes.begin()+1; it < resourceTypes.end(); it++)
-            {
-                if ((*it).compare(ALL_RESOURCE_TYPE) == 0)
-                {
-                   throw RCSInvalidParameterException{ "ResourceType is duplicated!" };
-                }
-            }
+            validateTypes(resourceTypes);
 
             const ID discoveryId = createId();
 
@@ -104,11 +111,11 @@ namespace OIC
                 m_discoveryMap.insert(std::make_pair(discoveryId, std::move(discoveryInfo)));
             }
 
-            return std::unique_ptr < RCSDiscoveryManager::DiscoveryTask
-                    > (new RCSDiscoveryManager::DiscoveryTask(discoveryId));
+            return std::unique_ptr< RCSDiscoveryManager::DiscoveryTask >(
+                    new RCSDiscoveryManager::DiscoveryTask(discoveryId));
         }
 
-        void RCSDiscoveryManagerImpl::subscribePresenceWithMuticast()
+        void RCSDiscoveryManagerImpl::subscribePresenceWithMulticast()
         {
             using namespace std::placeholders;
 
index b1d75f0..0fea0cd 100755 (executable)
@@ -118,7 +118,7 @@ namespace OIC
                 RCSDiscoveryManagerImpl();
                 ~RCSDiscoveryManagerImpl() = default;
 
-                void subscribePresenceWithMuticast();
+                void subscribePresenceWithMulticast();
 
                 /**
                  * Check duplicated callback and invoke callback when resource is discovered