X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Finclude%2FOCSerialization.h;h=e440ab0c91a98e06ac6ffc4de17c3e63bf2e1e38;hb=7f00f942c39b7bc27c7eeecf213a239c3fe4173c;hp=eff3a9aa1498862a64180068f352a43037b64a64;hpb=068b9d878cead4b54ceaba89cb9d9c19b1c5dcb1;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/include/OCSerialization.h b/resource/include/OCSerialization.h index eff3a9a..e440ab0 100644 --- a/resource/include/OCSerialization.h +++ b/resource/include/OCSerialization.h @@ -21,6 +21,7 @@ #include #include "ocpayload.h" #include "ocrandom.h" +#include "oic_string.h" namespace OC { @@ -41,41 +42,123 @@ namespace OC public: ListenOCContainer(std::weak_ptr cw, OCDevAddr& devAddr, OCDiscoveryPayload* payload) - : m_clientWrapper(cw), m_devAddr(devAddr) { - OCResourcePayload* res = payload->resources; + OCDevAddr currentDevAddr = devAddr; - while(res) + while (payload) { - char uuidString[UUID_STRING_SIZE]; - if(OCConvertUuidToString(res->sid, uuidString) != RAND_UUID_OK) + std::string deviceName; + if (payload->name) { - uuidString[0]= '\0'; + deviceName = payload->name; } - if (res->secure) + OCResourcePayload* res = payload->resources; + while (res) { - m_devAddr.flags = - (OCTransportFlags)(OC_FLAG_SECURE | m_devAddr.flags); + + 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 = 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(cw, rdPubAddr, + std::string(res->uri), + std::string(payload->sid), + res->bitmap, + StringLLToVector(res->types), + StringLLToVector(res->interfaces), + deviceName + ))); + } + else + { + m_resources.push_back(std::shared_ptr( + new OC::OCResource(cw, currentDevAddr, + std::string(res->uri), + std::string(payload->sid), + res->bitmap, + StringLLToVector(res->types), + StringLLToVector(res->interfaces), + deviceName + ))); + +#ifdef TCP_ADAPTER + if (res->tcpPort != 0) + { + OCDevAddr tcpDevAddr = currentDevAddr; + tcpDevAddr.port = res->tcpPort; + tcpDevAddr.adapter = OC_ADAPTER_TCP; + m_resources.push_back(std::shared_ptr( + new OC::OCResource(cw, tcpDevAddr, + std::string(res->uri), + std::string(payload->sid), + res->bitmap, + StringLLToVector(res->types), + StringLLToVector(res->interfaces), + deviceName + ))); + } +#endif + } + res = res->next; } + payload = payload->next; + } + } - if (res->port != 0) +#ifdef WITH_MQ + ListenOCContainer(std::weak_ptr cw, + OCDevAddr& devAddr, OCRepPayload* payload) + { + if (payload) + { + char**topicList = nullptr; + size_t dimensions[MAX_REP_ARRAY_DEPTH] = {0}; + OCRepPayloadGetStringArray(payload, "topiclist", &topicList, dimensions); + + for(size_t idx = 0; idx < dimensions[0]; idx++) { - m_devAddr.port = res->port; + m_resources.push_back(std::shared_ptr( + new OC::OCResource(cw, devAddr, + std::string(topicList[idx]), + "", + OC_OBSERVABLE, + {OC_RSRVD_RESOURCE_TYPE_MQ_TOPIC}, + {DEFAULT_INTERFACE}, + deviceName + ))); } - - m_resources.push_back(std::shared_ptr( - new OC::OCResource(m_clientWrapper, m_devAddr, - std::string(res->uri), - std::string(uuidString), - (res->bitmap & OC_OBSERVABLE) == OC_OBSERVABLE, - StringLLToVector(res->types), - StringLLToVector(res->interfaces) - ))); - res = res->next; } + } + ListenOCContainer(std::weak_ptr cw, + OCDevAddr& devAddr, const std::string& topicUri) + { + m_resources.push_back(std::shared_ptr( + new OC::OCResource(cw, devAddr, + topicUri, + "", + OC_OBSERVABLE, + {OC_RSRVD_RESOURCE_TYPE_MQ_TOPIC}, + {DEFAULT_INTERFACE}, + deviceName + ))); } +#endif const std::vector>& Resources() const { @@ -83,7 +166,5 @@ namespace OC } private: std::vector> m_resources; - std::weak_ptr m_clientWrapper; - OCDevAddr& m_devAddr; }; }