replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / resource / include / OCSerialization.h
index 693f546..e440ab0 100644 (file)
@@ -42,62 +42,74 @@ namespace OC
         public:
             ListenOCContainer(std::weak_ptr<IClientWrapper> cw,
                     OCDevAddr& devAddr, OCDiscoveryPayload* payload)
-                    : m_clientWrapper(cw), m_devAddr(devAddr)
             {
+                OCDevAddr currentDevAddr = devAddr;
+
                 while (payload)
                 {
+                    std::string deviceName;
+                    if (payload->name)
+                    {
+                        deviceName = payload->name;
+                    }
+
                     OCResourcePayload* res = payload->resources;
                     while (res)
                     {
-                        if (res->secure)
-                        {
-                            m_devAddr.flags =
-                                  (OCTransportFlags)(OC_FLAG_SECURE | m_devAddr.flags);
-                        }
 
-                        if (res->port != 0)
-                        {
-                            m_devAddr.port = res->port;
-                        }
+                        currentDevAddr.flags = res->secure ?
+                                (OCTransportFlags)(OC_FLAG_SECURE | devAddr.flags) :
+                                devAddr.flags;
+
+                        currentDevAddr.port = (res->port != 0) ? res->port : devAddr.port;
 
                         if (payload->baseURI)
                         {
-                            OCDevAddr rdPubAddr = m_devAddr;
-                            OICStrcpy(rdPubAddr.addr, sizeof(rdPubAddr.addr), payload->baseURI);
-                            rdPubAddr.port = res->port;
+                            OCDevAddr rdPubAddr = currentDevAddr;
+
+                            std::string baseURI = std::string(payload->baseURI);
+                            size_t len = baseURI.length();
+                            int addressLen = baseURI.find_first_of(":");
+                            std::string ipaddress = baseURI.substr(0, addressLen);
+                            int port = atoi(baseURI.substr(addressLen + 1, len).c_str());
+                            OICStrcpy(rdPubAddr.addr, addressLen + 1, ipaddress.c_str());
+                            rdPubAddr.port = port;
                             m_resources.push_back(std::shared_ptr<OC::OCResource>(
-                                        new OC::OCResource(m_clientWrapper, rdPubAddr,
+                                        new OC::OCResource(cw, rdPubAddr,
                                             std::string(res->uri),
                                             std::string(payload->sid),
                                             res->bitmap,
                                             StringLLToVector(res->types),
-                                            StringLLToVector(res->interfaces)
+                                            StringLLToVector(res->interfaces),
+                                            deviceName
                                             )));
                         }
                         else
                         {
                             m_resources.push_back(std::shared_ptr<OC::OCResource>(
-                                    new OC::OCResource(m_clientWrapper, m_devAddr,
+                                    new OC::OCResource(cw, currentDevAddr,
                                         std::string(res->uri),
                                         std::string(payload->sid),
                                         res->bitmap,
                                         StringLLToVector(res->types),
-                                        StringLLToVector(res->interfaces)
+                                        StringLLToVector(res->interfaces),
+                                        deviceName
                                         )));
 
 #ifdef TCP_ADAPTER
                             if (res->tcpPort != 0)
                             {
-                                OCDevAddr tcpDevAddr = m_devAddr;
+                                OCDevAddr tcpDevAddr = currentDevAddr;
                                 tcpDevAddr.port = res->tcpPort;
                                 tcpDevAddr.adapter = OC_ADAPTER_TCP;
                                 m_resources.push_back(std::shared_ptr<OC::OCResource>(
-                                            new OC::OCResource(m_clientWrapper, tcpDevAddr,
+                                            new OC::OCResource(cw, tcpDevAddr,
                                                 std::string(res->uri),
                                                 std::string(payload->sid),
                                                 res->bitmap,
                                                 StringLLToVector(res->types),
-                                                StringLLToVector(res->interfaces)
+                                                StringLLToVector(res->interfaces),
+                                                deviceName
                                                 )));
                             }
 #endif
@@ -111,7 +123,6 @@ namespace OC
 #ifdef WITH_MQ
             ListenOCContainer(std::weak_ptr<IClientWrapper> cw,
                                 OCDevAddr& devAddr, OCRepPayload* payload)
-                                : m_clientWrapper(cw), m_devAddr(devAddr)
             {
                 if (payload)
                 {
@@ -122,27 +133,30 @@ namespace OC
                     for(size_t idx = 0; idx < dimensions[0]; idx++)
                     {
                         m_resources.push_back(std::shared_ptr<OC::OCResource>(
-                                new OC::OCResource(m_clientWrapper, m_devAddr,
+                                new OC::OCResource(cw, devAddr,
                                                    std::string(topicList[idx]),
                                                    "",
                                                    OC_OBSERVABLE,
                                                    {OC_RSRVD_RESOURCE_TYPE_MQ_TOPIC},
-                                                   {DEFAULT_INTERFACE})));
+                                                   {DEFAULT_INTERFACE},
+                                                   deviceName
+                                                    )));
                     }
                 }
             }
 
             ListenOCContainer(std::weak_ptr<IClientWrapper> cw,
                               OCDevAddr& devAddr, const std::string& topicUri)
-                              : m_clientWrapper(cw), m_devAddr(devAddr)
             {
                     m_resources.push_back(std::shared_ptr<OC::OCResource>(
-                            new OC::OCResource(m_clientWrapper, m_devAddr,
+                            new OC::OCResource(cw, devAddr,
                                                topicUri,
                                                "",
                                                OC_OBSERVABLE,
                                                {OC_RSRVD_RESOURCE_TYPE_MQ_TOPIC},
-                                               {DEFAULT_INTERFACE})));
+                                               {DEFAULT_INTERFACE},
+                                               deviceName
+                                                )));
             }
 #endif
 
@@ -152,7 +166,5 @@ namespace OC
             }
         private:
             std::vector<std::shared_ptr<OC::OCResource>> m_resources;
-            std::weak_ptr<IClientWrapper> m_clientWrapper;
-            OCDevAddr& m_devAddr;
     };
 }