X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fnotification%2Fsrc%2Fcommon%2FNSUtil.c;h=8efb307da90527edb028325086f5500e6d608284;hb=7f00f942c39b7bc27c7eeecf213a239c3fe4173c;hp=a5eeea2134c118f429cd141eedbb9f4ad0a72cd4;hpb=036893394112e1512dbb3b23b8b2897745d47136;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/notification/src/common/NSUtil.c b/service/notification/src/common/NSUtil.c index a5eeea2..8efb307 100755 --- a/service/notification/src/common/NSUtil.c +++ b/service/notification/src/common/NSUtil.c @@ -29,14 +29,16 @@ OCEntityHandlerRequest *NSCopyOCEntityHandlerRequest(OCEntityHandlerRequest *ent if (copyOfRequest) { - // Do shallow copy memcpy(copyOfRequest, entityHandlerRequest, sizeof(OCEntityHandlerRequest)); + copyOfRequest->payload = NULL; + copyOfRequest->query = NULL; + copyOfRequest->numRcvdVendorSpecificHeaderOptions = 0; + copyOfRequest->rcvdVendorSpecificHeaderOptions = NULL; - - if (copyOfRequest->query) + if (entityHandlerRequest->query) { copyOfRequest->query = OICStrdup(entityHandlerRequest->query); - if(!copyOfRequest->query) + if (!copyOfRequest->query) { NS_LOG(ERROR, "Copy failed due to allocation failure"); OICFree(copyOfRequest); @@ -49,10 +51,6 @@ OCEntityHandlerRequest *NSCopyOCEntityHandlerRequest(OCEntityHandlerRequest *ent copyOfRequest->payload = (OCPayload *) (OCRepPayloadClone ((OCRepPayload*) entityHandlerRequest->payload)); } - - // Ignore vendor specific header options for example - copyOfRequest->numRcvdVendorSpecificHeaderOptions = 0; - copyOfRequest->rcvdVendorSpecificHeaderOptions = NULL; } if (copyOfRequest) @@ -65,7 +63,6 @@ OCEntityHandlerRequest *NSCopyOCEntityHandlerRequest(OCEntityHandlerRequest *ent } NS_LOG(DEBUG, "NSCopyOCEntityHandlerRequest - OUT"); - return copyOfRequest; } @@ -89,30 +86,17 @@ NSResult NSFreeMessage(NSMessage * obj) return NS_ERROR; } - if (obj->mId) - { - OICFree(obj->mId); - obj->mId = NULL; - } - - if (obj->mTitle) - { - OICFree(obj->mTitle); - obj->mTitle = NULL; - } - - if (obj->mContentText) - { - OICFree(obj->mContentText); - obj->mContentText = NULL; - } - - if (obj->mSource) - { - OICFree(obj->mSource); - obj->mSource = NULL; - } + obj->messageId = 0; + (obj->providerId)[0] = '\0'; + NSFreeMalloc(&(obj->dateTime)); + obj->ttl = 0; + NSFreeMalloc(&(obj->title)); + NSFreeMalloc(&(obj->contentText)); + NSFreeMalloc(&(obj->sourceName)); + NSFreeMalloc(&(obj->topic)); + NSFreeMediaContents(obj->mediaContents); + OCRepPayloadDestroy(obj->extraInfo); OICFree(obj); return NS_OK; @@ -122,59 +106,63 @@ NSMessage * NSDuplicateMessage(NSMessage * copyMsg) { NSMessage * newMsg = NULL; - if(copyMsg == NULL) + if (copyMsg == NULL) { NS_LOG(ERROR, "Copy Msg is NULL"); return NULL; } - newMsg = (NSMessage *)OICMalloc(sizeof(NSMessage)); - newMsg->mContentText = NULL; - newMsg->mId = NULL; - newMsg->mSource = NULL; - newMsg->mTitle = NULL; + newMsg = NSInitializeMessage(); + NS_VERIFY_NOT_NULL(newMsg, NULL); + + newMsg->messageId = copyMsg->messageId; + OICStrcpy(newMsg->providerId, UUID_STRING_SIZE, copyMsg->providerId); - if (copyMsg->mId) + if (copyMsg->dateTime) { - newMsg->mId = OICStrdup(copyMsg->mId); + newMsg->dateTime = OICStrdup(copyMsg->dateTime); } - if (copyMsg->mTitle) + newMsg->ttl = copyMsg->ttl; + + if (copyMsg->title) { - newMsg->mTitle = OICStrdup(copyMsg->mTitle); + newMsg->title = OICStrdup(copyMsg->title); } - if (copyMsg->mContentText) + if (copyMsg->contentText) { - newMsg->mContentText = OICStrdup(copyMsg->mContentText); + newMsg->contentText = OICStrdup(copyMsg->contentText); } - if (copyMsg->mSource) + if (copyMsg->sourceName) { - newMsg->mSource = OICStrdup(copyMsg->mSource); + newMsg->sourceName = OICStrdup(copyMsg->sourceName); } - return newMsg; -} + if (copyMsg->mediaContents) + { + newMsg->mediaContents = NSDuplicateMediaContents(copyMsg->mediaContents); + } -NSResult NSFreeSync(NSSync * obj) -{ - if (!obj) + if (copyMsg->topic) { - return NS_ERROR; + newMsg->topic = OICStrdup(copyMsg->topic); } - if (obj->mMessageId) + if (copyMsg->extraInfo) { - OICFree(obj->mMessageId); - obj->mMessageId = NULL; + newMsg->extraInfo = OCRepPayloadClone(copyMsg->extraInfo); } - if (obj->mSourceId) + return newMsg; +} + +NSResult NSFreeSync(NSSyncInfo * obj) +{ + if (!obj) { - NS_LOG_V(DEBUG, "obj->mSourceid = %s", obj->mSourceId); - OICFree(obj->mSourceId); - obj->mSourceId = NULL; + return NS_ERROR; } OICFree(obj); @@ -182,32 +170,27 @@ NSResult NSFreeSync(NSSync * obj) return NS_OK; } -NSSync* NSDuplicateSync(NSSync * copyMsg) +NSSyncInfo* NSDuplicateSync(NSSyncInfo * copyMsg) { - NSSync * newMsg = NULL; + NSSyncInfo * newMsg = NULL; - if(copyMsg == NULL) + if (!copyMsg) { NS_LOG(ERROR, "Copy Msg is NULL"); return NULL; } - newMsg = (NSSync *)OICMalloc(sizeof(NSSync)); - newMsg->mMessageId = NULL; - newMsg->mSourceId = NULL; - newMsg->mState = -1; + newMsg = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo)); - if (copyMsg->mMessageId) + if (!newMsg) { - newMsg->mMessageId = OICStrdup(copyMsg->mMessageId); - } - - if (copyMsg->mSourceId) - { - newMsg->mSourceId = OICStrdup(copyMsg->mSourceId); + NS_LOG(ERROR, "newMsg is NULL"); + return NULL; } - newMsg->mState = copyMsg->mState; + newMsg->messageId = copyMsg->messageId; + OICStrcpy(newMsg->providerId, UUID_STRING_SIZE, copyMsg->providerId); + newMsg->state = copyMsg->state; return newMsg; } @@ -219,19 +202,10 @@ NSResult NSFreeConsumer(NSConsumer * obj) return NS_ERROR; } - if (obj->mAddress) - { - OICFree(obj->mAddress); - obj->mAddress = NULL; - } - - if (obj->mDeviceId) - { - OICFree(obj->mDeviceId); - obj->mDeviceId = NULL; - } + (obj->consumerId)[0] = '\0'; OICFree(obj); + obj = NULL; return NS_OK; } @@ -240,25 +214,23 @@ NSConsumer* NSDuplicateConsumer(NSConsumer * copyMsg) { NSConsumer * newMsg = NULL; - if(copyMsg == NULL) + if (copyMsg == NULL) { NS_LOG(ERROR, "Copy Msg is NULL"); return NULL; } newMsg = (NSConsumer *)OICMalloc(sizeof(NSConsumer)); - newMsg->mAddress = NULL; - newMsg->mDeviceId = NULL; - if (copyMsg->mAddress) + if (!newMsg) { - newMsg->mAddress = OICStrdup(copyMsg->mAddress); + NS_LOG(ERROR, "newMsg is NULL"); + return NULL; } - if (copyMsg->mDeviceId) - { - newMsg->mDeviceId = OICStrdup(copyMsg->mDeviceId); - } + (newMsg->consumerId)[0] = '\0'; + + OICStrcpy(newMsg->consumerId, UUID_STRING_SIZE, copyMsg->consumerId); return newMsg; } @@ -266,59 +238,384 @@ NSConsumer* NSDuplicateConsumer(NSConsumer * copyMsg) void NSDuplicateSetPropertyString(OCRepPayload** msgPayload, const char * name, const char * copyString) { - if(copyString) + if (copyString) { OCRepPayloadSetPropString(*msgPayload, name, copyString); } - else +} + +void NSDuplicateSetPropertyInt(OCRepPayload** msgPayload, const char * name, + int64_t value) +{ + if (value) { - OCRepPayloadSetNull(*msgPayload, name); + OCRepPayloadSetPropInt(*msgPayload, name, value); } } - -NSSync * NSGetSyncInfo(OCPayload * payload) +NSSyncInfo * NSGetSyncInfo(OCPayload * payload) { - NS_LOG(DEBUG, "NSBuildOICNotificationSync - IN"); + NS_LOG(DEBUG, "NSGetSyncInfo - IN"); + char * providerId = NULL; + int64_t state = 0; - if(!payload) + if (!payload) { return NULL; } - NSSync * retSync = (NSSync *)OICMalloc(sizeof(NSSync)); + + NSSyncInfo * retSync = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo)); + if (!retSync) { return NULL; } - retSync->mMessageId = NULL; - retSync->mState = Notification_Read; - + retSync->messageId = 0; + retSync->state = NS_SYNC_READ; OCRepPayload * repPayload = (OCRepPayload *)payload; - if (!OCRepPayloadGetPropString(repPayload, NS_ATTRIBUTE_ID, &retSync->mMessageId)) + + if (!OCRepPayloadGetPropInt(repPayload, NS_ATTRIBUTE_MESSAGE_ID, + (int64_t *)&retSync->messageId)) { OICFree(retSync); return NULL; } - if (!OCRepPayloadGetPropString(repPayload, NS_ATTRIBUTE_SOURCE, &retSync->mSourceId)) + + if (!OCRepPayloadGetPropString(repPayload, NS_ATTRIBUTE_PROVIDER_ID, &providerId)) { OICFree(retSync); return NULL; } - int64_t state; - if (!OCRepPayloadGetPropInt(repPayload, NS_ATTRIBUTE_STATE, & state)) + + if (!OCRepPayloadGetPropInt(repPayload, NS_ATTRIBUTE_STATE, &state)) { - OICFree(retSync->mMessageId); OICFree(retSync); return NULL; } - retSync->mState = (NSSyncTypes) state; + retSync->state = (NSSyncType) state; + OICStrcpy(retSync->providerId, UUID_STRING_SIZE, providerId); + OICFree(providerId); - NS_LOG_V(DEBUG, "Sync ID : %s", retSync->mMessageId); - NS_LOG_V(DEBUG, "Sync State : %d", (int) retSync->mState); + NS_LOG_V(INFO_PRIVATE, "Provider ID : %s", retSync->providerId); + NS_LOG_V(DEBUG, "Sync ID : %lld", (long long int)retSync->messageId); + NS_LOG_V(DEBUG, "Sync State : %d", (int) retSync->state); - NS_LOG(DEBUG, "NSBuildOICNotificationSync - OUT"); + NS_LOG(DEBUG, "NSGetSyncInfo - OUT"); return retSync; } + +NSResult NSGenerateUUIDStr(char uuidStr[UUID_STRING_SIZE]) +{ + uint8_t uuid[UUID_SIZE] = { 0, }; + + if (RAND_UUID_OK == OCGenerateUuid(uuid)) + { + if (RAND_UUID_OK == OCConvertUuidToString(uuid, uuidStr)) + { + return NS_OK; + } + } + return NS_ERROR; +} + +char * NSGetValueFromQuery(char *query, char * compareKey) +{ + char *key = NULL; + char *value = NULL; + char *restOfQuery = NULL; + int numKeyValuePairsParsed = 0; + + NS_LOG_V(INFO, "NS Query Params = %s", query); + + if (!query || query[0] == '\0' || !strlen(query)) + { + NS_LOG(ERROR, "query is null or \\0 or size is 0"); + return NULL; + } + + char *keyValuePair = strtok_r (query, NS_QUERY_SEPARATOR, &restOfQuery); + + while(keyValuePair) + { + if (numKeyValuePairsParsed >= 2) + { + NS_LOG(ERROR, "More than 2 queries params in URI."); + return NULL; + } + + key = strtok_r(keyValuePair, NS_KEY_VALUE_DELIMITER, &value); + + if (!key || !value) + { + NS_LOG(ERROR, "More than 2 queries params in URI."); + return NULL; + } + + if (strcmp(key, compareKey) == 0) + { + NS_LOG_V(DEBUG, "found Key : [%s] - Value : [%s] = ", key, value); + return value; + } + + ++numKeyValuePairsParsed; + + keyValuePair = strtok_r(NULL, NS_QUERY_SEPARATOR, &restOfQuery); + } + + return NULL; +} + +NSResult NSFreeMalloc(char ** obj) +{ + if (*obj) + { + OICFree(*obj); + *obj = NULL; + return NS_OK; + } + + return NS_FAIL; +} + +NSMediaContents * NSDuplicateMediaContents(NSMediaContents * copyObj) +{ + if (!copyObj) + { + return NULL; + } + + NSMediaContents * newObj = (NSMediaContents *)OICMalloc(sizeof(NSMediaContents)); + + if (!newObj) + { + NS_LOG(ERROR, "contents newObj is NULL"); + return NULL; + } + + if (copyObj->iconImage) + { + newObj->iconImage = OICStrdup(copyObj->iconImage); + } + + return newObj; +} + +NSResult NSFreeMediaContents(NSMediaContents * obj) +{ + if (!obj) + { + return NS_FAIL; + } + + NSFreeMalloc(&(obj->iconImage)); + OICFree(obj); + + return NS_OK; +} + +NSMessage * NSInitializeMessage() +{ + NSMessage * msg = (NSMessage *)OICMalloc(sizeof(NSMessage)); + + if (!msg) + { + NS_LOG(ERROR, "Msg is NULL"); + return NULL; + } + + msg->messageId = OICGetCurrentTime(TIME_IN_MS); + msg->messageId = msg->messageId & 0x000000007FFFFFFF; + (msg->providerId)[0] = '\0'; + msg->type = 0; + msg->dateTime = NULL; + msg->ttl = 0; + msg->title = NULL; + msg->contentText = NULL; + msg->sourceName = NULL; + msg->mediaContents = NULL; + msg->topic = NULL; + msg->extraInfo = NULL; + + return msg; +} + +OCRepPayloadValue* NSPayloadFindValue(const OCRepPayload* payload, const char* name) +{ + if (!payload || !name) + { + return NULL; + } + + OCRepPayloadValue* val = payload->values; + + while (val) + { + if (0 == strcmp(val->name, name)) + { + return val; + } + val = val->next; + } + + return NULL; +} + +NSTopicList * NSInitializeTopicList() +{ + NSTopicList * topicList = (NSTopicList *)OICMalloc(sizeof(NSTopicList)); + + if (!topicList) + { + NS_LOG(ERROR, "topicList is NULL"); + return NULL; + } + + (topicList->consumerId)[0] = '\0'; + topicList->head = NULL; + topicList->tail = NULL; + + return topicList; +} + +OCDevAddr * NSChangeAddress(const char * inputaddress) +{ + NS_VERIFY_NOT_NULL(inputaddress, NULL); + + char * address = (char *)inputaddress; + char * schema = strstr(inputaddress, "//"); + if (schema) + { + address = schema + 2; + } + size_t prefixLen = schema - inputaddress; + if (prefixLen <= 0) + { + NS_LOG(ERROR, "Invalid Input address."); + return NULL; + } + + OCTransportFlags flags = OC_DEFAULT_FLAGS; + OCTransportAdapter adapter = OC_ADAPTER_IP; + if (strstr(inputaddress, "coap+tcp://")) + { + NS_LOG(DEBUG, "address : TCP"); + adapter = OC_ADAPTER_TCP; + } + else if (strstr(inputaddress, "coaps://")) + { + NS_LOG(DEBUG, "address : UDP + SECURED"); + flags |= OC_FLAG_SECURE; + } + else if (strstr(inputaddress, "coaps+tcp://")) + { + NS_LOG(DEBUG, "address : TCP + SECURED"); + flags |= OC_FLAG_SECURE; + adapter = OC_ADAPTER_TCP; + } + else if (strstr(inputaddress, "coap://")) + { + NS_LOG(DEBUG, "address : UDP"); + } + else + { + NS_LOG(ERROR, "Invalid CoAP Schema."); + return NULL; + } + + OCDevAddr * retAddr = NULL; + retAddr = (OCDevAddr *) OICMalloc(sizeof(OCDevAddr)); + NS_VERIFY_NOT_NULL(retAddr, NULL); + + char * start = address; + char * end = address; + if (address[0] == '[') + { + flags |= OC_IP_USE_V6; + end = strchr(++address, ']'); + if (!end || end <= start) + { + NS_LOG(ERROR, "Invalid Input Address - IPv6."); + NSOICFree(retAddr); + return NULL; + } + memset(retAddr->addr, 0, (size_t)MAX_ADDR_STR_SIZE); + OICStrcpy(retAddr->addr, (size_t)(end-start), address); + } + else + { + flags |= OC_IP_USE_V4; + end = strchr(address, ':'); + if (!end || end <= start) + { + NS_LOG(ERROR, "Invalid Input Address - IPv4."); + NSOICFree(retAddr); + return NULL; + } + char * end2 = strchr(end + 1, ':'); + if (end2) + { + NS_LOG(ERROR, "Invalid Input Address - IPv4."); + NSOICFree(retAddr); + return NULL; + } + memset(retAddr->addr, 0, (size_t)MAX_ADDR_STR_SIZE); + OICStrcpy(retAddr->addr, (size_t)(end-start)+1, address); + } + + retAddr->adapter = adapter; + retAddr->flags = flags; + + address = end + 1; + int tmp = 0; + if (flags & OC_IP_USE_V6) + { + address++; + } + uint16_t port = address[tmp++] - '0'; + + while(true) + { + if (address[tmp] == '\0' || address[tmp] > '9' || address[tmp] < '0') + { + break; + } + if (tmp >= 5 || (port >= 6553 && (address[tmp] -'0') >= 6)) + { + NS_LOG_V(ERROR, "Invalid Input Address - Port. %d", tmp+1); + NSOICFree(retAddr); + return NULL; + } + port *= 10; + port += address[tmp++] - '0'; + } + + retAddr->port = port; + + NS_LOG(DEBUG, "Change Address for TCP request"); + NS_LOG_V(INFO_PRIVATE, "Origin : %s", inputaddress); + NS_LOG_V(INFO_PRIVATE, "Changed Addr : %s", retAddr->addr); + NS_LOG_V(INFO_PRIVATE, "Changed Port : %d", retAddr->port); + + return retAddr; +} + +bool NSOCResultToSuccess(OCStackResult ret) +{ + switch (ret) + { + case OC_STACK_OK: + case OC_STACK_RESOURCE_CREATED: + case OC_STACK_RESOURCE_DELETED: + case OC_STACK_PRESENCE_STOPPED: + case OC_STACK_CONTINUE: + case OC_STACK_RESOURCE_CHANGED: + return true; + default: + NS_LOG_V(DEBUG, "OCStackResult : %d", (int)ret); + return false; + } +} +