[iotcon] fix some web tct fail issue. 18/100118/2
authorjk.pu <jk.pu@samsung.com>
Fri, 25 Nov 2016 06:38:11 +0000 (15:38 +0900)
committerJeongkyun Pu <jk.pu@samsung.com>
Fri, 25 Nov 2016 06:46:23 +0000 (22:46 -0800)
There is InvalidValueError when call stopCaching/stopObserving/unsetResourceStateChangeListener
Native API return Invalid argument error if start function was not called prior to stop function .
solution: there is no invalid error at these method. web api only ignore this case.

Change-Id: Id285ac18e5be6f4b226f41d23f49d3b5133b1910
Signed-off-by: jk.pu <jk.pu@samsung.com>
src/iotcon/iotcon_client_manager.h
src/iotcon/iotcon_instance.cc
src/iotcon/iotcon_instance.h

index 8b8fd9f56755543bc2109ce6cb6cb24e8de1bc8c..9b06b13b795bdb003cae4df3587f50ec523aaa10 100644 (file)
@@ -41,6 +41,7 @@ class IotconClientManager {
   picojson::value StoreRemoteResource(FoundRemoteInfoPtr ptr);
   picojson::value RemoveRemoteResource(FoundRemoteInfoPtr ptr);
   common::TizenResult GetRemoteById(long long id, FoundRemoteInfoPtr* res_pointer) const;
+  picojson::value PrepareManageIdAnswer(bool keep_id, long long id = 0);
 
  private:
   IotconClientManager() = default;
@@ -49,7 +50,6 @@ class IotconClientManager {
   IotconClientManager& operator=(const IotconClientManager&) = delete;
   IotconClientManager& operator=(IotconClientManager&&) = delete;
 
-  picojson::value PrepareManageIdAnswer(bool keep_id, long long id = 0);
   static void PresenceHandler(iotcon_presence_h  resource,
                              iotcon_error_e err,
                              iotcon_presence_response_h response,
index d8d68d6046b97729d4047902c337aa28d68adc36..27e56c35fda25cda4476cc2e072ed5aa85ce8b31 100644 (file)
@@ -106,7 +106,13 @@ const std::string kVirtualResourcesHandlingPath = "/home/owner/share/tmp_file_io
 
 }  // namespace
 
-IotconInstance::IotconInstance() : initialized_(false), presence_started_(false) {
+IotconInstance::IotconInstance()
+    : initialized_(false),
+      presence_started_(false),
+      observing_started_(false),
+      caching_started_(false),
+      monitoring_started_(false) {
+
   ScopeLogger();
 
   using std::placeholders::_1;
@@ -937,6 +943,8 @@ common::TizenResult IotconInstance::RemoteResourceStartObserving(const picojson:
   if (!result) {
     return result;
   }
+
+  observing_started_ = true;
   return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)};
 }
 
@@ -945,6 +953,15 @@ common::TizenResult IotconInstance::RemoteResourceStopObserving(const picojson::
 
   CHECK_PRIVILEGE(kPrivilegeIotcon);
 
+  if (!observing_started_) {
+    LoggerD("Observing is not started. ignore stop observing");
+    long long id = 0;
+    if (args.find(kId)->second.is<double>()) {
+      id = static_cast<long long>(args.find(kId)->second.get<double>());
+    }
+    return common::TizenSuccess{IotconClientManager::GetInstance().PrepareManageIdAnswer(true, id)};
+  }
+
   FoundRemoteInfoPtr ptr;
   auto result = IotconUtils::RemoteResourceFromJson(args, &ptr);
   if (!result) {
@@ -975,6 +992,7 @@ common::TizenResult IotconInstance::RemoteResourceStopObserving(const picojson::
   if (!result) {
     return result;
   }
+  observing_started_ = false;
   ptr->observe_listener = nullptr;
   return common::TizenSuccess{IotconClientManager::GetInstance().RemoveRemoteResource(ptr)};
 }
@@ -1029,6 +1047,7 @@ common::TizenResult IotconInstance::RemoteResourceStartCaching(const picojson::o
     return result;
   }
 
+  caching_started_ = true;
   return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)};
 }
 
@@ -1037,6 +1056,15 @@ common::TizenResult IotconInstance::RemoteResourceStopCaching(const picojson::ob
 
   CHECK_PRIVILEGE(kPrivilegeIotcon);
 
+  if (!caching_started_) {
+    LoggerD("Caching is not started. ignore stop caching");
+    long long id = 0;
+    if (args.find(kId)->second.is<double>()) {
+      id = static_cast<long long>(args.find(kId)->second.get<double>());
+    }
+    return common::TizenSuccess{IotconClientManager::GetInstance().PrepareManageIdAnswer(true, id)};
+  }
+
   FoundRemoteInfoPtr ptr;
   auto result = IotconUtils::RemoteResourceFromJson(args, &ptr);
   if (!result) {
@@ -1048,6 +1076,8 @@ common::TizenResult IotconInstance::RemoteResourceStopCaching(const picojson::ob
   if (!result) {
     return result;
   }
+
+  caching_started_ = false;
   ptr->cache_change_listener = nullptr;
   return common::TizenSuccess{IotconClientManager::GetInstance().RemoveRemoteResource(ptr)};
 }
@@ -1074,7 +1104,6 @@ common::TizenResult IotconInstance::RemoteResourceSetResourceStateChangeListener
 
   CHECK_PRIVILEGE(kPrivilegeIotcon);
 
-
   FoundRemoteInfoPtr ptr;
   auto result = IotconUtils::RemoteResourceFromJson(args, &ptr);
   if (!result) {
@@ -1096,6 +1125,7 @@ common::TizenResult IotconInstance::RemoteResourceSetResourceStateChangeListener
   if (!result) {
     return result;
   }
+  monitoring_started_ = true;
   return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)};
 }
 
@@ -1104,6 +1134,15 @@ common::TizenResult IotconInstance::RemoteResourceUnsetResourceStateChangeListen
 
   CHECK_PRIVILEGE(kPrivilegeIotcon);
 
+  if (!monitoring_started_) {
+    LoggerD("Monitoring is not started. ignore stop monitoring");
+    long long id = 0;
+    if (args.find(kId)->second.is<double>()) {
+      id = static_cast<long long>(args.find(kId)->second.get<double>());
+    }
+    return common::TizenSuccess{IotconClientManager::GetInstance().PrepareManageIdAnswer(true, id)};
+  }
+
   FoundRemoteInfoPtr ptr;
   auto result = IotconUtils::RemoteResourceFromJson(args, &ptr);
   if (!result) {
@@ -1113,6 +1152,7 @@ common::TizenResult IotconInstance::RemoteResourceUnsetResourceStateChangeListen
   if (!result) {
     return result;
   }
+  monitoring_started_ = false;
   ptr->state_listener = nullptr;
   return common::TizenSuccess{IotconClientManager::GetInstance().RemoveRemoteResource(ptr)};
 }
index a417e64223ee8fc209bf287fa90aad403c7e70a9..8cf67aa1e78f7cf353dbe412e99037d82a53e2d0 100644 (file)
@@ -84,6 +84,9 @@ class IotconInstance : public common::TizenInstance {
  private:
   bool initialized_;
   bool presence_started_;
+  bool observing_started_;
+  bool caching_started_;
+  bool monitoring_started_;
 };
 
 }  // namespace iotcon