#define NS_SYNC_URI "/notification/sync"
-NSMessage * NSCreateMessage_internal(uint64_t msgId, const char * providerId);
NSSyncInfo * NSCreateSyncInfo_consumer(uint64_t msgId, const char * providerId, NSSyncType state);
-NSMessage * NSGetMessage(OCClientResponse * clientResponse);
NSSyncInfo * NSGetSyncInfoc(OCClientResponse * clientResponse);
NSTopicLL * NSGetTopicLL(OCClientResponse * clientResponse);
}
}
- NS_LOG_V(DEBUG, "subscribe to %s:%d", connections->addr->addr, connections->addr->port);
+ NS_LOG_V(INFO_PRIVATE, "subscribe to %s:%d", connections->addr->addr, connections->addr->port);
NS_LOG(DEBUG, "get subscribe message query");
char * query = NULL;
NS_VERIFY_STACK_SUCCESS(NSOCResultToSuccess(clientResponse->result), OC_STACK_KEEP_TRANSACTION);
NS_LOG(DEBUG, "build NSMessage");
- NSMessage * newNoti = NSGetMessage(clientResponse);
+ NSMessage * newNoti = NSGetMessage((OCRepPayload *) clientResponse->payload);
NS_VERIFY_NOT_NULL(newNoti, OC_STACK_KEEP_TRANSACTION);
NSTaskType type = TASK_CONSUMER_RECV_MESSAGE;
NSOICFree(addr);
}
-bool NSIsExtraValue(const char * name)
-{
- if (!strcmp(name, NS_ATTRIBUTE_MESSAGE_ID) ||
- !strcmp(name, NS_ATTRIBUTE_PROVIDER_ID) ||
- !strcmp(name, NS_ATTRIBUTE_TITLE) ||
- !strcmp(name, NS_ATTRIBUTE_TEXT) ||
- !strcmp(name, NS_ATTRIBUTE_SOURCE) ||
- !strcmp(name, NS_ATTRIBUTE_TOPIC_NAME) ||
- !strcmp(name, NS_ATTRIBUTE_TYPE) ||
- !strcmp(name, NS_ATTRIBUTE_DATETIME) ||
- !strcmp(name, NS_ATTRIBUTE_TTL) ||
- !strcmp(name, NS_ATTRIBUTE_ICON_IMAGE))
- {
- return false;
- }
-
- return true;
-}
-
-void NSCopyPayloadValueArray(OCRepPayloadValue* dest, OCRepPayloadValue* source)
-{
- NS_VERIFY_NOT_NULL_V(source);
-
- size_t dimTotal = calcDimTotal(source->arr.dimensions);
- switch(source->arr.type)
- {
- case OCREP_PROP_INT:
- dest->arr.iArray = (int64_t*)OICMalloc(dimTotal * sizeof(int64_t));
- NS_VERIFY_NOT_NULL_V(dest->arr.iArray);
- memcpy(dest->arr.iArray, source->arr.iArray, dimTotal * sizeof(int64_t));
- break;
- case OCREP_PROP_DOUBLE:
- dest->arr.dArray = (double*)OICMalloc(dimTotal * sizeof(double));
- NS_VERIFY_NOT_NULL_V(dest->arr.dArray);
- memcpy(dest->arr.dArray, source->arr.dArray, dimTotal * sizeof(double));
- break;
- case OCREP_PROP_BOOL:
- dest->arr.bArray = (bool*)OICMalloc(dimTotal * sizeof(bool));
- NS_VERIFY_NOT_NULL_V(dest->arr.bArray);
- memcpy(dest->arr.bArray, source->arr.bArray, dimTotal * sizeof(bool));
- break;
- case OCREP_PROP_STRING:
- dest->arr.strArray = (char**)OICMalloc(dimTotal * sizeof(char*));
- NS_VERIFY_NOT_NULL_V(dest->arr.strArray);
- for(size_t i = 0; i < dimTotal; ++i)
- {
- dest->arr.strArray[i] = OICStrdup(source->arr.strArray[i]);
- }
- break;
- case OCREP_PROP_OBJECT:
- dest->arr.objArray = (OCRepPayload**)OICMalloc(dimTotal * sizeof(OCRepPayload*));
- NS_VERIFY_NOT_NULL_V(dest->arr.objArray);
- for(size_t i = 0; i < dimTotal; ++i)
- {
- dest->arr.objArray[i] = OCRepPayloadClone(source->arr.objArray[i]);
- }
- break;
- case OCREP_PROP_ARRAY:
- dest->arr.objArray = (OCRepPayload**)OICMalloc(dimTotal * sizeof(OCRepPayload*));
- NS_VERIFY_NOT_NULL_V(dest->arr.objArray);
- for(size_t i = 0; i < dimTotal; ++i)
- {
- dest->arr.objArray[i] = OCRepPayloadClone(source->arr.objArray[i]);
- }
- break;
- case OCREP_PROP_BYTE_STRING:
- dest->arr.ocByteStrArray = (OCByteString*)OICMalloc(dimTotal * sizeof(OCByteString));
- NS_VERIFY_NOT_NULL_V(dest->arr.ocByteStrArray);
- for (size_t i = 0; i < dimTotal; ++i)
- {
- OCByteStringCopy(&dest->arr.ocByteStrArray[i], &source->arr.ocByteStrArray[i]);
- NS_VERIFY_NOT_NULL_V(dest->arr.ocByteStrArray[i].bytes);
- }
- break;
- default:
- break;
- }
-}
-
-OCRepPayloadValue * NSCopyPayloadValue(OCRepPayloadValue * value)
-{
- OCRepPayloadValue * retValue = (OCRepPayloadValue *)OICMalloc(sizeof(OCRepPayloadValue));
- NS_VERIFY_NOT_NULL(retValue, NULL);
-
- * retValue = * value;
- retValue->next = NULL;
- retValue->name = OICStrdup(value->name);
-
- switch(value->type)
- {
- case OCREP_PROP_STRING:
- retValue->str = OICStrdup(value->str);
- break;
- case OCREP_PROP_BYTE_STRING:
- retValue->ocByteStr.bytes = (uint8_t * )OICMalloc(value->ocByteStr.len * sizeof(uint8_t));
- NS_VERIFY_NOT_NULL(retValue->ocByteStr.bytes, NULL);
- retValue->ocByteStr.len = value->ocByteStr.len;
- memcpy(retValue->ocByteStr.bytes, value->ocByteStr.bytes, retValue->ocByteStr.len);
- break;
- case OCREP_PROP_OBJECT:
- retValue->obj = OCRepPayloadClone(value->obj);
- break;
- case OCREP_PROP_ARRAY:
- NSCopyPayloadValueArray(retValue, value);
- break;
- default:
- break;
- }
-
- return retValue;
-}
-
-OCRepPayload * NSGetExtraInfo(OCRepPayload * payload)
-{
- NS_LOG(DEBUG, "get extra info");
- OCRepPayload * extraInfo = OCRepPayloadCreate();
- OCRepPayload * origin = OCRepPayloadClone(payload);
-
- bool isFirstExtra = true;
- OCRepPayloadValue * headValue = NULL;
- OCRepPayloadValue * curValue = NULL;
- OCRepPayloadValue * value = origin->values;
- while(value)
- {
- if (NSIsExtraValue(value->name))
- {
- curValue = NSCopyPayloadValue(value);
- NS_LOG_V(DEBUG, " key : %s", curValue->name);
- if (isFirstExtra)
- {
- headValue = curValue;
- extraInfo->values = headValue;
- isFirstExtra = false;
- }
- else
- {
- headValue->next = curValue;
- headValue = curValue;
- }
- curValue = NULL;
- }
- value = value->next;
- }
- OCRepPayloadDestroy(origin);
-
-
- if (!isFirstExtra && extraInfo->values)
- {
- return extraInfo;
- }
- else
- {
- OCRepPayloadDestroy(extraInfo);
- return NULL;
- }
-}
-
-NSMessage * NSGetMessage(OCClientResponse * clientResponse)
-{
- NS_VERIFY_NOT_NULL(clientResponse->payload, NULL);
- OCRepPayload * payload = (OCRepPayload *)clientResponse->payload;
-
- NS_LOG(DEBUG, "get msg id");
- uint64_t id = NULL;
- bool getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, (int64_t *)&id);
- NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL);
-
- NS_LOG(DEBUG, "get provider id");
- char * pId = NULL;
- getResult = OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_PROVIDER_ID, &pId);
- NS_LOG_V (DEBUG, "provider id: %s", pId);
- NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL);
-
- NS_LOG(DEBUG, "create NSMessage");
- NSMessage * retMsg = NSCreateMessage_internal(id, pId);
- NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(retMsg, NULL, NSOICFree(pId));
- NSOICFree(pId);
-
- NS_LOG(DEBUG, "get msg optional field");
- OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_TITLE, &retMsg->title);
- OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_TEXT, &retMsg->contentText);
- OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_SOURCE, &retMsg->sourceName);
- OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_TOPIC_NAME, &retMsg->topic);
-
- OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_TYPE, (int64_t *)&retMsg->type);
- OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_DATETIME, &retMsg->dateTime);
- OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_TTL, (int64_t *)&retMsg->ttl);
-
- char * icon = NULL;
- OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_ICON_IMAGE, &icon);
-
- if (icon && strlen(icon))
- {
- NSMediaContents * contents = (NSMediaContents *)OICMalloc(sizeof(NSMediaContents));
- if (contents)
- {
- contents->iconImage = icon;
- retMsg->mediaContents = contents;
- }
- else
- {
- NSOICFree(icon);
- }
- }
-
- retMsg->extraInfo = NSGetExtraInfo(payload);
-
- NS_LOG_V(DEBUG, "Msg ID : %lld", (long long int)retMsg->messageId);
- NS_LOG_V(DEBUG, "Msg Title : %s", retMsg->title);
- NS_LOG_V(DEBUG, "Msg Content : %s", retMsg->contentText);
- NS_LOG_V(DEBUG, "Msg Source : %s", retMsg->sourceName);
- NS_LOG_V(DEBUG, "Msg Topic : %s", retMsg->topic);
- NS_LOG_V(DEBUG, "Msg Type : %d", retMsg->type);
- NS_LOG_V(DEBUG, "Msg Date : %s", retMsg->dateTime);
- NS_LOG_V(DEBUG, "Msg ttl : %lld", (long long int)retMsg->ttl);
-
- return retMsg;
-}
-
NSSyncInfo * NSGetSyncInfoc(OCClientResponse * clientResponse)
{
NS_VERIFY_NOT_NULL(clientResponse->payload, NULL);
OCRepPayload * payload = (OCRepPayload *)clientResponse->payload;
NS_LOG(DEBUG, "get msg id");
- uint64_t id = NULL;
+ uint64_t id = 0;
bool getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_MESSAGE_ID, (int64_t *)&id);
NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL);
NS_LOG(DEBUG, "get state");
int64_t state = 0;
getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_STATE, & state);
- NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(getResult == true ? (void *) 1 : NULL,
+ NULL, NSOICFree(pId));
NS_LOG(DEBUG, "create NSSyncInfo");
NSSyncInfo * retSync = NSCreateSyncInfo_consumer(id, pId, (NSSyncType)state);
+ NSOICFree(pId);
NS_VERIFY_NOT_NULL(retSync, NULL);
NS_LOG_V(DEBUG, "Sync ID : %lld", (long long int)retSync->messageId);
NS_LOG_V(DEBUG, "Sync State : %d", (int) retSync->state);
- NS_LOG_V(DEBUG, "Sync Provider ID : %s", retSync->providerId);
+ NS_LOG_V(INFO_PRIVATE, "Sync Provider ID : %s", retSync->providerId);
return retSync;
}
-NSMessage * NSCreateMessage_internal(uint64_t id, const char * providerId)
-{
- NSMessage * retMsg = (NSMessage *)OICMalloc(sizeof(NSMessage));
- NS_VERIFY_NOT_NULL(retMsg, NULL);
-
- retMsg->messageId = id;
- OICStrcpy(retMsg->providerId, sizeof(char) * NS_DEVICE_ID_LENGTH, providerId);
- retMsg->title = NULL;
- retMsg->contentText = NULL;
- retMsg->sourceName = NULL;
- retMsg->topic = NULL;
- retMsg->type = NS_MESSAGE_INFO;
- retMsg->dateTime = NULL;
- retMsg->ttl = 0;
- retMsg->mediaContents = NULL;
- retMsg->extraInfo = NULL;
-
- return retMsg;
-}
-
NSSyncInfo * NSCreateSyncInfo_consumer(uint64_t msgId, const char * providerId, NSSyncType state)
{
NS_VERIFY_NOT_NULL(providerId, NULL);
char * NSGetCloudUri(const char * providerId, char * uri)
{
- size_t uriLen = NS_DEVICE_ID_LENGTH + 1 + strlen(uri) + 1 + 3;
+ size_t uriLen = NS_DEVICE_ID_LENGTH + 1 + strlen(uri) + 1 + 10;
char * retUri = (char *)OICMalloc(uriLen);
NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(retUri, NULL, NSOICFree(uri));
- snprintf(retUri, uriLen, "/di/%s%s", providerId, uri);
+ snprintf(retUri, uriLen, "/oic/route/%s%s", providerId, uri);
NSOICFree(uri);
NS_LOG_V(DEBUG, "Cloud uri : %s", retUri);
NS_VERIFY_NOT_NULL_V(task->taskData);
NS_LOG(DEBUG, "Request Subscribe");
NSResult ret = NSConsumerSubscribeProvider((NSProvider *)task->taskData);
+ NSRemoveProvider_internal((void *) task->taskData);
NS_VERIFY_NOT_NULL_V(ret == NS_OK ? (void *)1 : NULL);
}
else if (task->taskType == TASK_SEND_SYNCINFO)
{
- NS_VERIFY_NOT_NULL_V(task->taskData);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(task->taskData, NSOICFree(task));
NSSyncInfo_internal * syncInfo = (NSSyncInfo_internal *)task->taskData;
NSProviderConnectionInfo * info = syncInfo->connection;
else if (task->taskType == TASK_CONSUMER_REQ_SUBSCRIBE_CANCEL)
{
NSProvider_internal * provider = (NSProvider_internal *)task->taskData;
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(provider,
+ {
+ NSRemoveProvider_internal(provider);
+ NSOICFree(task);
+ });
NSProviderConnectionInfo * connections = provider->connection;
while(connections)
{
if (connections->isSubscribing == false)
{
- NS_LOG_V(DEBUG, "unsubscribed to %s:%d",
+ NS_LOG_V(INFO_PRIVATE, "unsubscribed to %s:%d",
connections->addr->addr, connections->addr->port);
connections = connections->next;
continue;
}
- NS_LOG_V(DEBUG, "cancel subscribe to %s:%d",
+ NS_LOG_V(INFO_PRIVATE, "cancel subscribe to %s:%d",
connections->addr->addr, connections->addr->port);
OCCancel(connections->messageHandle, NS_QOS, NULL, 0);
OCCancel(connections->syncHandle, NS_QOS, NULL, 0);
else if (task->taskType == TASK_CONSUMER_REQ_TOPIC_LIST)
{
NSProvider_internal * provider = NSCopyProvider_internal(task->taskData);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(provider,
+ {
+ NSRemoveProvider_internal((void *) task->taskData);
+ NSOICFree(task);
+ });
NSRemoveProvider_internal((NSProvider_internal *)task->taskData);
NSProviderConnectionInfo * connections = provider->connection;
- NS_VERIFY_NOT_NULL_V(connections);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(connections,
+ {
+ NSRemoveProvider_internal((void *) provider);
+ NSOICFree(task);
+ });
char * topicUri = OICStrdup(provider->topicUri);
- NS_VERIFY_NOT_NULL_V(topicUri);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(topicUri,
+ {
+ NSRemoveProvider_internal((void *) provider);
+ NSOICFree(task);
+ });
OCConnectivityType type = CT_DEFAULT;
if (connections->addr->adapter == OC_ADAPTER_TCP)
NS_LOG(DEBUG, "get topic query");
char * query = NSMakeRequestUriWithConsumerId(topicUri);
-
- NS_VERIFY_NOT_NULL_V(query);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(query,
+ {
+ NSRemoveProvider_internal((void *) provider);
+ NSOICFree(task);
+ });
NS_LOG_V(DEBUG, "topic query : %s", query);
OCStackResult ret = NSInvokeRequest(NULL, OC_REST_GET, connections->addr,
query, NULL, NSIntrospectTopic, (void *) provider,
NSRemoveProvider_internal, type);
- NS_VERIFY_STACK_SUCCESS_V(NSOCResultToSuccess(ret));
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(NSOCResultToSuccess(ret) == true ? (void *) 1 : NULL,
+ {
+ NSRemoveProvider_internal((void *) provider);
+ NSOICFree(task);
+ });
NSOICFree(query);
NSOICFree(topicUri);
else if (task->taskType == TASK_CONSUMER_SELECT_TOPIC_LIST)
{
NSProvider_internal * provider = (NSProvider_internal *)task->taskData;
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(provider,
+ {
+ NSRemoveProvider_internal(provider);
+ NSOICFree(task);
+ });
NSProviderConnectionInfo * connections = provider->connection;
- NS_VERIFY_NOT_NULL_V(connections);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(connections,
+ {
+ NSRemoveProvider_internal(provider);
+ NSOICFree(task);
+ });
OCRepPayload * payload = OCRepPayloadCreate();
- NS_VERIFY_NOT_NULL_V(payload);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(payload,
+ {
+ NSRemoveProvider_internal(provider);
+ NSOICFree(task);
+ });
NSTopicLL * topicLL = provider->topicLL;
NSTopicLL * iter = topicLL;
}
OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, *NSGetConsumerId());
- NS_LOG_V(DEBUG, "NS_ATTRIBUTE_CONSUMER_ID: %s", *NSGetConsumerId());
+ NS_LOG_V(INFO_PRIVATE, "NS_ATTRIBUTE_CONSUMER_ID: %s", *NSGetConsumerId());
iter = topicLL;
int iterSize = 0;
if (topicLLSize > 0)
{
topicPayload = (OCRepPayload **) OICMalloc(sizeof(OCRepPayload *)*topicLLSize);
- NS_VERIFY_NOT_NULL_V(topicPayload);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(topicPayload,
+ {
+ OCRepPayloadDestroy(payload);
+ NSRemoveProvider_internal(provider);
+ NSOICFree(task);
+ });
while (iter || iterSize < topicLLSize)
{
}
char * topicUri = OICStrdup(provider->topicUri);
- NS_VERIFY_NOT_NULL_V(topicUri);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(topicUri,
+ {
+ OCRepPayloadDestroy(payload);
+ NSRemoveProvider_internal(provider);
+ NSOICFree(task);
+ });
OCConnectivityType type = CT_DEFAULT;
if (connections->addr->adapter == OC_ADAPTER_TCP)
NS_LOG(DEBUG, "get topic query");
char * query = NULL;
query = NSMakeRequestUriWithConsumerId(topicUri);
- NS_VERIFY_NOT_NULL_V(query);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(query,
+ {
+ NSOICFree(topicUri);
+ OCRepPayloadDestroy(payload);
+ NSRemoveProvider_internal(provider);
+ NSOICFree(task);
+ });
NS_LOG_V(DEBUG, "topic query : %s", query);
OCStackResult ret = NSInvokeRequest(NULL, OC_REST_POST, connections->addr,
query, (OCPayload*)payload, NSConsumerCheckPostResult,
NULL, NULL, type);
- NS_VERIFY_STACK_SUCCESS_V(NSOCResultToSuccess(ret));
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING_V(
+ NSOCResultToSuccess(ret) == true ? (void *) 1 : NULL,
+ {
+ NSOICFree(query);
+ NSOICFree(topicUri);
+ NSRemoveProvider_internal(provider);
+ NSOICFree(task);
+ });
NSRemoveProvider_internal(provider);
NSOICFree(query);
NS_VERIFY_NOT_NULL(clientResponse, OC_STACK_KEEP_TRANSACTION);
NS_VERIFY_STACK_SUCCESS(NSOCResultToSuccess(clientResponse->result),
- OC_STACK_KEEP_TRANSACTION);
+ OC_STACK_KEEP_TRANSACTION)
- NS_LOG_V(DEBUG, "GET response income : %s:%d",
+ NS_LOG_V(INFO_PRIVATE, "GET response income : %s:%d",
clientResponse->devAddr.addr, clientResponse->devAddr.port);
NS_LOG_V(DEBUG, "GET response result : %d",
clientResponse->result);
NSTopicLL * newTopicLL = NSGetTopicLL(clientResponse);
NSProvider_internal * provider = NSCopyProvider_internal((NSProvider_internal *) ctx);
+ NS_VERIFY_NOT_NULL(provider, OC_STACK_KEEP_TRANSACTION);
+ NSRemoveTopicLL(provider->topicLL);
provider->topicLL = NSCopyTopicLL(newTopicLL);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(provider->topicLL, OC_STACK_KEEP_TRANSACTION,
+ NSRemoveProvider_internal((void *) provider));
NS_LOG(DEBUG, "build NSTask");
NSTask * task = NSMakeTask(TASK_CONSUMER_RECV_TOPIC_LIST, (void *) provider);