From a2e84fc0038e685119c0cc5a2261f1b3d37ee973 Mon Sep 17 00:00:00 2001 From: "i.metelytsia" Date: Wed, 21 Jun 2017 14:43:20 +0300 Subject: [PATCH] device discovery flow updated --- device_core/iotivity_lib/inc/iotdevice_impl.h | 4 +-- device_core/iotivity_lib/src/iotdevice_impl.cpp | 34 ++++++++++++++++++++++--- device_core/iotivity_lib/src/iotivity.cpp | 3 ++- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/device_core/iotivity_lib/inc/iotdevice_impl.h b/device_core/iotivity_lib/inc/iotdevice_impl.h index 32de950..1ef2d9a 100644 --- a/device_core/iotivity_lib/inc/iotdevice_impl.h +++ b/device_core/iotivity_lib/inc/iotdevice_impl.h @@ -18,8 +18,8 @@ class IoTDevice_impl: public IoTDevice public: const unsigned CALLBACK_WAIT_TIMEOUT_S = 3; - IoTDevice_impl(std::shared_ptr device_resource, bool connected = true, bool cloud = true); - IoTDevice_impl(const std::string& host, const std::string& uid, bool connected = true, bool cloud = true); + IoTDevice_impl(std::shared_ptr device_resource, bool connected = true); + IoTDevice_impl(const std::string& host, const std::string& uid, bool connected = true); ~IoTDevice_impl() override; const std::string& getUUID() override; diff --git a/device_core/iotivity_lib/src/iotdevice_impl.cpp b/device_core/iotivity_lib/src/iotdevice_impl.cpp index 8b0483a..6644b5c 100644 --- a/device_core/iotivity_lib/src/iotdevice_impl.cpp +++ b/device_core/iotivity_lib/src/iotdevice_impl.cpp @@ -46,6 +46,11 @@ struct GetInfoCallback signal.notify_one(); } + void clear() + { + fired = false; + } + static void call_for_type(std::weak_ptr ctx, std::shared_ptr res) { if (auto p = ctx.lock()) @@ -93,11 +98,22 @@ struct GetInfoCallback p->signalize(); } } + + static void call_for_config(std::weak_ptr ctx, std::shared_ptr status) + { + if (auto p = ctx.lock()) + { + if(status->getESResult() == ES_OK) + p->dev->cloud_accessibility = status->getEnrolleeConf().isCloudAccessible(); + + p->signalize(); + } + } }; -IoTDevice_impl::IoTDevice_impl(std::shared_ptr device_resource, bool connected, bool cloud) +IoTDevice_impl::IoTDevice_impl(std::shared_ptr device_resource, bool connected) : dev(device_resource), name("unknown"), model("unknown"), type("unknown"), uuid(""), spec_ver("unknown"), - online(connected), cloud_accessibility(cloud) + online(connected), cloud_accessibility(false) { host = device_resource->host(); std::unique_lock lock(mtx); @@ -119,6 +135,7 @@ IoTDevice_impl::IoTDevice_impl(std::shared_ptr device_resource, bool device_resource->get(QueryParamsMap{}, std::bind(&GetInfoCallback::call, std::weak_ptr(callback), PH::_1, PH::_2, PH::_3)); callback->signal.wait_for(lock, std::chrono::seconds(CALLBACK_WAIT_TIMEOUT_S), wait_predicate); + callback->clear(); } } @@ -140,13 +157,22 @@ IoTDevice_impl::IoTDevice_impl(std::shared_ptr device_resource, bool std::bind(&GetInfoCallback::call, std::weak_ptr(callback), HeaderOptions{}, PH::_1, 0)); callback->signal.wait_for(lock, std::chrono::seconds(CALLBACK_WAIT_TIMEOUT_S), wait_predicate); + callback->clear(); } if (this->uuid.empty()) this->uuid = device_resource->sid(); + + + auto re = OIC::Service::EasySetup::getInstance()->createRemoteEnrollee(device_resource); + if(re) + { + re->getConfiguration(std::bind(&GetInfoCallback::call_for_config, std::weak_ptr(callback), PH::_1)); + callback->signal.wait_for(lock, std::chrono::seconds(CALLBACK_WAIT_TIMEOUT_S), wait_predicate); + } } -IoTDevice_impl::IoTDevice_impl(const std::string& host, const std::string& uid, bool connected, bool cloud) - : name("unknown"), model("unknown"), type("unknown"), uuid(uid), spec_ver("unknown"), host(host), online(connected), cloud_accessibility(cloud) +IoTDevice_impl::IoTDevice_impl(const std::string& host, const std::string& uid, bool connected) + : name("unknown"), model("unknown"), type("unknown"), uuid(uid), spec_ver("unknown"), host(host), online(connected), cloud_accessibility(false) { if (!online) return; diff --git a/device_core/iotivity_lib/src/iotivity.cpp b/device_core/iotivity_lib/src/iotivity.cpp index 41a42ee..5c504aa 100644 --- a/device_core/iotivity_lib/src/iotivity.cpp +++ b/device_core/iotivity_lib/src/iotivity.cpp @@ -615,7 +615,8 @@ const IoTDevicesMap& IoTivity::getUnOwnedDevices() { std::shared_ptr dev(new IoTDevice_impl(d)); - if (dev->getUUID().empty()) continue; + if (dev->getUUID().empty() || !dev->isCloudAccessibility()) continue; + auto it = params->unowned.find(dev->getUUID()); -- 2.7.4