From: cc Date: Mon, 16 Jan 2017 04:48:38 +0000 (+0900) Subject: Remove RD_CLIENT preprocessor. X-Git-Tag: 1.3.0~796 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=888db9300d6b4c6ddd518d22b59fe726ebd180ae;p=platform%2Fupstream%2Fiotivity.git Remove RD_CLIENT preprocessor. RD_CLIENT preprocessor for relay notification are removed, because resource directoty option has been set for default. No need to set the option with WITH_CLOUD any more when building. Change-Id: I3170b60f29c836dcf1ef18a1069a0bee09b4bd94 Signed-off-by: cc Reviewed-on: https://gerrit.iotivity.org/gerrit/16425 Tested-by: jenkins-iotivity Reviewed-by: JungYong KIM Reviewed-by: Uze Choi --- diff --git a/service/notification/cpp-wrapper/examples/linux/SConscript b/service/notification/cpp-wrapper/examples/linux/SConscript index 054cafd..623de6d 100755 --- a/service/notification/cpp-wrapper/examples/linux/SConscript +++ b/service/notification/cpp-wrapper/examples/linux/SConscript @@ -46,7 +46,8 @@ notification_sample_env.PrependUnique(LIBS = [ 'oc_logger', 'oc', 'connectivity_abstraction', - 'libcoap' + 'libcoap', + 'resource_directory' ]) notification_sample_env.AppendUnique(CXXFLAGS = ['-std=c++0x','-frtti']) diff --git a/service/notification/cpp-wrapper/provider/SConscript b/service/notification/cpp-wrapper/provider/SConscript index 3412d3c..05071c4 100755 --- a/service/notification/cpp-wrapper/provider/SConscript +++ b/service/notification/cpp-wrapper/provider/SConscript @@ -53,7 +53,8 @@ notification_env.PrependUnique(LIBS = [ 'oc_logger', 'oc', 'octbstack', - 'notification_provider' + 'notification_provider', + 'resource_directory' ]) notification_env.AppendUnique(CXXFLAGS = ['-std=c++0x','-frtti']) diff --git a/service/notification/cpp-wrapper/unittest/SConscript b/service/notification/cpp-wrapper/unittest/SConscript index 857ecf0..5dbc6d1 100644 --- a/service/notification/cpp-wrapper/unittest/SConscript +++ b/service/notification/cpp-wrapper/unittest/SConscript @@ -53,7 +53,7 @@ GTest_Main = File(gtest_dir + '/lib/.libs/libgtest_main.a') notification_wrapper_test_env.AppendUnique(LIBPATH = [lib_env.get('BUILD_DIR')]) notification_wrapper_test_env.AppendUnique(LIBS = [ - 'connectivity_abstraction', 'oc', 'octbstack', 'oc_logger', 'coap', + 'connectivity_abstraction', 'oc', 'octbstack', 'oc_logger', 'coap', 'resource_directory', GTest_Main, GTest]) if env.get('WITH_TCP') == True: diff --git a/service/notification/examples/linux/SConscript b/service/notification/examples/linux/SConscript index 65ef34e..5a740c6 100644 --- a/service/notification/examples/linux/SConscript +++ b/service/notification/examples/linux/SConscript @@ -24,7 +24,8 @@ notification_sample_env.PrependUnique(LIBS = [ 'octbstack', 'oc_logger', 'connectivity_abstraction', - 'libcoap' + 'libcoap', + 'resource_directory' ]) if target_os not in ['windows', 'winrt']: diff --git a/service/notification/src/provider/NSProviderDiscovery.c b/service/notification/src/provider/NSProviderDiscovery.c index 2ff973b..f59ba77 100644 --- a/service/notification/src/provider/NSProviderDiscovery.c +++ b/service/notification/src/provider/NSProviderDiscovery.c @@ -79,7 +79,7 @@ void * NSDiscoverySchedule(void * ptr) NS_LOG(DEBUG, "CASE TASK_REGISTER_RESOURCE : "); NSRegisterResource(); break; -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) case TASK_PUBLISH_RESOURCE: NS_LOG(DEBUG, "CASE TASK_PUBLISH_PESOURCE : "); NSPublishResourceToCloud((char*)node->taskData); diff --git a/service/notification/src/provider/NSProviderInterface.c b/service/notification/src/provider/NSProviderInterface.c index be7d906..3f88a0f 100644 --- a/service/notification/src/provider/NSProviderInterface.c +++ b/service/notification/src/provider/NSProviderInterface.c @@ -142,7 +142,7 @@ NSResult NSStopProvider() NSResult NSProviderEnableRemoteService(char *serverAddress) { -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) NS_LOG(DEBUG, "NSProviderEnableRemoteService - IN"); pthread_mutex_lock(&nsInitMutex); @@ -169,7 +169,7 @@ NSResult NSProviderEnableRemoteService(char *serverAddress) NSResult NSProviderDisableRemoteService(char *serverAddress) { -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) NS_LOG(DEBUG, "NSProviderDisableRemoteService - IN"); pthread_mutex_lock(&nsInitMutex); diff --git a/service/notification/src/provider/NSProviderNotification.c b/service/notification/src/provider/NSProviderNotification.c index 6be4265..02a42d2 100644 --- a/service/notification/src/provider/NSProviderNotification.c +++ b/service/notification/src/provider/NSProviderNotification.c @@ -169,7 +169,7 @@ NSResult NSSendNotification(NSMessage *msg) } } -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) if (subData->remote_messageObId != 0) { if (msg->topic && (msg->topic)[0] != '\0') @@ -258,7 +258,7 @@ NSResult NSSendSync(NSSyncInfo *sync) obArray[obCount++] = subData->syncObId; } -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) if (subData->remote_syncObId != 0) { obArray[obCount++] = subData->remote_syncObId; diff --git a/service/notification/src/provider/NSProviderResource.c b/service/notification/src/provider/NSProviderResource.c index 25f0bca..f73be0e 100644 --- a/service/notification/src/provider/NSProviderResource.c +++ b/service/notification/src/provider/NSProviderResource.c @@ -27,7 +27,7 @@ NSMessageResource NotificationMessageResource; NSSyncResource NotificationSyncResource; NSTopicResource NotificationTopicResource; -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) #define DEFAULT_CONTEXT_VALUE 0x99 OCStackApplicationResult NSHandlePublishCb(void *ctx, OCDoHandle handle, diff --git a/service/notification/src/provider/NSProviderSubscription.c b/service/notification/src/provider/NSProviderSubscription.c index 12ef5d1..0dbcf20 100644 --- a/service/notification/src/provider/NSProviderSubscription.c +++ b/service/notification/src/provider/NSProviderSubscription.c @@ -153,7 +153,7 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour bool iSRemoteServer = false; -#if(defined WITH_CLOUD && defined RD_CLIENT) +#if(defined WITH_CLOUD) iSRemoteServer = NSIsRemoteServerAddress(entityHandlerRequest->devAddr.addr); if (iSRemoteServer) { @@ -213,7 +213,7 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour subData->remote_syncObId = subData->syncObId = 0; bool isRemoteServer = false; -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) isRemoteServer = NSIsRemoteServerAddress(entityHandlerRequest->devAddr.addr); if (isRemoteServer) { diff --git a/service/notification/src/provider/NSProviderSystem.c b/service/notification/src/provider/NSProviderSystem.c index 8ebf078..8e488e9 100644 --- a/service/notification/src/provider/NSProviderSystem.c +++ b/service/notification/src/provider/NSProviderSystem.c @@ -19,7 +19,7 @@ //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= #include "NSProviderSystem.h" -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) #define MAX_SERVER_ADDRESS 32 static char NSRemoteServerAddress[MAX_SERVER_ADDRESS] = {0,}; #endif @@ -48,7 +48,7 @@ NSConnectionState NSGetProviderConnectionState() return NSProviderConnectionState; } -#if (defined WITH_CLOUD && defined RD_CLIENT) +#if (defined WITH_CLOUD) void NSSetRemoteServerAddress(char *serverAddress) { diff --git a/service/notification/src/provider/NSProviderSystem.h b/service/notification/src/provider/NSProviderSystem.h index c895d3a..aa14921 100644 --- a/service/notification/src/provider/NSProviderSystem.h +++ b/service/notification/src/provider/NSProviderSystem.h @@ -1,55 +1,55 @@ -//****************************************************************** -// -// Copyright 2016 Samsung Electronics All Rights Reserved. -// -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -#ifndef _NS_PROVIDER_SYSTEM__H_ -#define _NS_PROVIDER_SYSTEM__H_ - -#include -#include "logger.h" -#include "NSCommon.h" -#include "NSConstants.h" -#include "oic_malloc.h" -#include "NSStructs.h" -#include "NSUtil.h" - -void NSSetProviderConnectionState(NSConnectionState state); -NSConnectionState NSGetProviderConnectionState(); - -void NSInitProviderInfo(const char * userInfo); -void NSDeinitProviderInfo(); -NSProviderInfo * NSGetProviderInfo(); -const char * NSGetUserInfo(); -bool NSGetPolicy(); -void NSSetPolicy(bool policy); -bool NSGetResourceSecurity(); -void NSSetResourceSecurity(bool secured); - -#ifdef WITH_MQ -void NSSetMQServerInfo(const char * serverUri, OCDevAddr * devAddr); -NSMQServerInfo * NSGetMQServerInfo(); -#endif +//****************************************************************** +// +// Copyright 2016 Samsung Electronics All Rights Reserved. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -#if (defined WITH_CLOUD && defined RD_CLIENT) -void NSSetRemoteServerAddress(char *serverAddress); -void NSDeleteRemoteServerAddress(char *serverAddress); -bool NSIsRemoteServerAddress(char *serverAddress); -#endif - -#endif /* _NS_PROVIDER_SYSTEM__H_ */ +#ifndef _NS_PROVIDER_SYSTEM__H_ +#define _NS_PROVIDER_SYSTEM__H_ + +#include +#include "logger.h" +#include "NSCommon.h" +#include "NSConstants.h" +#include "oic_malloc.h" +#include "NSStructs.h" +#include "NSUtil.h" + +void NSSetProviderConnectionState(NSConnectionState state); +NSConnectionState NSGetProviderConnectionState(); + +void NSInitProviderInfo(const char * userInfo); +void NSDeinitProviderInfo(); +NSProviderInfo * NSGetProviderInfo(); +const char * NSGetUserInfo(); +bool NSGetPolicy(); +void NSSetPolicy(bool policy); +bool NSGetResourceSecurity(); +void NSSetResourceSecurity(bool secured); + +#ifdef WITH_MQ +void NSSetMQServerInfo(const char * serverUri, OCDevAddr * devAddr); +NSMQServerInfo * NSGetMQServerInfo(); +#endif + +#if (defined WITH_CLOUD) +void NSSetRemoteServerAddress(char *serverAddress); +void NSDeleteRemoteServerAddress(char *serverAddress); +bool NSIsRemoteServerAddress(char *serverAddress); +#endif + +#endif /* _NS_PROVIDER_SYSTEM__H_ */ diff --git a/service/notification/src/provider/NSProviderTopic.c b/service/notification/src/provider/NSProviderTopic.c index 389ef25..2ad62f7 100644 --- a/service/notification/src/provider/NSProviderTopic.c +++ b/service/notification/src/provider/NSProviderTopic.c @@ -1,582 +1,582 @@ -//****************************************************************** -// -// Copyright 2016 Samsung Electronics All Rights Reserved. -// -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -#include "NSProviderTopic.h" -#include "oic_string.h" -#include "oic_malloc.h" -#include - -NSResult NSSendTopicUpdation(); - -NSResult NSInitTopicList() -{ - NS_LOG(DEBUG, "NSInitTopicList - IN"); - - consumerTopicList = NSProviderStorageCreate(); - NS_VERIFY_NOT_NULL(consumerTopicList, NS_FAIL); - consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME; - - registeredTopicList = NSProviderStorageCreate(); - NS_VERIFY_NOT_NULL(registeredTopicList, NS_FAIL); - registeredTopicList->cacheType = NS_PROVIDER_CACHE_REGISTER_TOPIC; - - NS_LOG(DEBUG, "NSInitTopicList - OUT"); - return NS_OK; -} - -size_t NSProviderGetTopicListSize(NSTopicLL * firstElement) -{ - if (!firstElement) - { - return 0; - } - - int cnt = 0; - - NSTopicLL * iter = firstElement; - - while (iter) - { - cnt++; - iter = iter->next; - } - - return cnt; -} - -NSResult NSRegisterTopic(const char * topicName) -{ - NS_LOG(DEBUG, "NSWriteTopicsToStorage()"); - - NSCacheTopicData * data = (NSCacheTopicData *) OICMalloc(sizeof(NSCacheTopicData)); - NS_VERIFY_NOT_NULL(data, NS_FAIL); - data->topicName = (char *) topicName; - data->state = NS_TOPIC_UNSUBSCRIBED; - - NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); - if (!element) - { - OICFree(data->topicName); - OICFree(data); - return NS_FAIL; - } - - element->data = (void *) data; - element->next = NULL; - - if (NSProviderStorageWrite(registeredTopicList, element) != NS_OK) - { - NS_LOG(DEBUG, "fail to write cache"); - return NS_FAIL; - } - - NSSendTopicUpdation(); - NS_LOG(DEBUG, "NSWriteTopicsToStorage() NS_OK"); - return NS_OK; -} - -NSResult NSUnregisterTopic(const char * topicName) -{ - NS_LOG(DEBUG, "NSDeleteTopics()"); - NSResult result = NS_OK; - - if (!topicName) - { - NS_LOG(ERROR, "topicName is NULL"); - return NS_ERROR; - } - - result = NSProviderStorageDelete(registeredTopicList, topicName); - - while (NSProviderStorageDelete(consumerTopicList, topicName) != NS_FAIL) - { - } - - if (result == NS_OK) - { - NSSendTopicUpdation(); - } - - return result; -} - -NSResult NSSendTopicUpdation() -{ - NS_LOG(DEBUG, "NSSendTopicUpdation - IN"); - - OCRepPayload* payload = OCRepPayloadCreate(); - - if (!payload) - { - NS_LOG(ERROR, "fail to create playload"); - return NS_ERROR; - } - - OCResourceHandle rHandle = NULL; - if (NSPutMessageResource(NULL, &rHandle) != NS_OK) - { - NS_LOG(ERROR, "Fail to put message resource"); - return NS_ERROR; - } - - OCRepPayloadSetUri(payload, NS_COLLECTION_MESSAGE_URI); - OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, NS_TOPIC); - OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId); - - OCObservationId obArray[255] = - { 0, }; - int obCount = 0; - - NSCacheElement * it = consumerSubList->head; - - while (it) - { - NSCacheSubData * subData = (NSCacheSubData *) it->data; - - if (subData->isWhite) - { - if (subData->messageObId != 0) - { - obArray[obCount++] = subData->messageObId; - } - -#if (defined WITH_CLOUD && defined RD_CLIENT) - if (subData->remote_messageObId != 0) - { - obArray[obCount++] = subData->remote_messageObId; - } -#endif - } - - it = it->next; - } - - if (!obCount) - { - NS_LOG(ERROR, "observer count is zero"); - return NS_ERROR; - } - - if (OCNotifyListOfObservers(rHandle, obArray, obCount, payload, OC_HIGH_QOS) != OC_STACK_OK) - { - NS_LOG(ERROR, "fail to send topic updation"); - OCRepPayloadDestroy(payload); - return NS_ERROR; - - } - OCRepPayloadDestroy(payload); - - NS_LOG(DEBUG, "NSSendTopicUpdation - OUT"); - return NS_OK; -} - -NSResult NSSendTopicUpdationToConsumer(char *consumerId) -{ - NS_LOG(DEBUG, "NSSendTopicUpdationToConsumer - IN"); - - OCRepPayload* payload = OCRepPayloadCreate(); - - if (!payload) - { - NS_LOG(ERROR, "fail to create playload"); - return NS_ERROR; - } - - OCResourceHandle rHandle = NULL; - if (NSPutMessageResource(NULL, &rHandle) != NS_OK) - { - NS_LOG(ERROR, "Fail to put message resource"); - return NS_ERROR; - } - - OCRepPayloadSetUri(payload, NS_COLLECTION_MESSAGE_URI); - OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, NS_TOPIC); - OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId); - - NSCacheElement * element = NSProviderStorageRead(consumerSubList, consumerId); - - if (element == NULL) - { - NS_LOG(ERROR, "element is NULL"); - return NS_ERROR; - } - - NSCacheSubData * subData = (NSCacheSubData*) element->data; - - if (OCNotifyListOfObservers(rHandle, (OCObservationId*) &subData->messageObId, 1, payload, - OC_HIGH_QOS) != OC_STACK_OK) - { - NS_LOG(ERROR, "fail to send topic updation"); - OCRepPayloadDestroy(payload); - return NS_ERROR; - } - - OCRepPayloadDestroy(payload); - - NS_LOG(DEBUG, "NSSendTopicUpdationToConsumer - OUT"); - return NS_OK; -} - -NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) -{ - NS_LOG(DEBUG, "NSSendTopicList - IN"); - - char * copyReq = OICStrdup(entityHandlerRequest->query); - char * id = NSGetValueFromQuery(copyReq, NS_QUERY_CONSUMER_ID); - NSTopicLL * topics = NULL; - - if (!id) - { - NS_LOG(DEBUG, "Send registered topic list"); - topics = NSProviderGetTopicsCacheData(registeredTopicList); - } - else - { - NS_LOG(DEBUG, "Send subscribed topic list to consumer"); - topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList, consumerTopicList, id); - if (!topics) - { - topics = NSProviderGetTopicsCacheData(registeredTopicList); - } - } - - // make response for the Get Request - OCEntityHandlerResponse response; - response.numSendVendorSpecificHeaderOptions = 0; - memset(response.sendVendorSpecificHeaderOptions, 0, - sizeof response.sendVendorSpecificHeaderOptions); - memset(response.resourceUri, 0, sizeof response.resourceUri); - - OCRepPayload* payload = OCRepPayloadCreate(); - if (!payload) - { - NS_LOG(ERROR, "payload is NULL"); - OICFree(copyReq); - return NS_ERROR; - } - - OCRepPayloadSetUri(payload, NS_COLLECTION_TOPIC_URI); - if (id) - { - OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, id); - } - OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId); - OICFree(copyReq); - - if (topics) - { - NS_LOG(DEBUG, "topicList is NULL"); - size_t dimensionSize = (size_t) NSProviderGetTopicListSize(topics); - NS_LOG_V(DEBUG, "dimensionSize = %d", (int)dimensionSize); - - if (!dimensionSize) - { - return NS_ERROR; - } - - OCRepPayload** payloadTopicArray = (OCRepPayload **) OICMalloc( - sizeof(OCRepPayload *) * dimensionSize); - NS_VERIFY_NOT_NULL(payloadTopicArray, NS_ERROR); - - size_t dimensions[3] = { dimensionSize, 0, 0 }; - - for (int i = 0; i < (int) dimensionSize; i++) - { - NS_LOG_V(DEBUG, "topicName = %s", topics->topicName); - NS_LOG_V(DEBUG, "topicState = %d",(int) topics->state); - - payloadTopicArray[i] = OCRepPayloadCreate(); - NS_VERIFY_NOT_NULL(payloadTopicArray[i], NS_ERROR); - OCRepPayloadSetPropString(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_NAME, - topics->topicName); - OCRepPayloadSetPropInt(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_SELECTION, - (int) topics->state); - - NSTopicLL * next = topics->next; - OICFree(topics->topicName); - OICFree(topics); - topics = next; - } - - OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, - (const OCRepPayload**) (payloadTopicArray), dimensions); - for (int i = 0; i < (int) dimensionSize; ++i) - { - OCRepPayloadDestroy(payloadTopicArray[i]); - } - OICFree(payloadTopicArray); - } - else - { - size_t dimensions[3] = { 0, 0, 0 }; - - OCRepPayloadSetPropObjectArrayAsOwner(payload, NS_ATTRIBUTE_TOPIC_LIST, - (OCRepPayload **) NULL, dimensions); - } - - copyReq = OICStrdup(entityHandlerRequest->query); - char * reqInterface = NSGetValueFromQuery(copyReq, NS_QUERY_INTERFACE); - - if (reqInterface && strcmp(reqInterface, NS_INTERFACE_BASELINE) == 0) - { - OCResourcePayloadAddStringLL(&payload->interfaces, NS_INTERFACE_BASELINE); - OCResourcePayloadAddStringLL(&payload->interfaces, NS_INTERFACE_READ); - OCResourcePayloadAddStringLL(&payload->types, NS_ROOT_TYPE); - } - - OICFree(copyReq); - response.requestHandle = entityHandlerRequest->requestHandle; - response.resourceHandle = entityHandlerRequest->resource; - response.persistentBufferFlag = 0; - response.ehResult = OC_EH_OK; - response.payload = (OCPayload *) payload; - - if (OCDoResponse(&response) != OC_STACK_OK) - { - NS_LOG(ERROR, "Fail to response topic list"); - OCRepPayloadDestroy(payload); - return NS_ERROR; - } - - OCRepPayloadDestroy(payload); - NS_LOG(DEBUG, "NSSendTopicList - OUT"); - return NS_OK; -} - -NSResult NSPostConsumerTopics(OCEntityHandlerRequest * entityHandlerRequest) -{ - NS_LOG(DEBUG, "NSPostConsumerTopics() - IN"); - - char * consumerId = NULL; - OCRepPayload * payload = (OCRepPayload *) entityHandlerRequest->payload; - OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, &consumerId); - - if (!consumerId) - { - NS_LOG(DEBUG, "Invalid consumer ID"); - return NS_FAIL; - } - - NS_LOG_V(DEBUG, "TOPIC consumer ID = %s", consumerId); - - consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID; - - while (NSProviderStorageDelete(consumerTopicList, consumerId) != NS_FAIL) - { - } - - consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME; - OCRepPayload ** topicListPayload = NULL; - OCRepPayloadValue * payloadValue = NULL; - payloadValue = NSPayloadFindValue(payload, NS_ATTRIBUTE_TOPIC_LIST); - size_t dimensionSize = calcDimTotal(payloadValue->arr.dimensions); - size_t dimensions[3] = { dimensionSize, 0, 0 }; - OCRepPayloadGetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, &topicListPayload, dimensions); - - for (int i = 0; i < (int) dimensionSize; i++) - { - char * topicName = NULL; - int64_t topicState = 0; - - OCRepPayloadGetPropString(topicListPayload[i], NS_ATTRIBUTE_TOPIC_NAME, &topicName); - OCRepPayloadGetPropInt(topicListPayload[i], NS_ATTRIBUTE_TOPIC_SELECTION, &topicState); - NS_LOG_V(DEBUG, "Topic Name(state): %s(%d)", topicName, (int)topicState); - - if (NS_TOPIC_SUBSCRIBED == (NSTopicState) topicState) - { - NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) OICMalloc( - sizeof(NSCacheTopicSubData)); - NS_VERIFY_NOT_NULL(topicSubData, NS_FAIL); - - OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId); - topicSubData->topicName = topicName; - - NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); - - if (!newObj) - { - OICFree(topicSubData->topicName); - OICFree(topicSubData); - OICFree(consumerId); - return NS_FAIL; - } - - newObj->data = (NSCacheData *) topicSubData; - newObj->next = NULL; - +//****************************************************************** +// +// Copyright 2016 Samsung Electronics All Rights Reserved. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#include "NSProviderTopic.h" +#include "oic_string.h" +#include "oic_malloc.h" +#include + +NSResult NSSendTopicUpdation(); + +NSResult NSInitTopicList() +{ + NS_LOG(DEBUG, "NSInitTopicList - IN"); + + consumerTopicList = NSProviderStorageCreate(); + NS_VERIFY_NOT_NULL(consumerTopicList, NS_FAIL); + consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME; + + registeredTopicList = NSProviderStorageCreate(); + NS_VERIFY_NOT_NULL(registeredTopicList, NS_FAIL); + registeredTopicList->cacheType = NS_PROVIDER_CACHE_REGISTER_TOPIC; + + NS_LOG(DEBUG, "NSInitTopicList - OUT"); + return NS_OK; +} + +size_t NSProviderGetTopicListSize(NSTopicLL * firstElement) +{ + if (!firstElement) + { + return 0; + } + + int cnt = 0; + + NSTopicLL * iter = firstElement; + + while (iter) + { + cnt++; + iter = iter->next; + } + + return cnt; +} + +NSResult NSRegisterTopic(const char * topicName) +{ + NS_LOG(DEBUG, "NSWriteTopicsToStorage()"); + + NSCacheTopicData * data = (NSCacheTopicData *) OICMalloc(sizeof(NSCacheTopicData)); + NS_VERIFY_NOT_NULL(data, NS_FAIL); + data->topicName = (char *) topicName; + data->state = NS_TOPIC_UNSUBSCRIBED; + + NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); + if (!element) + { + OICFree(data->topicName); + OICFree(data); + return NS_FAIL; + } + + element->data = (void *) data; + element->next = NULL; + + if (NSProviderStorageWrite(registeredTopicList, element) != NS_OK) + { + NS_LOG(DEBUG, "fail to write cache"); + return NS_FAIL; + } + + NSSendTopicUpdation(); + NS_LOG(DEBUG, "NSWriteTopicsToStorage() NS_OK"); + return NS_OK; +} + +NSResult NSUnregisterTopic(const char * topicName) +{ + NS_LOG(DEBUG, "NSDeleteTopics()"); + NSResult result = NS_OK; + + if (!topicName) + { + NS_LOG(ERROR, "topicName is NULL"); + return NS_ERROR; + } + + result = NSProviderStorageDelete(registeredTopicList, topicName); + + while (NSProviderStorageDelete(consumerTopicList, topicName) != NS_FAIL) + { + } + + if (result == NS_OK) + { + NSSendTopicUpdation(); + } + + return result; +} + +NSResult NSSendTopicUpdation() +{ + NS_LOG(DEBUG, "NSSendTopicUpdation - IN"); + + OCRepPayload* payload = OCRepPayloadCreate(); + + if (!payload) + { + NS_LOG(ERROR, "fail to create playload"); + return NS_ERROR; + } + + OCResourceHandle rHandle = NULL; + if (NSPutMessageResource(NULL, &rHandle) != NS_OK) + { + NS_LOG(ERROR, "Fail to put message resource"); + return NS_ERROR; + } + + OCRepPayloadSetUri(payload, NS_COLLECTION_MESSAGE_URI); + OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, NS_TOPIC); + OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId); + + OCObservationId obArray[255] = + { 0, }; + int obCount = 0; + + NSCacheElement * it = consumerSubList->head; + + while (it) + { + NSCacheSubData * subData = (NSCacheSubData *) it->data; + + if (subData->isWhite) + { + if (subData->messageObId != 0) + { + obArray[obCount++] = subData->messageObId; + } + +#if (defined WITH_CLOUD) + if (subData->remote_messageObId != 0) + { + obArray[obCount++] = subData->remote_messageObId; + } +#endif + } + + it = it->next; + } + + if (!obCount) + { + NS_LOG(ERROR, "observer count is zero"); + return NS_ERROR; + } + + if (OCNotifyListOfObservers(rHandle, obArray, obCount, payload, OC_HIGH_QOS) != OC_STACK_OK) + { + NS_LOG(ERROR, "fail to send topic updation"); + OCRepPayloadDestroy(payload); + return NS_ERROR; + + } + OCRepPayloadDestroy(payload); + + NS_LOG(DEBUG, "NSSendTopicUpdation - OUT"); + return NS_OK; +} + +NSResult NSSendTopicUpdationToConsumer(char *consumerId) +{ + NS_LOG(DEBUG, "NSSendTopicUpdationToConsumer - IN"); + + OCRepPayload* payload = OCRepPayloadCreate(); + + if (!payload) + { + NS_LOG(ERROR, "fail to create playload"); + return NS_ERROR; + } + + OCResourceHandle rHandle = NULL; + if (NSPutMessageResource(NULL, &rHandle) != NS_OK) + { + NS_LOG(ERROR, "Fail to put message resource"); + return NS_ERROR; + } + + OCRepPayloadSetUri(payload, NS_COLLECTION_MESSAGE_URI); + OCRepPayloadSetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, NS_TOPIC); + OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId); + + NSCacheElement * element = NSProviderStorageRead(consumerSubList, consumerId); + + if (element == NULL) + { + NS_LOG(ERROR, "element is NULL"); + return NS_ERROR; + } + + NSCacheSubData * subData = (NSCacheSubData*) element->data; + + if (OCNotifyListOfObservers(rHandle, (OCObservationId*) &subData->messageObId, 1, payload, + OC_HIGH_QOS) != OC_STACK_OK) + { + NS_LOG(ERROR, "fail to send topic updation"); + OCRepPayloadDestroy(payload); + return NS_ERROR; + } + + OCRepPayloadDestroy(payload); + + NS_LOG(DEBUG, "NSSendTopicUpdationToConsumer - OUT"); + return NS_OK; +} + +NSResult NSSendTopicList(OCEntityHandlerRequest * entityHandlerRequest) +{ + NS_LOG(DEBUG, "NSSendTopicList - IN"); + + char * copyReq = OICStrdup(entityHandlerRequest->query); + char * id = NSGetValueFromQuery(copyReq, NS_QUERY_CONSUMER_ID); + NSTopicLL * topics = NULL; + + if (!id) + { + NS_LOG(DEBUG, "Send registered topic list"); + topics = NSProviderGetTopicsCacheData(registeredTopicList); + } + else + { + NS_LOG(DEBUG, "Send subscribed topic list to consumer"); + topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList, consumerTopicList, id); + if (!topics) + { + topics = NSProviderGetTopicsCacheData(registeredTopicList); + } + } + + // make response for the Get Request + OCEntityHandlerResponse response; + response.numSendVendorSpecificHeaderOptions = 0; + memset(response.sendVendorSpecificHeaderOptions, 0, + sizeof response.sendVendorSpecificHeaderOptions); + memset(response.resourceUri, 0, sizeof response.resourceUri); + + OCRepPayload* payload = OCRepPayloadCreate(); + if (!payload) + { + NS_LOG(ERROR, "payload is NULL"); + OICFree(copyReq); + return NS_ERROR; + } + + OCRepPayloadSetUri(payload, NS_COLLECTION_TOPIC_URI); + if (id) + { + OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, id); + } + OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, NSGetProviderInfo()->providerId); + OICFree(copyReq); + + if (topics) + { + NS_LOG(DEBUG, "topicList is NULL"); + size_t dimensionSize = (size_t) NSProviderGetTopicListSize(topics); + NS_LOG_V(DEBUG, "dimensionSize = %d", (int)dimensionSize); + + if (!dimensionSize) + { + return NS_ERROR; + } + + OCRepPayload** payloadTopicArray = (OCRepPayload **) OICMalloc( + sizeof(OCRepPayload *) * dimensionSize); + NS_VERIFY_NOT_NULL(payloadTopicArray, NS_ERROR); + + size_t dimensions[3] = { dimensionSize, 0, 0 }; + + for (int i = 0; i < (int) dimensionSize; i++) + { + NS_LOG_V(DEBUG, "topicName = %s", topics->topicName); + NS_LOG_V(DEBUG, "topicState = %d",(int) topics->state); + + payloadTopicArray[i] = OCRepPayloadCreate(); + NS_VERIFY_NOT_NULL(payloadTopicArray[i], NS_ERROR); + OCRepPayloadSetPropString(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_NAME, + topics->topicName); + OCRepPayloadSetPropInt(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_SELECTION, + (int) topics->state); + + NSTopicLL * next = topics->next; + OICFree(topics->topicName); + OICFree(topics); + topics = next; + } + + OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, + (const OCRepPayload**) (payloadTopicArray), dimensions); + for (int i = 0; i < (int) dimensionSize; ++i) + { + OCRepPayloadDestroy(payloadTopicArray[i]); + } + OICFree(payloadTopicArray); + } + else + { + size_t dimensions[3] = { 0, 0, 0 }; + + OCRepPayloadSetPropObjectArrayAsOwner(payload, NS_ATTRIBUTE_TOPIC_LIST, + (OCRepPayload **) NULL, dimensions); + } + + copyReq = OICStrdup(entityHandlerRequest->query); + char * reqInterface = NSGetValueFromQuery(copyReq, NS_QUERY_INTERFACE); + + if (reqInterface && strcmp(reqInterface, NS_INTERFACE_BASELINE) == 0) + { + OCResourcePayloadAddStringLL(&payload->interfaces, NS_INTERFACE_BASELINE); + OCResourcePayloadAddStringLL(&payload->interfaces, NS_INTERFACE_READ); + OCResourcePayloadAddStringLL(&payload->types, NS_ROOT_TYPE); + } + + OICFree(copyReq); + response.requestHandle = entityHandlerRequest->requestHandle; + response.resourceHandle = entityHandlerRequest->resource; + response.persistentBufferFlag = 0; + response.ehResult = OC_EH_OK; + response.payload = (OCPayload *) payload; + + if (OCDoResponse(&response) != OC_STACK_OK) + { + NS_LOG(ERROR, "Fail to response topic list"); + OCRepPayloadDestroy(payload); + return NS_ERROR; + } + + OCRepPayloadDestroy(payload); + NS_LOG(DEBUG, "NSSendTopicList - OUT"); + return NS_OK; +} + +NSResult NSPostConsumerTopics(OCEntityHandlerRequest * entityHandlerRequest) +{ + NS_LOG(DEBUG, "NSPostConsumerTopics() - IN"); + + char * consumerId = NULL; + OCRepPayload * payload = (OCRepPayload *) entityHandlerRequest->payload; + OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, &consumerId); + + if (!consumerId) + { + NS_LOG(DEBUG, "Invalid consumer ID"); + return NS_FAIL; + } + + NS_LOG_V(DEBUG, "TOPIC consumer ID = %s", consumerId); + + consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_CID; + + while (NSProviderStorageDelete(consumerTopicList, consumerId) != NS_FAIL) + { + } + + consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME; + OCRepPayload ** topicListPayload = NULL; + OCRepPayloadValue * payloadValue = NULL; + payloadValue = NSPayloadFindValue(payload, NS_ATTRIBUTE_TOPIC_LIST); + size_t dimensionSize = calcDimTotal(payloadValue->arr.dimensions); + size_t dimensions[3] = { dimensionSize, 0, 0 }; + OCRepPayloadGetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, &topicListPayload, dimensions); + + for (int i = 0; i < (int) dimensionSize; i++) + { + char * topicName = NULL; + int64_t topicState = 0; + + OCRepPayloadGetPropString(topicListPayload[i], NS_ATTRIBUTE_TOPIC_NAME, &topicName); + OCRepPayloadGetPropInt(topicListPayload[i], NS_ATTRIBUTE_TOPIC_SELECTION, &topicState); + NS_LOG_V(DEBUG, "Topic Name(state): %s(%d)", topicName, (int)topicState); + + if (NS_TOPIC_SUBSCRIBED == (NSTopicState) topicState) + { + NSCacheTopicSubData * topicSubData = (NSCacheTopicSubData *) OICMalloc( + sizeof(NSCacheTopicSubData)); + NS_VERIFY_NOT_NULL(topicSubData, NS_FAIL); + + OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId); + topicSubData->topicName = topicName; + + NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); + + if (!newObj) + { + OICFree(topicSubData->topicName); + OICFree(topicSubData); + OICFree(consumerId); + return NS_FAIL; + } + + newObj->data = (NSCacheData *) topicSubData; + newObj->next = NULL; + NSProviderStorageWrite(consumerTopicList, newObj); - } - } - NSSendTopicUpdationToConsumer(consumerId); - OICFree(consumerId); - NS_LOG(DEBUG, "NSPostConsumerTopics() - OUT"); - return NS_OK; -} - -void * NSTopicSchedule(void * ptr) -{ - if (ptr == NULL) - { - NS_LOG(DEBUG, "Create NSTopicSchedule"); - } - - while (NSIsRunning[TOPIC_SCHEDULER]) - { - sem_wait(&NSSemaphore[TOPIC_SCHEDULER]); - pthread_mutex_lock(&NSMutex[TOPIC_SCHEDULER]); - - if (NSHeadMsg[TOPIC_SCHEDULER] != NULL) - { - NSTask *node = NSHeadMsg[TOPIC_SCHEDULER]; - NSHeadMsg[TOPIC_SCHEDULER] = node->nextTask; - - switch (node->taskType) - { - case TASK_SEND_TOPICS: - NS_LOG(DEBUG, "CASE TASK_SEND_TOPICS : "); - NSSendTopicList((OCEntityHandlerRequest*) node->taskData); - NSFreeOCEntityHandlerRequest((OCEntityHandlerRequest*) node->taskData); - break; - case TASK_SUBSCRIBE_TOPIC: - { - NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : "); - NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData; - pthread_mutex_lock(topicSyncResult->mutex); - NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); - NSCacheTopicSubData * subData = - (NSCacheTopicSubData *) topicSyncResult->topicData; - if (!newObj) - { - OICFree(subData->topicName); - OICFree(subData); - pthread_cond_signal(topicSyncResult->condition); - pthread_mutex_unlock(topicSyncResult->mutex); - } - else - { - if (NSProviderStorageRead(registeredTopicList, subData->topicName)) - { - newObj->data = topicSyncResult->topicData; - newObj->next = NULL; - - if (NSProviderStorageWrite(consumerTopicList, newObj) == NS_OK) - { - NSSendTopicUpdationToConsumer(subData->id); - topicSyncResult->result = NS_OK; - } - } - else - { - OICFree(subData->topicName); - OICFree(subData); - OICFree(newObj); - } - } - pthread_cond_signal(topicSyncResult->condition); + } + } + NSSendTopicUpdationToConsumer(consumerId); + OICFree(consumerId); + NS_LOG(DEBUG, "NSPostConsumerTopics() - OUT"); + return NS_OK; +} + +void * NSTopicSchedule(void * ptr) +{ + if (ptr == NULL) + { + NS_LOG(DEBUG, "Create NSTopicSchedule"); + } + + while (NSIsRunning[TOPIC_SCHEDULER]) + { + sem_wait(&NSSemaphore[TOPIC_SCHEDULER]); + pthread_mutex_lock(&NSMutex[TOPIC_SCHEDULER]); + + if (NSHeadMsg[TOPIC_SCHEDULER] != NULL) + { + NSTask *node = NSHeadMsg[TOPIC_SCHEDULER]; + NSHeadMsg[TOPIC_SCHEDULER] = node->nextTask; + + switch (node->taskType) + { + case TASK_SEND_TOPICS: + NS_LOG(DEBUG, "CASE TASK_SEND_TOPICS : "); + NSSendTopicList((OCEntityHandlerRequest*) node->taskData); + NSFreeOCEntityHandlerRequest((OCEntityHandlerRequest*) node->taskData); + break; + case TASK_SUBSCRIBE_TOPIC: + { + NS_LOG(DEBUG, "CASE TASK_SUBSCRIBE_TOPIC : "); + NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData; + pthread_mutex_lock(topicSyncResult->mutex); + NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); + NSCacheTopicSubData * subData = + (NSCacheTopicSubData *) topicSyncResult->topicData; + if (!newObj) + { + OICFree(subData->topicName); + OICFree(subData); + pthread_cond_signal(topicSyncResult->condition); + pthread_mutex_unlock(topicSyncResult->mutex); + } + else + { + if (NSProviderStorageRead(registeredTopicList, subData->topicName)) + { + newObj->data = topicSyncResult->topicData; + newObj->next = NULL; + + if (NSProviderStorageWrite(consumerTopicList, newObj) == NS_OK) + { + NSSendTopicUpdationToConsumer(subData->id); + topicSyncResult->result = NS_OK; + } + } + else + { + OICFree(subData->topicName); + OICFree(subData); + OICFree(newObj); + } + } + pthread_cond_signal(topicSyncResult->condition); + pthread_mutex_unlock(topicSyncResult->mutex); + } + break; + case TASK_UNSUBSCRIBE_TOPIC: + { + NS_LOG(DEBUG, "CASE TASK_UNSUBSCRIBE_TOPIC : "); + NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData; + pthread_mutex_lock(topicSyncResult->mutex); + NSCacheTopicSubData * topicSubData = + (NSCacheTopicSubData *) topicSyncResult->topicData; + + if (NSProviderDeleteConsumerTopic(consumerTopicList, topicSubData) == NS_OK) + { + NSSendTopicUpdationToConsumer(topicSubData->id); + topicSyncResult->result = NS_OK; + } + + OICFree(topicSubData->topicName); + OICFree(topicSubData); + pthread_cond_signal(topicSyncResult->condition); + pthread_mutex_unlock(topicSyncResult->mutex); + + } + break; + case TASK_REGISTER_TOPIC: + { + NS_LOG(DEBUG, "CASE TASK_ADD_TOPIC : "); + NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData; + + pthread_mutex_lock(topicSyncResult->mutex); + topicSyncResult->result = NSRegisterTopic( + (const char *) topicSyncResult->topicData); + pthread_cond_signal(topicSyncResult->condition); + pthread_mutex_unlock(topicSyncResult->mutex); + } + break; + case TASK_UNREGISTER_TOPIC: + { + NS_LOG(DEBUG, "CASE_TASK_DELETE_TOPIC : "); + NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData; + pthread_mutex_lock(topicSyncResult->mutex); + topicSyncResult->result = NSUnregisterTopic( + (const char *) topicSyncResult->topicData); + pthread_cond_signal(topicSyncResult->condition); pthread_mutex_unlock(topicSyncResult->mutex); - } - break; - case TASK_UNSUBSCRIBE_TOPIC: - { - NS_LOG(DEBUG, "CASE TASK_UNSUBSCRIBE_TOPIC : "); - NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData; - pthread_mutex_lock(topicSyncResult->mutex); - NSCacheTopicSubData * topicSubData = - (NSCacheTopicSubData *) topicSyncResult->topicData; - - if (NSProviderDeleteConsumerTopic(consumerTopicList, topicSubData) == NS_OK) - { - NSSendTopicUpdationToConsumer(topicSubData->id); - topicSyncResult->result = NS_OK; - } - - OICFree(topicSubData->topicName); - OICFree(topicSubData); - pthread_cond_signal(topicSyncResult->condition); - pthread_mutex_unlock(topicSyncResult->mutex); - - } - break; - case TASK_REGISTER_TOPIC: - { - NS_LOG(DEBUG, "CASE TASK_ADD_TOPIC : "); - NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData; - - pthread_mutex_lock(topicSyncResult->mutex); - topicSyncResult->result = NSRegisterTopic( - (const char *) topicSyncResult->topicData); - pthread_cond_signal(topicSyncResult->condition); - pthread_mutex_unlock(topicSyncResult->mutex); - } - break; - case TASK_UNREGISTER_TOPIC: - { - NS_LOG(DEBUG, "CASE_TASK_DELETE_TOPIC : "); - NSTopicSyncResult * topicSyncResult = (NSTopicSyncResult *) node->taskData; - pthread_mutex_lock(topicSyncResult->mutex); - topicSyncResult->result = NSUnregisterTopic( - (const char *) topicSyncResult->topicData); - pthread_cond_signal(topicSyncResult->condition); - pthread_mutex_unlock(topicSyncResult->mutex); - } - break; - case TASK_POST_TOPIC: - { - NS_LOG(DEBUG, "TASK_POST_TOPIC : "); - NSPostConsumerTopics((OCEntityHandlerRequest*) node->taskData); - NSFreeOCEntityHandlerRequest((OCEntityHandlerRequest*) node->taskData); - } - break; - case TASK_GET_TOPICS: - { - NS_LOG(DEBUG, "TASK_GET_TOPICS : "); - NSTopicSync * topicSync = (NSTopicSync *) node->taskData; - pthread_mutex_lock(topicSync->mutex); - NSTopicLL * topics = NSProviderGetTopicsCacheData(registeredTopicList); - topicSync->topics = topics; - pthread_cond_signal(topicSync->condition); - pthread_mutex_unlock(topicSync->mutex); - } - break; - case TAST_GET_CONSUMER_TOPICS: - { - NS_LOG(DEBUG, "TASK_GET_CONSUMER_TOPICS : "); - NSTopicSync * topicSync = (NSTopicSync *) node->taskData; - pthread_mutex_lock(topicSync->mutex); - NSTopicLL * topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList, - consumerTopicList, topicSync->consumerId); - topicSync->topics = topics; - pthread_cond_signal(topicSync->condition); - pthread_mutex_unlock(topicSync->mutex); - } - break; - default: - break; - } - - OICFree(node); - } - - pthread_mutex_unlock(&NSMutex[TOPIC_SCHEDULER]); - } - - NS_LOG(DEBUG, "Destroy NSTopicSchedule"); - return NULL; -} + } + break; + case TASK_POST_TOPIC: + { + NS_LOG(DEBUG, "TASK_POST_TOPIC : "); + NSPostConsumerTopics((OCEntityHandlerRequest*) node->taskData); + NSFreeOCEntityHandlerRequest((OCEntityHandlerRequest*) node->taskData); + } + break; + case TASK_GET_TOPICS: + { + NS_LOG(DEBUG, "TASK_GET_TOPICS : "); + NSTopicSync * topicSync = (NSTopicSync *) node->taskData; + pthread_mutex_lock(topicSync->mutex); + NSTopicLL * topics = NSProviderGetTopicsCacheData(registeredTopicList); + topicSync->topics = topics; + pthread_cond_signal(topicSync->condition); + pthread_mutex_unlock(topicSync->mutex); + } + break; + case TAST_GET_CONSUMER_TOPICS: + { + NS_LOG(DEBUG, "TASK_GET_CONSUMER_TOPICS : "); + NSTopicSync * topicSync = (NSTopicSync *) node->taskData; + pthread_mutex_lock(topicSync->mutex); + NSTopicLL * topics = NSProviderGetConsumerTopicsCacheData(registeredTopicList, + consumerTopicList, topicSync->consumerId); + topicSync->topics = topics; + pthread_cond_signal(topicSync->condition); + pthread_mutex_unlock(topicSync->mutex); + } + break; + default: + break; + } + + OICFree(node); + } + + pthread_mutex_unlock(&NSMutex[TOPIC_SCHEDULER]); + } + + NS_LOG(DEBUG, "Destroy NSTopicSchedule"); + return NULL; +} diff --git a/service/notification/unittest/SConscript b/service/notification/unittest/SConscript index 09fe879..b4d0b42 100644 --- a/service/notification/unittest/SConscript +++ b/service/notification/unittest/SConscript @@ -53,7 +53,7 @@ GTest_Main = File(gtest_dir + '/lib/.libs/libgtest_main.a') notification_test_env.AppendUnique(LIBPATH = [lib_env.get('BUILD_DIR')]) notification_test_env.AppendUnique(LIBS = [ - 'connectivity_abstraction', 'oc', 'octbstack', 'oc_logger', 'coap', + 'connectivity_abstraction', 'oc', 'octbstack', 'oc_logger', 'coap', 'resource_directory', GTest_Main, GTest]) if target_os not in ['windows', 'winrt']: