+
+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;
+ }
+}
+