From: Pawel Andruszkiewicz
Date: Fri, 5 Feb 2016 14:47:30 +0000 (+0100)
Subject: [iotcon] Create/Get/Delete methods of server.
X-Git-Tag: submit/tizen/20160212.103506^2~10
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d687e6dc29a2d09d1615beb69657693b9cab481b;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[iotcon] Create/Get/Delete methods of server.
Change-Id: I4fc40f919a69e91823235048c3fa2d1d32d73746
Signed-off-by: Pawel Andruszkiewicz
---
diff --git a/src/iotcon/iotcon_api.js b/src/iotcon/iotcon_api.js
index 01f5900b..f3ab15f5 100644
--- a/src/iotcon/iotcon_api.js
+++ b/src/iotcon/iotcon_api.js
@@ -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();
diff --git a/src/iotcon/iotcon_instance.cc b/src/iotcon/iotcon_instance.cc
index 8e0fe77d..5c2e3f62 100644
--- a/src/iotcon/iotcon_instance.cc
+++ b/src/iotcon/iotcon_instance.cc
@@ -32,6 +32,21 @@ namespace {
return common::TypeMismatchError(std::string(name) + " is required argument"); \
}
+long long GetId(const picojson::object& args) {
+ return static_cast(args.find(kResourceId)->second.get());
+}
+
+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();
- const bool is_observable = args.find(kIsObservable)->second.get();
- const auto& resource_types = args.find(kResourceTypes)->second.get();
- const auto& resource_interfaces = args.find(kResourceInterfaces)->second.get();
const std::string& uri_path = args.find(kUriPath)->second.get();
- 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() ? interfaces.get() : 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() ? types.get() : picojson::array();
- ret = IotconUtils::ResourceToJson(resource, manager_, &(result.get()));
- 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() ? observable.get() : false) ? IOTCON_RESOURCE_OBSERVABLE : IOTCON_RESOURCE_NO_PROPERTY;
- std::thread{create}.detach();
+ const auto& discoverable = GetArg(args, kIsDiscoverable);
+ properties |= (discoverable.is() ? discoverable.get() : false) ? IOTCON_RESOURCE_DISCOVERABLE : IOTCON_RESOURCE_NO_PROPERTY;
- return common::TizenSuccess();
-}
+ const auto& active = GetArg(args, kIsActive);
+ properties |= (active.is() ? active.get() : 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() ? slow.get() : false) ? IOTCON_RESOURCE_SLOW : IOTCON_RESOURCE_NO_PROPERTY;
+
+ const auto& secure = GetArg(args, kIsSecure);
+ properties |= (secure.is() ? secure.get() : false) ? IOTCON_RESOURCE_SECURE : IOTCON_RESOURCE_NO_PROPERTY;
+
+ const auto& explicit_discoverable = GetArg(args, kIsExplicitDiscoverable);
+ properties |= (explicit_discoverable.is() ? explicit_discoverable.get() : 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()));
+ 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) {
diff --git a/src/iotcon/iotcon_instance.h b/src/iotcon/iotcon_instance.h
index 0449b9ec..1d0b646f 100644
--- a/src/iotcon/iotcon_instance.h
+++ b/src/iotcon/iotcon_instance.h
@@ -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);
diff --git a/src/iotcon/iotcon_server_manager.cc b/src/iotcon/iotcon_server_manager.cc
index 99ab26d9..077dccaf 100644
--- a/src/iotcon/iotcon_server_manager.cc
+++ b/src/iotcon/iotcon_server_manager.cc
@@ -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
diff --git a/src/iotcon/iotcon_server_manager.h b/src/iotcon/iotcon_server_manager.h
index 39593f5a..1fd3865a 100644
--- a/src/iotcon/iotcon_server_manager.h
+++ b/src/iotcon/iotcon_server_manager.h
@@ -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_;
diff --git a/src/iotcon/iotcon_utils.cc b/src/iotcon/iotcon_utils.cc
index a8885501..004b2157 100644
--- a/src/iotcon/iotcon_utils.cc
+++ b/src/iotcon/iotcon_utils.cc
@@ -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) {
diff --git a/src/iotcon/iotcon_utils.h b/src/iotcon/iotcon_utils.h
index f54439ec..8a0bbb5d 100644
--- a/src/iotcon/iotcon_utils.h
+++ b/src/iotcon/iotcon_utils.h
@@ -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;