Add check secure port info from EndPoints for Provisioning manager.
authorZiran Sun <ziran.sun@samsung.com>
Fri, 7 Apr 2017 15:09:52 +0000 (16:09 +0100)
committerZiran Sun <ziran.sun@samsung.com>
Wed, 12 Apr 2017 10:19:42 +0000 (10:19 +0000)
With OCF1.0 in place, secure and port are removed from policy schema.
These information are now available in EndPoints. Add support for this.
Otherwise provision discovery fails for format vnd_cbor.

Bug: https://jira.iotivity.org/browse/IOT-1987
Change-Id: I999aca98c6e7c5ba16dc1c63e7348c977daf8924
Signed-off-by: Ziran Sun <ziran.sun@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/18605
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
resource/csdk/security/provisioning/src/pmutility.c

index da4f1db..cadb51d 100644 (file)
@@ -753,6 +753,28 @@ static OCStackApplicationResult SecurePortDiscoveryHandler(void *ctx, OCDoHandle
             {
                 securePort = resPayload->port;
             }
+            else if (resPayload && resPayload->eps)
+            {
+                OCEndpointPayload* eps = resPayload->eps;
+                while (eps != NULL)
+                {
+                    if ((eps->family & OC_FLAG_SECURE) &&
+                        ((OC_IP_USE_V6 == clientResponse->devAddr.flags &&
+                          strchr(eps->addr, ':')) ||
+                         (OC_IP_USE_V4 == clientResponse->devAddr.flags &&
+                          strchr(eps->addr, ','))))
+                    {
+                            securePort = eps->port;
+                            break;
+                    }
+                    eps = eps->next;
+                }
+                if (!securePort)
+                {
+                    OIC_LOG(INFO, TAG, "Can not find secure port information.");
+                    return OC_STACK_DELETE_TRANSACTION;
+                }
+            }
             else
             {
                 OIC_LOG(INFO, TAG, "Can not find secure port information.");
@@ -763,8 +785,8 @@ static OCStackApplicationResult SecurePortDiscoveryHandler(void *ctx, OCDoHandle
 #endif
             DiscoveryInfo* pDInfo = (DiscoveryInfo*)ctx;
             OCProvisionDev_t *ptr = GetDevice(&pDInfo->pCandidateList,
-                                                         clientResponse->devAddr.addr,
-                                                         clientResponse->devAddr.port);
+                                              clientResponse->devAddr.addr,
+                                              clientResponse->devAddr.port);
             if(!ptr)
             {
                 OIC_LOG(ERROR, TAG, "Can not find device information in the discovery candidate device list");