[IOT-1513] One more incorrect URI construction
authorDave Thaler <dthaler@microsoft.com>
Tue, 22 Nov 2016 00:49:57 +0000 (16:49 -0800)
committerDan Mihai <Daniel.Mihai@microsoft.com>
Wed, 23 Nov 2016 00:54:10 +0000 (00:54 +0000)
Change-Id: I3ea6f8cc55935ea3f30f30320386d7c430ee1b77
Signed-off-by: Dave Thaler <dthaler@microsoft.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/14589
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com>
Reviewed-by: Dan Mihai <Daniel.Mihai@microsoft.com>
resource/src/OCRepresentation.cpp
resource/unittests/OCRepresentationTest.cpp

index e891116..09daf43 100644 (file)
@@ -35,6 +35,7 @@
 #include "ocrandom.h"
 #include "oic_malloc.h"
 #include "oic_string.h"
+#include "ocstack.h"
 
 namespace OC
 {
@@ -737,7 +738,16 @@ namespace OC
         }
         if (m_devAddr.flags & OC_IP_USE_V6)
         {
-            ss << '[' << m_devAddr.addr << ']';
+            char addressEncoded[128] = {0};
+
+            OCStackResult result = OCEncodeAddressForRFC6874(addressEncoded,
+                                                             sizeof(addressEncoded),
+                                                             m_devAddr.addr);
+            if (OC_STACK_OK != result)
+            {
+                throw OC::OCException("Invalid address in setDevAddr");
+            }
+            ss << '[' << addressEncoded << ']';
         }
         else
         {
index eb4ac87..d39ae95 100644 (file)
@@ -1444,4 +1444,28 @@ namespace OCRepresentationTest
             }
         }
     }
+
+    TEST(OCRepresentationHostTest, ValidHost)
+    {
+        OCDevAddr addr = {OC_DEFAULT_ADAPTER, OC_IP_USE_V6};
+        addr.port = 5000;
+        strcpy(addr.addr, "fe80::1%eth0");
+
+        OCRepresentation rep;
+        rep.setDevAddr(addr);
+        std::string host = rep.getHost();
+        std::string expected = "coap://[fe80::1%25eth0]:5000";
+        EXPECT_EQ(host, expected);
+    }
+
+    TEST(OCRepresentationHostTest, InvalidHost)
+    {
+        OCDevAddr addr = {OC_DEFAULT_ADAPTER, OC_IP_USE_V6};
+        addr.port = 5000;
+        strcpy(addr.addr, "fe80::1%%");
+
+        OCRepresentation rep;
+        EXPECT_ANY_THROW(rep.setDevAddr(addr));
+    }
+
 }