X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Finclude%2FOCSerialization.h;h=e440ab0c91a98e06ac6ffc4de17c3e63bf2e1e38;hb=refs%2Ftags%2Faccepted%2Ftizen%2Funified%2F20171010.063815;hp=693f546ad926760a63aa9a75f5fc3944d66ad805;hpb=6dc5c6adbc159bbeb11ef6a387ad39dfbd0d3d52;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/include/OCSerialization.h b/resource/include/OCSerialization.h index 693f546..e440ab0 100644 --- a/resource/include/OCSerialization.h +++ b/resource/include/OCSerialization.h @@ -42,62 +42,74 @@ namespace OC public: ListenOCContainer(std::weak_ptr 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( - 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( - 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( - 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 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( - 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 cw, OCDevAddr& devAddr, const std::string& topicUri) - : m_clientWrapper(cw), m_devAddr(devAddr) { m_resources.push_back(std::shared_ptr( - 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> m_resources; - std::weak_ptr m_clientWrapper; - OCDevAddr& m_devAddr; }; }