Update parse logic of introspectProvider result.
authorKIM JungYong <jyong2.kim@samsung.com>
Sun, 4 Sep 2016 04:49:44 +0000 (13:49 +0900)
committerUze Choi <uzchoi@samsung.com>
Tue, 6 Sep 2016 10:28:27 +0000 (10:28 +0000)
When received introspect provider result,
consumer service expect to get provider policy as type of boolean.
But, policy is integer type although provider side set boolean type.
So, parse logic of policy is updated to parse for given type by received payload.

Change-Id: I695e81179172376499345f9b1f6323a04325a015
Signed-off-by: KIM JungYong <jyong2.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/11359
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Hun-je Yeon <hunje.yeon@samsung.com>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
service/notification/src/consumer/NSConsumerDiscovery.c

index 1b212300b3c7a6dc5ba11a2a8a075dbdef5ba546..98951b34fc6a3774ac0e292f8264fdb9f6e14c59 100644 (file)
@@ -190,10 +190,17 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse)
     NS_LOG(DEBUG, "create NSProvider");
     NS_VERIFY_NOT_NULL(clientResponse->payload, NULL);
 
+    OCRepPayloadPropType accepterType = OCREP_PROP_BOOL;
+
     OCRepPayload * payload = (OCRepPayload *)clientResponse->payload;
     while (payload)
     {
         NS_LOG_V(DEBUG, "Payload Key : %s", payload->values->name);
+        NS_LOG_V(DEBUG, "Payload Type : %d", (int) payload->values->type);
+        if (!strcmp(payload->values->name, NS_ATTRIBUTE_POLICY))
+        {
+            accepterType = payload->values->type;
+        }
         payload = payload->next;
     }
 
@@ -203,11 +210,20 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse)
     char * messageUri = NULL;
     char * syncUri = NULL;
     char * topicUri = NULL;
-    int64_t accepter = 0;
+    bool bAccepter = 0;
+    int16_t iAccepter = 0;
     NSProviderConnectionInfo * connection = NULL;
 
     NS_LOG(DEBUG, "get information of accepter");
-    bool getResult = OCRepPayloadGetPropBool(payload, NS_ATTRIBUTE_POLICY, & accepter);
+    bool getResult = false;
+    if (accepterType == OCREP_PROP_BOOL)
+    {
+        getResult = OCRepPayloadGetPropBool(payload, NS_ATTRIBUTE_POLICY, & bAccepter);
+    }
+    else if (accepterType == OCREP_PROP_INT)
+    {
+        getResult = OCRepPayloadGetPropInt(payload, NS_ATTRIBUTE_POLICY, (int64_t*) & iAccepter);
+    }
     NS_VERIFY_NOT_NULL(getResult == true ? (void *) 1 : NULL, NULL);
 
     NS_LOG(DEBUG, "get provider ID");
@@ -246,7 +262,15 @@ NSProvider_internal * NSGetProvider(OCClientResponse * clientResponse)
     {
         newProvider->topicUri = topicUri;
     }
-    newProvider->accessPolicy = (NSSelector)accepter;
+    if (accepterType == OCREP_PROP_BOOL)
+    {
+        newProvider->accessPolicy = (NSSelector)bAccepter;
+    }
+    else if (accepterType == OCREP_PROP_INT)
+    {
+        newProvider->accessPolicy = (NSSelector)iAccepter;
+    }
+
     newProvider->connection = connection;
     newProvider->topicLL = NULL;
     newProvider->state = NS_DISCOVERED;