replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / service / resource-encapsulation / src / resourceClient / RCSDiscoveryManagerImpl.cpp
index a44399f..319c9b8 100755 (executable)
 
 namespace
 {
-    constexpr char ALL_RESOURCE_TYPE[] = "";
     constexpr unsigned int POLLING_INTERVAL_TIME = 60000;
 
     std::string makeResourceId(const std::shared_ptr< OIC::Service::PrimitiveResource >& resource)
     {
         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
@@ -42,10 +54,11 @@ namespace OIC
     namespace Service
     {
         constexpr RCSDiscoveryManagerImpl::ID RCSDiscoveryManagerImpl::INVALID_ID;
+        constexpr char const* RCSDiscoveryManagerImpl::ALL_RESOURCE_TYPE;
 
         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(const auto& it : resourceTypes)
-            {
-                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;
 
@@ -182,7 +189,7 @@ namespace OIC
         {
             if (m_resourceTypes.empty())
             {
-                m_resourceTypes.push_back(ALL_RESOURCE_TYPE);
+                m_resourceTypes.push_back(RCSDiscoveryManagerImpl::ALL_RESOURCE_TYPE);
             }
         }
 
@@ -190,7 +197,12 @@ namespace OIC
         {
             for (const auto& it : m_resourceTypes)
             {
-                discoverResource(m_address, m_relativeUri + "?rt=" + it, m_discoverCb);
+                std::string uri = std::string(OC_RSRVD_WELL_KNOWN_URI);
+                if (!it.empty())
+                {
+                    uri = std::string(OC_RSRVD_WELL_KNOWN_URI) + "?rt=" + it;
+                }
+                discoverResource(m_address, uri, m_discoverCb);
             }
         }