Bug about parsing queryparam is fixed
authorjaesick.shin <jaesick.shin@samsung.com>
Fri, 17 Jun 2016 05:30:33 +0000 (14:30 +0900)
committerUze Choi <uzchoi@samsung.com>
Fri, 17 Jun 2016 09:27:52 +0000 (09:27 +0000)
notification service is using queryparam.
RI does not support parsing queryparam without interface and uri.
so, i already added function getValueFromquery.
this function is copy of RI Function(ExtractFiltersFromQuery) and then modified.
but, strtok_r function disappear tokenized string after performing from original string.
then, I duplicate string when the getValueFromQuery function is called.

Change-Id: I9c4b5a8d8e5e8dac8f65a9f5b875a0a7e1b7d723
Signed-off-by: jaesick.shin <jaesick.shin@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/8743
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Tested-by: Uze Choi <uzchoi@samsung.com>
service/notification/src/common/NSUtil.c
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderNotification.c
service/notification/src/provider/NSProviderSubscription.c

index 41f7feb..b0e217d 100755 (executable)
@@ -296,20 +296,19 @@ NSResult NSGenerateUUIDStr(char uuidStr[UUID_STRING_SIZE])
 
 char * NSGetValueFromQuery(char *query, char * compareKey)
 {
-
     char *key = NULL;
     char *value = NULL;
     char *restOfQuery = NULL;
     int numKeyValuePairsParsed = 0;
 
-    if(!query || query[0] != '\0' || !strlen(query))
+    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;
     }
 
-    NS_LOG_V(INFO, "NS Query Params = %s", query);
-
     char *keyValuePair = strtok_r (query, NS_QUERY_SEPARATOR, &restOfQuery);
 
     while(keyValuePair)
index 272cbed..53fc193 100644 (file)
@@ -205,13 +205,12 @@ NSResult NSAccept(NSConsumer *consumer, bool accepted)
 NSMessage * NSCreateMessage()\r
 {\r
     NS_LOG(DEBUG, "NSCreateMessage - IN");\r
-\r
     pthread_mutex_lock(&nsInitMutex);\r
+\r
     NSMessage * msg = NSInitializeMessage();\r
-    msg->messageId = OICGetCurrentTime(TIME_IN_MS);\r
     OICStrcpy(msg->providerId, UUID_STRING_SIZE, NSGetProviderInfo()->providerId);\r
-    pthread_mutex_unlock(&nsInitMutex);\r
 \r
+    pthread_mutex_unlock(&nsInitMutex);\r
     NS_LOG(DEBUG, "NSCreateMessage - OUT");\r
     return msg;\r
 }\r
@@ -242,18 +241,15 @@ void * NSInterfaceSchedule(void * ptr)
                     OCEntityHandlerRequest * request = (OCEntityHandlerRequest*)node->taskData;\r
                     NSConsumer * consumer = (NSConsumer *)OICMalloc(sizeof(NSConsumer));\r
 \r
-                    char * consumerId = NSGetValueFromQuery(request->query, NS_QUERY_CONSUMER_ID);\r
-                    if(!consumerId)\r
+                    char * consumerId = NSGetValueFromQuery(OICStrdup(request->query),\r
+                            NS_QUERY_CONSUMER_ID);\r
+\r
+                    if(consumerId)\r
                     {\r
-                        NSFreeConsumer(consumer);\r
-                        NS_LOG(ERROR, "Consumer ID NULL");\r
-                        break;\r
+                        OICStrcpy(consumer->consumerId, UUID_STRING_SIZE, consumerId);\r
+                        NSSubscribeRequestCb(consumer);\r
                     }\r
 \r
-                    OICStrcpy(consumer->consumerId, UUID_STRING_SIZE, consumerId);\r
-                    OICFree(consumerId);\r
-\r
-                    NSSubscribeRequestCb(consumer);\r
                     NSFreeConsumer(consumer);\r
                     NSFreeOCEntityHandlerRequest(request);\r
 \r
index 0c003b7..b3fd1f8 100644 (file)
@@ -45,9 +45,9 @@ NSResult NSSetMessagePayload(NSMessage *msg, OCRepPayload** msgPayload)
 
     OCRepPayloadSetUri(*msgPayload, NS_COLLECTION_MESSAGE_URI);
     OCRepPayloadSetPropInt(*msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->messageId);
-    OCRepPayloadSetPropString(*msgPayload, NS_ATTRIBUTE_TITLE, msg->providerId);
+    OCRepPayloadSetPropString(*msgPayload, NS_ATTRIBUTE_PROVIDER_ID, msg->providerId);
 
-    NSDuplicateSetPropertyInt(msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->type);
+    NSDuplicateSetPropertyInt(msgPayload, NS_ATTRIBUTE_TYPE, msg->type);
     NSDuplicateSetPropertyInt(msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->ttl);
     NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_DATETIME, msg->dateTime);
     NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_TITLE, msg->title);
index d2f7f9b..35175e7 100644 (file)
@@ -111,7 +111,7 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
 {\r
     NS_LOG(DEBUG, "NSHandleSubscription - IN");\r
 \r
-    char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
+    char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID);\r
 \r
     if(!id)\r
     {\r
@@ -120,14 +120,14 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
         return;\r
     }\r
 \r
+    NS_LOG_V(DEBUG, "consumerId = %s", id);\r
     if (resourceType == NS_RESOURCE_MESSAGE)\r
     {\r
         NS_LOG(DEBUG, "resourceType == NS_RESOURCE_MESSAGE");\r
         NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
         NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
 \r
-        OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
-        OICFree(id);\r
+        subData->id = id;\r
 \r
         subData->isWhite = false;\r
         subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
@@ -161,8 +161,7 @@ void NSHandleSubscription(OCEntityHandlerRequest *entityHandlerRequest, NSResour
         NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
         NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
 \r
-        OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
-        OICFree(id);\r
+        subData->id = id;\r
 \r
         subData->isWhite = false;\r
         subData->syncObId = entityHandlerRequest->obsInfo.obsId;\r
@@ -189,7 +188,7 @@ void NSHandleUnsubscription(OCEntityHandlerRequest *entityHandlerRequest)
 {\r
     NS_LOG(DEBUG, "NSHandleUnsubscription - IN");\r
 \r
-    char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
+    char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID);\r
 \r
     if(!id)\r
     {\r
@@ -200,7 +199,7 @@ void NSHandleUnsubscription(OCEntityHandlerRequest *entityHandlerRequest)
 \r
     NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
     NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
-    OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
+    subData->id = id;\r
     subData->isWhite = false;\r
     subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
 \r
@@ -217,7 +216,6 @@ void NSHandleUnsubscription(OCEntityHandlerRequest *entityHandlerRequest)
 \r
     NS_LOG(DEBUG, "NSHandleUnsubscription - IN");\r
 \r
-    OICFree(id);\r
     NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
 }\r
 \r
@@ -285,7 +283,7 @@ NSResult NSSendSubscriptionResponse(OCEntityHandlerRequest *entityHandlerRequest
         return OC_EH_ERROR;\r
     }\r
 \r
-    char * id = NSGetValueFromQuery(entityHandlerRequest->query, NS_QUERY_CONSUMER_ID);\r
+    char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID);\r
 \r
     if(!id)\r
     {\r
@@ -300,8 +298,8 @@ NSResult NSSendSubscriptionResponse(OCEntityHandlerRequest *entityHandlerRequest
         NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
         NSCacheSubData * subData = (NSCacheSubData *) OICMalloc(sizeof(NSCacheSubData));\r
 \r
-        OICStrcpy(subData->id, UUID_STRING_SIZE, id);\r
-        OICFree(id);\r
+        subData->id = id;\r
+\r
         subData->isWhite = true;\r
         subData->messageObId = entityHandlerRequest->obsInfo.obsId;\r
 \r
@@ -316,7 +314,6 @@ NSResult NSSendSubscriptionResponse(OCEntityHandlerRequest *entityHandlerRequest
 \r
     NSSendResponse(id, accepted);\r
 \r
-    OICFree(id);\r
     NSFreeOCEntityHandlerRequest(entityHandlerRequest);\r
 \r
     NS_LOG(DEBUG, "NSSendSubscriptionResponse - OUT");\r