[iotcon] Create/Get/Delete methods of server.
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Fri, 5 Feb 2016 14:47:30 +0000 (15:47 +0100)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Wed, 10 Feb 2016 08:55:39 +0000 (17:55 +0900)
Change-Id: I4fc40f919a69e91823235048c3fa2d1d32d73746
Signed-off-by: Pawel Andruszkiewicz <p.andruszkie@samsung.com>
src/iotcon/iotcon_api.js
src/iotcon/iotcon_instance.cc
src/iotcon/iotcon_instance.h
src/iotcon/iotcon_server_manager.cc
src/iotcon/iotcon_server_manager.h
src/iotcon/iotcon_utils.cc
src/iotcon/iotcon_utils.h

index 01f5900b501c4823de6c9eb7291c42cd031d97c2..f3ab15f5f69f03fb3c8331b3a08114108d53131c 100644 (file)
@@ -18,6 +18,7 @@ var native = new xwalk.utils.NativeManager(extension);
 var validator = xwalk.utils.validator;
 var types = validator.Types;
 var T = xwalk.utils.type;
+var kIdKey = Symbol();
 
 function createListener(name, c) {
   var listenerName = name;
@@ -290,11 +291,7 @@ function createRepresentation(data) {
 }
 
 function Request(data) {
-  Object.defineProperty(this, '_id', {
-    value: data.id,
-    writable: false,
-    enumerable: false
-  });
+  this[kIdKey] = data.id;
 
   delete data.id;
 
@@ -303,11 +300,6 @@ function Request(data) {
 
 function Resource(data) {
   Object.defineProperties(this, {
-    _id: {
-      value: data.id,
-      writable: false,
-      enumerable: false
-    },
     observerIds: {
       get: function() {
         var callArgs = {};
@@ -320,10 +312,14 @@ function Resource(data) {
     }
   });
 
+  this[kIdKey] = data.id;
+
   delete data.id;
 
   var internal = new InternalData(data);
   internal.decorate(this);
+
+  this.states = null;
 }
 
 Resource.prototype.notify = function() {
@@ -336,7 +332,7 @@ Resource.prototype.notify = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.observerIds = args.observerIds;
 
   var result = native.call('IotconResource_notify', callArgs);
@@ -356,7 +352,7 @@ Resource.prototype.addResourceTypes = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.types = args.types;
 
   var result = native.call('IotconResource_addResourceTypes', callArgs);
@@ -376,7 +372,7 @@ Resource.prototype.addResourceInterfaces = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.interfaces = args.interfaces;
 
   var result = native.call('IotconResource_addResourceInterfaces', callArgs);
@@ -396,7 +392,7 @@ Resource.prototype.addChildResource = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.resource = args.resource;
 
   var result = native.call('IotconResource_addChildResource', callArgs);
@@ -416,7 +412,7 @@ Resource.prototype.removeChildResource = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.resource = args.resource;
 
   var result = native.call('IotconResource_removeChildResource', callArgs);
@@ -435,7 +431,7 @@ Resource.prototype.setRequestListener = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
 
   var listener = function(result) {
     native.callIfPossible(args.successCallback, native.getResultObject(result));
@@ -446,20 +442,20 @@ Resource.prototype.setRequestListener = function() {
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
   } else {
-    resourceRequestListener.addListener(this._id, listener);
+    resourceRequestListener.addListener(this[kIdKey], listener);
   }
 };
 
 Resource.prototype.unsetRequestListener = function() {
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
 
   var result = native.callSync('IotconRemoteResource_unsetRequestListener', callArgs);
 
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
   } else {
-    resourceRequestListener.removeListener(this._id);
+    resourceRequestListener.removeListener(this[kIdKey]);
   }
 };
 
@@ -493,7 +489,7 @@ function Response(request) {
 
 Response.prototype.send = function() {
   var callArgs = {};
-  callArgs.id = this.request._id;
+  callArgs.id = this.request[kIdKey];
   callArgs.result = this.result;
   callArgs.representation = this.representation;
   callArgs.options = this.options;
@@ -546,11 +542,6 @@ function State(key, state) {
 
 function RemoteResource(data) {
   Object.defineProperties(this, {
-    _id: {
-      value: data.id,
-      writable: false,
-      enumerable: false
-    },
     cachedRepresentation: {
       get: function() {
         var callArgs = {};
@@ -563,6 +554,8 @@ function RemoteResource(data) {
     }
   });
 
+  this[kIdKey] = data.id;
+
   delete data.id;
 
   var internal = new InternalData(data);
@@ -585,7 +578,7 @@ RemoteResource.prototype.methodGet = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.query = args.query;
 
   var callback = function(result) {
@@ -624,7 +617,7 @@ RemoteResource.prototype.methodPut = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.representation = args.representation;
   callArgs.query = args.query;
 
@@ -664,7 +657,7 @@ RemoteResource.prototype.methodPost = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.representation = args.representation;
   callArgs.query = args.query;
 
@@ -696,7 +689,7 @@ RemoteResource.prototype.methodDelete = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
 
   var callback = function(result) {
     if (native.isFailure(result)) {
@@ -736,7 +729,7 @@ RemoteResource.prototype.setStateChangeListener = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
   callArgs.query = args.query;
   callArgs.observePolicy = args.observePolicy;
   var that = this;
@@ -755,26 +748,26 @@ RemoteResource.prototype.setStateChangeListener = function() {
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
   } else {
-    stateChangeListener.addListener(this._id, listener);
+    stateChangeListener.addListener(this[kIdKey], listener);
   }
 };
 
 RemoteResource.prototype.unsetStateChangeListener = function() {
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
 
   var result = native.callSync('IotconRemoteResource_unsetStateChangeListener', callArgs);
 
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
   } else {
-    stateChangeListener.removeListener(this._id);
+    stateChangeListener.removeListener(this[kIdKey]);
   }
 };
 
 RemoteResource.prototype.startCaching = function() {
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
 
   var result = native.callSync('IotconRemoteResource_startCaching', callArgs);
 
@@ -785,7 +778,7 @@ RemoteResource.prototype.startCaching = function() {
 
 RemoteResource.prototype.stopCaching = function() {
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
 
   var result = native.callSync('IotconRemoteResource_stopCaching', callArgs);
 
@@ -808,7 +801,7 @@ RemoteResource.prototype.setConnectionChangeListener = function() {
   }]);
 
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
 
   var listener = function(result) {
     if (native.isFailure(result)) {
@@ -823,20 +816,20 @@ RemoteResource.prototype.setConnectionChangeListener = function() {
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
   } else {
-    connectionChangeListener.addListener(this._id, listener);
+    connectionChangeListener.addListener(this[kIdKey], listener);
   }
 };
 
 RemoteResource.prototype.unsetConnectionChangeListener = function() {
   var callArgs = {};
-  callArgs.id = this._id;
+  callArgs.id = this[kIdKey];
 
   var result = native.callSync('IotconRemoteResource_unsetConnectionChangeListener', callArgs);
 
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
   } else {
-    connectionChangeListener.removeListener(this._id);
+    connectionChangeListener.removeListener(this[kIdKey]);
   }
 };
 
@@ -1019,34 +1012,35 @@ Client.prototype.getPlatformInfo = function() {
 function Server() {
 }
 
+var serverResources = {};
+
 Server.prototype.createResource = function() {
   var args = validator.validateMethod(arguments, [{
-    name: 'dictionary',
-    type: types.DICTIONARY
+    name: 'uriPath',
+    type: types.STRING
   }, {
-    name: 'successCallback',
-    type: types.FUNCTION
+    name: 'resourceTypes',
+    type: types.ARRAY,
+    values: types.STRING
   }, {
-    name: 'errorCallback',
-    type: types.FUNCTION,
+    name: 'dictionary',
+    type: types.DICTIONARY,
     optional: true,
     nullable: true
   }]);
 
-  var callArgs = args.dictionary;
+  var callArgs = args.dictionary || {};
+  callArgs.uriPath = args.uriPath;
+  callArgs.resourceTypes = args.resourceTypes;
 
-  var callback = function(result) {
-    if (native.isFailure(result)) {
-      native.callIfPossible(args.errorCallback, native.getErrorObject(result));
-    } else {
-      args.successCallback(new Resource(native.getResultObject(result)));
-    }
-  };
-
-  var result = native.call('IotconServer_createResource', callArgs, callback);
+  var result = native.callSync('IotconServer_createResource', callArgs);
 
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
+  } else {
+    var resource = new Resource(native.getResultObject(result));
+    serverResources[resource[kIdKey]] = resource;
+    return resource;
   }
 };
 
@@ -1055,65 +1049,30 @@ Server.prototype.removeResource = function() {
     name: 'resource',
     type: types.PLATFORM_OBJECT,
     values: Resource
-  }, {
-    name: 'successCallback',
-    type: types.FUNCTION
-  }, {
-    name: 'errorCallback',
-    type: types.FUNCTION,
-    optional: true,
-    nullable: true
   }]);
 
   var callArgs = {};
-  callArgs.id = args.resource._id;
+  callArgs.id = args.resource[kIdKey];
 
-  var callback = function(result) {
-    if (native.isFailure(result)) {
-      native.callIfPossible(args.errorCallback, native.getErrorObject(result));
-    } else {
-      args.successCallback();
-    }
-  };
-
-  var result = native.call('IotconServer_removeResource', callArgs, callback);
+  var result = native.callSync('IotconServer_removeResource', callArgs);
 
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
+  } else {
+    delete serverResources[callArgs.id];
   }
 };
 
-Server.prototype.updateResource = function() {
-  var args = validator.validateMethod(arguments, [{
-    name: 'resource',
-    type: types.PLATFORM_OBJECT,
-    values: Resource
-  }, {
-    name: 'successCallback',
-    type: types.FUNCTION
-  }, {
-    name: 'errorCallback',
-    type: types.FUNCTION,
-    optional: true,
-    nullable: true
-  }]);
+Server.prototype.getResources = function() {
+  var result = [];
 
-  var callArgs = {};
-  callArgs.id = args.resource._id;
-
-  var callback = function(result) {
-    if (native.isFailure(result)) {
-      native.callIfPossible(args.errorCallback, native.getErrorObject(result));
-    } else {
-      args.successCallback(args.resource);
+  for (var id in serverResources) {
+    if (serverResources.hasOwnProperty(id)) {
+      result.push(serverResources[id]);
     }
-  };
-
-  var result = native.call('IotconServer_updateResource', callArgs, callback);
-
-  if (native.isFailure(result)) {
-    throw native.getErrorObject(result);
   }
+
+  return result;
 };
 
 var client = new Client();
index 8e0fe77d90d4938034a13e2fc9e3557b21a95e74..5c2e3f62cbc2cba76a2eaffaeb3eeee0e18173b5 100644 (file)
@@ -32,6 +32,21 @@ namespace {
     return common::TypeMismatchError(std::string(name) + " is required argument"); \
   }
 
+long long GetId(const picojson::object& args) {
+  return static_cast<long long>(args.find(kResourceId)->second.get<double>());
+}
+
+const picojson::value& GetArg(const picojson::object& args, const std::string& name) {
+  static const picojson::value kNull;
+
+  auto it = args.find(name);
+  if (args.end() == it) {
+    return kNull;
+  } else {
+    return it->second;
+  }
+}
+
 }  // namespace
 
 IotconInstance::IotconInstance() : manager_(this) {
@@ -58,6 +73,8 @@ IotconInstance::IotconInstance() : manager_(this) {
   REGISTER_SYNC("IotconClient_removePresenceEventListener", ClientRemovePresenceEventListener);
   REGISTER_SYNC("Iotcon_getTimeout", GetTimeout);
   REGISTER_SYNC("Iotcon_setTimeout", SetTimeout);
+  REGISTER_SYNC("IotconServer_createResource", ServerCreateResource);
+  REGISTER_SYNC("IotconServer_removeResource", ServerRemoveResource);
 
 #undef REGISTER_SYNC
 
@@ -76,9 +93,6 @@ IotconInstance::IotconInstance() : manager_(this) {
   REGISTER_ASYNC("IotconClient_findResource", ClientFindResource);
   REGISTER_ASYNC("IotconClient_getDeviceInfo", ClientGetDeviceInfo);
   REGISTER_ASYNC("IotconClient_getPlatformInfo", ClientGetPlatformInfo);
-  REGISTER_ASYNC("IotconServer_createResource", ServerCreateResource);
-  REGISTER_ASYNC("IotconServer_removeResource", ServerRemoveResource);
-  REGISTER_ASYNC("IotconServer_updateResource", ServerUpdateResource);
 
 #undef REGISTER_ASYNC
 
@@ -262,61 +276,63 @@ common::TizenResult IotconInstance::ClientGetPlatformInfo(const picojson::object
   return common::UnknownError("Not implemented");
 }
 
-common::TizenResult IotconInstance::ServerCreateResource(const picojson::object& args,
-                                                         const common::AsyncToken& token) {
+common::TizenResult IotconInstance::ServerCreateResource(const picojson::object& args) {
   ScopeLogger();
 
-  CHECK_EXIST(args, kIsDiscoverable);
-  CHECK_EXIST(args, kIsObservable);
-  CHECK_EXIST(args, kResourceTypes);
-  CHECK_EXIST(args, kResourceInterfaces);
   CHECK_EXIST(args, kUriPath);
 
-  // TODO: consider support other properties
-  const bool is_discoverable = args.find(kIsDiscoverable)->second.get<bool>();
-  const bool is_observable = args.find(kIsObservable)->second.get<bool>();
-  const auto& resource_types = args.find(kResourceTypes)->second.get<picojson::array>();
-  const auto& resource_interfaces = args.find(kResourceInterfaces)->second.get<picojson::array>();
   const std::string& uri_path = args.find(kUriPath)->second.get<std::string>();
 
-  auto create = [this, is_discoverable, is_observable,
-                 resource_types, uri_path, resource_interfaces, token]() {
-    ScopeLogger("Create resource");
+  const auto& interfaces = GetArg(args, kResourceInterfaces);
+  const auto& resource_interfaces = interfaces.is<picojson::array>() ? interfaces.get<picojson::array>() : picojson::array();
 
-    picojson::value result = picojson::value(picojson::object());
-    ResourceInfoPtr resource{new ResourceInfo()};
-    auto ret = manager_.CreateResource(uri_path, resource_interfaces, resource_types,
-                                       is_discoverable, is_observable, resource);
-    if (!ret) {
-      Post(token, ret);
-      return;
-    }
-    LoggerD("RESOURCE\nid: %lld\nhandle: %p", resource->id, resource->handle);
+  const auto& types = GetArg(args, kResourceTypes);
+  const auto& resource_types = types.is<picojson::array>() ? types.get<picojson::array>() : picojson::array();
 
-    ret = IotconUtils::ResourceToJson(resource, manager_, &(result.get<picojson::object>()));
-    if (!ret) {
-      Post(token, ret);
-      return;
-    }
+  int properties = IOTCON_RESOURCE_NO_PROPERTY;
 
-    Post(token, common::TizenSuccess{result});
-  };
+  const auto& observable = GetArg(args, kIsObservable);
+  properties |= (observable.is<bool>() ? observable.get<bool>() : false) ? IOTCON_RESOURCE_OBSERVABLE : IOTCON_RESOURCE_NO_PROPERTY;
 
-  std::thread{create}.detach();
+  const auto& discoverable = GetArg(args, kIsDiscoverable);
+  properties |= (discoverable.is<bool>() ? discoverable.get<bool>() : false) ? IOTCON_RESOURCE_DISCOVERABLE : IOTCON_RESOURCE_NO_PROPERTY;
 
-  return common::TizenSuccess();
-}
+  const auto& active = GetArg(args, kIsActive);
+  properties |= (active.is<bool>() ? active.get<bool>() : false) ? IOTCON_RESOURCE_ACTIVE : IOTCON_RESOURCE_NO_PROPERTY;
 
-common::TizenResult IotconInstance::ServerRemoveResource(const picojson::object& args,
-                                                         const common::AsyncToken& token) {
-  ScopeLogger();
-  return common::UnknownError("Not implemented");
+  const auto& slow = GetArg(args, kIsSlow);
+  properties |= (slow.is<bool>() ? slow.get<bool>() : false) ? IOTCON_RESOURCE_SLOW : IOTCON_RESOURCE_NO_PROPERTY;
+
+  const auto& secure = GetArg(args, kIsSecure);
+  properties |= (secure.is<bool>() ? secure.get<bool>() : false) ? IOTCON_RESOURCE_SECURE : IOTCON_RESOURCE_NO_PROPERTY;
+
+  const auto& explicit_discoverable = GetArg(args, kIsExplicitDiscoverable);
+  properties |= (explicit_discoverable.is<bool>() ? explicit_discoverable.get<bool>() : false) ? IOTCON_RESOURCE_EXPLICIT_DISCOVERABLE : IOTCON_RESOURCE_NO_PROPERTY;
+
+  ResourceInfoPtr resource{new ResourceInfo()};
+  auto ret = manager_.CreateResource(uri_path, resource_interfaces, resource_types,
+                                     properties, resource);
+  if (!ret) {
+    return ret;
+  }
+
+  LoggerD("RESOURCE\nid: %lld\nhandle: %p", resource->id, resource->handle);
+
+  picojson::value result = picojson::value(picojson::object());
+  ret = IotconUtils::ResourceToJson(resource, manager_, &(result.get<picojson::object>()));
+  if (!ret) {
+    return ret;
+  }
+
+  return common::TizenSuccess{result};
 }
 
-common::TizenResult IotconInstance::ServerUpdateResource(const picojson::object& args,
-                                                         const common::AsyncToken& token) {
+common::TizenResult IotconInstance::ServerRemoveResource(const picojson::object& args) {
   ScopeLogger();
-  return common::UnknownError("Not implemented");
+
+  CHECK_EXIST(args, kResourceId);
+
+  return manager_.DestroyResource(GetId(args));
 }
 
 common::TizenResult IotconInstance::GetTimeout(const picojson::object& args) {
index 0449b9ece9f1fd60ca850c1b4c8482f344089489..1d0b646fd08de953b025d53d33286919d3d669cf 100644 (file)
@@ -68,12 +68,8 @@ class IotconInstance : public common::TizenInstance {
                                           const common::AsyncToken& token);
   common::TizenResult ClientGetPlatformInfo(const picojson::object& args,
                                             const common::AsyncToken& token);
-  common::TizenResult ServerCreateResource(const picojson::object& args,
-                                           const common::AsyncToken& token);
-  common::TizenResult ServerRemoveResource(const picojson::object& args,
-                                           const common::AsyncToken& token);
-  common::TizenResult ServerUpdateResource(const picojson::object& args,
-                                           const common::AsyncToken& token);
+  common::TizenResult ServerCreateResource(const picojson::object& args);
+  common::TizenResult ServerRemoveResource(const picojson::object& args);
   common::TizenResult GetTimeout(const picojson::object& args);
   common::TizenResult SetTimeout(const picojson::object& args);
 
index 99ab26d9a27eacb471ba25e267692233b6e78d1f..077dccaf2edaca0407f2d971d18ff55aaf80ab8b 100644 (file)
@@ -88,8 +88,7 @@ void IotconServerManager::RequestHandler(iotcon_resource_h resource,
 TizenResult IotconServerManager::CreateResource(const std::string& uri_path,
                                                 const picojson::array& interfaces_array,
                                                 const picojson::array& types_array,
-                                                bool is_discoverable,
-                                                bool is_observable,
+                                                int properties,
                                                 ResourceInfoPtr res_pointer) {
   ScopeLogger();
 
@@ -106,11 +105,6 @@ TizenResult IotconServerManager::CreateResource(const std::string& uri_path,
     return res;
   }
 
-  // TODO consider support other properties
-  int properties = ((is_discoverable ? IOTCON_RESOURCE_DISCOVERABLE : IOTCON_RESOURCE_NO_PROPERTY) |
-      (is_observable ? IOTCON_RESOURCE_OBSERVABLE : IOTCON_RESOURCE_NO_PROPERTY) |
-          IOTCON_RESOURCE_ACTIVE);
-
   // Create resource
   ret = iotcon_resource_create(uri_path.c_str(),
                                resource_types,
@@ -146,5 +140,15 @@ TizenResult IotconServerManager::GetResourceById(long long id,
   return TizenSuccess();
 }
 
+common::TizenResult IotconServerManager::DestroyResource(long long id) {
+  ScopeLogger();
+
+  if (resource_map_.erase(id)) {
+    return TizenSuccess();
+  } else {
+    return LogAndCreateTizenError(NotFoundError, "Resource with specified ID does not exist");
+  }
+}
+
 }  // namespace iotcon
 }  // namespace extension
index 39593f5ad08f8451df95c7ad376b394a21bea367..1fd3865a01f6b27f8abaeda76e53c124db8f4a56 100644 (file)
@@ -41,10 +41,11 @@ class IotconServerManager {
   common::TizenResult RestoreHandles();
   common::TizenResult CreateResource(const std::string& uri_path,
                                      const picojson::array& interfaces_array,
-                                     const picojson::array& types_array, bool is_discoverable,
-                                     bool is_observable,
+                                     const picojson::array& types_array,
+                                     int properties,
                                      ResourceInfoPtr res_pointer);
   common::TizenResult GetResourceById(long long id, ResourceInfoPtr* res_pointer) const;
+  common::TizenResult DestroyResource(long long id);
  private:
   IotconInstance* instance_;
   ResourceInfoMap resource_map_;
index a8885501b4c1ffe6d3f6d7a58bac1aa05bd94a1b..004b2157a514f5c356433859b06a7bad5544d251 100644 (file)
@@ -29,6 +29,10 @@ namespace iotcon {
 
 const std::string kIsDiscoverable = "isDiscoverable";
 const std::string kIsObservable = "isObservable";
+const std::string kIsActive = "isActive";
+const std::string kIsSlow = "isSlow";
+const std::string kIsSecure = "isSecure";
+const std::string kIsExplicitDiscoverable = "isExplicitDiscoverable";
 const std::string kResourceTypes = "resourceTypes";
 const std::string kResourceInterfaces = "resourceInterfaces";
 const std::string kResourceChildren = "resources";
@@ -196,10 +200,18 @@ TizenResult IotconUtils::ResourceToJson(ResourceInfoPtr pointer,
 
   res->insert(std::make_pair(kResourceInterfaces,
                              picojson::value(InterfacesToArray(ifaces))));
-  bool observable = properties & IOTCON_RESOURCE_OBSERVABLE;
-  res->insert(std::make_pair(kIsObservable, picojson::value(observable)));
-  bool discoverable = properties & IOTCON_RESOURCE_DISCOVERABLE;
-  res->insert(std::make_pair(kIsDiscoverable, picojson::value(discoverable)));
+  bool value = properties & IOTCON_RESOURCE_OBSERVABLE;
+  res->insert(std::make_pair(kIsObservable, picojson::value(value)));
+  value = properties & IOTCON_RESOURCE_DISCOVERABLE;
+  res->insert(std::make_pair(kIsDiscoverable, picojson::value(value)));
+  value = properties & IOTCON_RESOURCE_ACTIVE;
+  res->insert(std::make_pair(kIsActive, picojson::value(value)));
+  value = properties & IOTCON_RESOURCE_SLOW;
+  res->insert(std::make_pair(kIsSlow, picojson::value(value)));
+  value = properties & IOTCON_RESOURCE_SECURE;
+  res->insert(std::make_pair(kIsSecure, picojson::value(value)));
+  value = properties & IOTCON_RESOURCE_EXPLICIT_DISCOVERABLE;
+  res->insert(std::make_pair(kIsExplicitDiscoverable, picojson::value(value)));
 
   picojson::array children;
   for (auto iter = pointer->children_ids.begin(); iter != pointer->children_ids.end(); ++iter) {
index f54439ecd29d1bab346227c48f9dd76ecf280a97..8a0bbb5d0057a886977daf4c85b65f2ae7f89ee5 100644 (file)
@@ -32,6 +32,10 @@ namespace iotcon {
 
 extern const std::string kIsDiscoverable;
 extern const std::string kIsObservable;
+extern const std::string kIsActive;
+extern const std::string kIsSlow;
+extern const std::string kIsSecure;
+extern const std::string kIsExplicitDiscoverable;
 extern const std::string kResourceTypes;
 extern const std::string kResourceInterfaces;
 extern const std::string kResourceChildren;