X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=service%2Fnotification%2Fsrc%2Fcommon%2FNSUtil.c;h=8efb307da90527edb028325086f5500e6d608284;hb=7f00f942c39b7bc27c7eeecf213a239c3fe4173c;hp=b0e217d1d4f41e27ed86ea8c746c099718f404ed;hpb=d425a2e8c8d7de6add6597d10fdd635247ff8728;p=platform%2Fupstream%2Fiotivity.git diff --git a/service/notification/src/common/NSUtil.c b/service/notification/src/common/NSUtil.c index b0e217d..8efb307 100755 --- a/service/notification/src/common/NSUtil.c +++ b/service/notification/src/common/NSUtil.c @@ -29,13 +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); @@ -48,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) @@ -95,8 +94,9 @@ NSResult NSFreeMessage(NSMessage * obj) NSFreeMalloc(&(obj->title)); NSFreeMalloc(&(obj->contentText)); NSFreeMalloc(&(obj->sourceName)); + NSFreeMalloc(&(obj->topic)); NSFreeMediaContents(obj->mediaContents); - + OCRepPayloadDestroy(obj->extraInfo); OICFree(obj); return NS_OK; @@ -106,18 +106,19 @@ NSMessage * NSDuplicateMessage(NSMessage * copyMsg) { NSMessage * newMsg = NULL; - if(copyMsg == NULL) + if (copyMsg == NULL) { NS_LOG(ERROR, "Copy Msg is NULL"); return NULL; } newMsg = NSInitializeMessage(); + NS_VERIFY_NOT_NULL(newMsg, NULL); newMsg->messageId = copyMsg->messageId; OICStrcpy(newMsg->providerId, UUID_STRING_SIZE, copyMsg->providerId); - if(copyMsg->dateTime) + if (copyMsg->dateTime) { newMsg->dateTime = OICStrdup(copyMsg->dateTime); } @@ -144,6 +145,16 @@ NSMessage * NSDuplicateMessage(NSMessage * copyMsg) newMsg->mediaContents = NSDuplicateMediaContents(copyMsg->mediaContents); } + if (copyMsg->topic) + { + newMsg->topic = OICStrdup(copyMsg->topic); + } + + if (copyMsg->extraInfo) + { + newMsg->extraInfo = OCRepPayloadClone(copyMsg->extraInfo); + } + return newMsg; } @@ -163,7 +174,7 @@ NSSyncInfo* NSDuplicateSync(NSSyncInfo * copyMsg) { NSSyncInfo * newMsg = NULL; - if(copyMsg == NULL) + if (!copyMsg) { NS_LOG(ERROR, "Copy Msg is NULL"); return NULL; @@ -171,6 +182,12 @@ NSSyncInfo* NSDuplicateSync(NSSyncInfo * copyMsg) newMsg = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo)); + if (!newMsg) + { + NS_LOG(ERROR, "newMsg is NULL"); + return NULL; + } + newMsg->messageId = copyMsg->messageId; OICStrcpy(newMsg->providerId, UUID_STRING_SIZE, copyMsg->providerId); newMsg->state = copyMsg->state; @@ -197,13 +214,20 @@ 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)); + + if (!newMsg) + { + NS_LOG(ERROR, "newMsg is NULL"); + return NULL; + } + (newMsg->consumerId)[0] = '\0'; OICStrcpy(newMsg->consumerId, UUID_STRING_SIZE, copyMsg->consumerId); @@ -214,7 +238,7 @@ NSConsumer* NSDuplicateConsumer(NSConsumer * copyMsg) void NSDuplicateSetPropertyString(OCRepPayload** msgPayload, const char * name, const char * copyString) { - if(copyString) + if (copyString) { OCRepPayloadSetPropString(*msgPayload, name, copyString); } @@ -223,7 +247,7 @@ void NSDuplicateSetPropertyString(OCRepPayload** msgPayload, const char * name, void NSDuplicateSetPropertyInt(OCRepPayload** msgPayload, const char * name, int64_t value) { - if(value) + if (value) { OCRepPayloadSetPropInt(*msgPayload, name, value); } @@ -233,13 +257,15 @@ NSSyncInfo * NSGetSyncInfo(OCPayload * payload) { NS_LOG(DEBUG, "NSGetSyncInfo - IN"); char * providerId = NULL; - int64_t state; + int64_t state = 0; - if(!payload) + if (!payload) { return NULL; } + NSSyncInfo * retSync = (NSSyncInfo *)OICMalloc(sizeof(NSSyncInfo)); + if (!retSync) { return NULL; @@ -247,9 +273,10 @@ NSSyncInfo * NSGetSyncInfo(OCPayload * payload) retSync->messageId = 0; retSync->state = NS_SYNC_READ; - OCRepPayload * repPayload = (OCRepPayload *)payload; - if (!OCRepPayloadGetPropInt(repPayload, NS_ATTRIBUTE_MESSAGE_ID, (int64_t *)&retSync->messageId)) + + if (!OCRepPayloadGetPropInt(repPayload, NS_ATTRIBUTE_MESSAGE_ID, + (int64_t *)&retSync->messageId)) { OICFree(retSync); return NULL; @@ -271,8 +298,8 @@ NSSyncInfo * NSGetSyncInfo(OCPayload * payload) OICStrcpy(retSync->providerId, UUID_STRING_SIZE, providerId); OICFree(providerId); - NS_LOG_V(DEBUG, "Provider ID : %s", retSync->providerId); - NS_LOG_V(DEBUG, "Sync ID : %ld", retSync->messageId); + 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, "NSGetSyncInfo - OUT"); @@ -303,7 +330,7 @@ char * NSGetValueFromQuery(char *query, char * compareKey) NS_LOG_V(INFO, "NS Query Params = %s", query); - if(!query || query[0] == '\0' || !strlen(query)) + if (!query || query[0] == '\0' || !strlen(query)) { NS_LOG(ERROR, "query is null or \\0 or size is 0"); return NULL; @@ -343,7 +370,7 @@ char * NSGetValueFromQuery(char *query, char * compareKey) NSResult NSFreeMalloc(char ** obj) { - if(*obj) + if (*obj) { OICFree(*obj); *obj = NULL; @@ -355,14 +382,20 @@ NSResult NSFreeMalloc(char ** obj) NSMediaContents * NSDuplicateMediaContents(NSMediaContents * copyObj) { - if(!copyObj) + if (!copyObj) { return NULL; } NSMediaContents * newObj = (NSMediaContents *)OICMalloc(sizeof(NSMediaContents)); - if(copyObj->iconImage) + if (!newObj) + { + NS_LOG(ERROR, "contents newObj is NULL"); + return NULL; + } + + if (copyObj->iconImage) { newObj->iconImage = OICStrdup(copyObj->iconImage); } @@ -372,9 +405,9 @@ NSMediaContents * NSDuplicateMediaContents(NSMediaContents * copyObj) NSResult NSFreeMediaContents(NSMediaContents * obj) { - if(!obj) + if (!obj) { - return NS_OK; + return NS_FAIL; } NSFreeMalloc(&(obj->iconImage)); @@ -386,7 +419,15 @@ NSResult NSFreeMediaContents(NSMediaContents * obj) 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; @@ -395,6 +436,186 @@ NSMessage * NSInitializeMessage() 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; + } +} +