[Iotcon] Prevent iotcon from call timeout after found resource 67/178467/1
authorLukasz Bardeli <l.bardeli@samsung.com>
Thu, 10 May 2018 06:43:35 +0000 (08:43 +0200)
committerLukasz Bardeli <l.bardeli@samsung.com>
Thu, 10 May 2018 06:48:20 +0000 (06:48 +0000)
In ResourceFoundCallback after some resource was found, timeout will
never be called.

[Verification] Code compiles without error. TCT tests passrate 100%

Change-Id: I96ca592eb94e14c374b6eab99ca1956108f37154
Signed-off-by: Lukasz Bardeli <l.bardeli@samsung.com>
src/iotcon/iotcon_instance.cc

index 705fb1f531a466e56c086b38334df1c48cd47251..6bc88a8f1d5ae91c9644eb64d1811d98181a8904 100644 (file)
@@ -40,8 +40,10 @@ const std::string kPrivilegeIotcon = "http://tizen.org/privilege/internet";
 
 struct CallbackData {
   common::PostCallback fun;
+  bool was_called;
   CallbackData(common::PostCallback f) {
     fun = f;
+    was_called = false;
   }
 };
 
@@ -1305,10 +1307,16 @@ bool IotconInstance::ResourceFoundCallback(iotcon_remote_resource_h resource, io
   common::TizenResult ret = common::TizenSuccess();
   switch (result) {
     case IOTCON_ERROR_NONE:
+      // Mark that this callback was called at leas once (some resource was found)
+      data->was_called = true;
       ret = IotconUtils::RemoteResourceToJson(resource, &v.get<picojson::object>());
       break;
     case IOTCON_ERROR_TIMEOUT:
       LoggerD("IOTCON_TIMEOUT");
+      // if TIMEOUT was called after some resource was found then do not call errorCallback
+      if (data->was_called) {
+        return IOTCON_FUNC_STOP;
+      }
     default:
       ret = IotconUtils::ConvertIotconError(result);
   }