X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fsoft-sensor-manager%2FSSMCore%2Fsrc%2FSensorProcessor%2FResourceFinder.cpp;h=8f84e340f888a1c25fa00c3842dafebc17f9ce32;hb=bbde2d79d9c635ae129f1976f982cfcd80d5a0ef;hp=57dbe2cdc403dddab38c40d842a83268ea206f14;hpb=82df1923880170d846b24fd345a7d78f5049b084;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/soft-sensor-manager/SSMCore/src/SensorProcessor/ResourceFinder.cpp b/service/soft-sensor-manager/SSMCore/src/SensorProcessor/ResourceFinder.cpp index 57dbe2c..8f84e34 100644 --- a/service/soft-sensor-manager/SSMCore/src/SensorProcessor/ResourceFinder.cpp +++ b/service/soft-sensor-manager/SSMCore/src/SensorProcessor/ResourceFinder.cpp @@ -32,6 +32,8 @@ SSMRESULT CResourceFinder::finalConstruct() m_pResourceFinderEvent = NULL; + m_multicastPresenceHandle = nullptr; + CLEANUP: return res; } @@ -59,8 +61,6 @@ void CResourceFinder::onResourceFound(std::shared_ptr< OC::OCResource > resource pMessage[0] = RESOURCE_DISCOVER_REQUESTPROFILE; pMessage[1] = reinterpret_cast (new std::shared_ptr(resource)); - std::cout << "Resource Found !! >> " << path << std::endl; - m_pTasker->addTask(this, pMessage); } } @@ -71,12 +71,15 @@ void CResourceFinder::presenceHandler(OCStackResult result, const unsigned int n SSMRESULT res = SSM_E_FAIL; OCStackResult ret = OC_STACK_ERROR; intptr_t *pMessage = NULL; + std::ostringstream requestURI; switch (result) { case OC_STACK_OK: - ret = OC::OCPlatform::findResource("", - "coap://" + hostAddress + "/oc/core?rt=SoftSensorManager.Sensor", + requestURI << "coap://" << hostAddress << ":" << OC_MULTICAST_PORT << + "/oc/core?rt=SoftSensorManager.Sensor"; + + ret = OC::OCPlatform::findResource("", requestURI.str(), OC_WIFI, std::bind(&CResourceFinder::onResourceFound, this, std::placeholders::_1)); if (ret != OC_STACK_OK) @@ -117,22 +120,40 @@ SSMRESULT CResourceFinder::startResourceFinder() SSMRESULT res = SSM_E_FAIL; OCStackResult ret = OC_STACK_ERROR; - OC::OCPlatform::OCPresenceHandle presenceHandle = nullptr; + std::ostringstream requestURI; + requestURI << OC_WELL_KNOWN_QUERY << "?rt=SoftSensorManager.Sensor"; - ret = OC::OCPlatform::findResource("", "coap://224.0.1.187/oc/core?rt=SoftSensorManager.Sensor", + ret = OC::OCPlatform::findResource("", requestURI.str(), OC_WIFI, std::bind(&CResourceFinder::onResourceFound, this, std::placeholders::_1)); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); - ret = OC::OCPlatform::subscribePresence(presenceHandle, "coap://224.0.1.187", - "SoftSensorManager.Sensor", - std::bind(&CResourceFinder::presenceHandler, this, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3)); + ret = OC::OCPlatform::subscribePresence(m_multicastPresenceHandle, OC_MULTICAST_IP, + "SoftSensorManager.Sensor", OC_WIFI, std::bind(&CResourceFinder::presenceHandler, this, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + + if (ret != OC_STACK_OK) + SSM_CLEANUP_ASSERT(SSM_E_FAIL); + + res = SSM_S_OK; + +CLEANUP: + return res; +} + +SSMRESULT CResourceFinder::stopResourceFinder() +{ + SSMRESULT res = SSM_E_FAIL; + OCStackResult ret = OC_STACK_ERROR; + + ret = OC::OCPlatform::unsubscribePresence(m_multicastPresenceHandle); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); + m_multicastPresenceHandle = nullptr; + res = SSM_S_OK; CLEANUP: @@ -155,7 +176,7 @@ void CResourceFinder::onExecute(IN void *pArg) OCStackResult ret = OC_STACK_ERROR; OC::QueryParamsMap queryParams; OICResourceHandler *pResourceHandler = NULL; - intptr_t *pMessage = reinterpret_cast(pArg); + intptr_t *pMessage = reinterpret_cast(pArg); std::shared_ptr< OC::OCResource > *pResource = NULL; OC::OCPlatform::OCPresenceHandle presenceHandle = NULL; @@ -178,9 +199,8 @@ void CResourceFinder::onExecute(IN void *pArg) m_mapResources[resourceHostAddress].push_back(resourceFullPath); - ret = pResource->get()->get(queryParams, - std::bind(&OICResourceHandler::onGetResourceProfile, pResourceHandler, - std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + ret = pResource->get()->get(queryParams, std::bind(&OICResourceHandler::onGetResourceProfile, + pResourceHandler, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); @@ -192,9 +212,8 @@ void CResourceFinder::onExecute(IN void *pArg) m_mapResourcePresenceHandles.end()) { ret = OC::OCPlatform::subscribePresence(presenceHandle, ((ISSMResource *)pMessage[1])->ip, - "SoftSensorManager.Sensor", - std::bind(&CResourceFinder::presenceHandler, this, std::placeholders::_1, - std::placeholders::_2, std::placeholders::_3)); + "SoftSensorManager.Sensor", OC_WIFI, std::bind(&CResourceFinder::presenceHandler, this, + std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); @@ -211,8 +230,8 @@ void CResourceFinder::onExecute(IN void *pArg) if (m_mapResourcePresenceHandles.find(((OICResourceHandler *)pMessage[1])->m_SSMResource.ip) != m_mapResourcePresenceHandles.end()) { - ret = OC::OCPlatform::unsubscribePresence( - m_mapResourcePresenceHandles[((OICResourceHandler *)pMessage[1])->m_SSMResource.ip]); + ret = OC::OCPlatform::unsubscribePresence(m_mapResourcePresenceHandles[(( + OICResourceHandler *)pMessage[1])->m_SSMResource.ip]); if (ret != OC_STACK_OK) SSM_CLEANUP_ASSERT(SSM_E_FAIL); @@ -220,6 +239,7 @@ void CResourceFinder::onExecute(IN void *pArg) m_mapResourcePresenceHandles.erase(((OICResourceHandler *)pMessage[1])->m_SSMResource.ip); } + delete m_mapResourceHandler[((OICResourceHandler *)pMessage[1])->m_SSMResource.name]; m_mapResourceHandler.erase(((OICResourceHandler *) pMessage[1])->m_SSMResource.name); break; }