#include <StringConstants.h>
#include "ocpayload.h"
#include "ocrandom.h"
+#include "oic_string.h"
namespace OC
{
OCDevAddr& devAddr, OCDiscoveryPayload* payload)
: m_clientWrapper(cw), m_devAddr(devAddr)
{
- OCResourcePayload* res = payload->resources;
- OCResourceCollectionPayload* colRes = payload->collectionResources;
- if (res)
+ while (payload)
{
- while(res)
+ OCResourcePayload* res = payload->resources;
+ while (res)
{
- char uuidString[UUID_STRING_SIZE];
- if(OCConvertUuidToString(res->sid, uuidString) != RAND_UUID_OK)
- {
- uuidString[0]= '\0';
- }
-
if (res->secure)
{
m_devAddr.flags =
if (res->port != 0)
{
- m_devAddr.port = res->port;
+ m_devAddr.port = res->port;
}
- m_resources.push_back(std::shared_ptr<OC::OCResource>(
+ if (payload->baseURI)
+ {
+ OCDevAddr rdPubAddr = m_devAddr;
+ OICStrcpy(rdPubAddr.addr, sizeof(rdPubAddr.addr), payload->baseURI);
+ rdPubAddr.port = res->port;
+ m_resources.push_back(std::shared_ptr<OC::OCResource>(
+ new OC::OCResource(m_clientWrapper, rdPubAddr,
+ std::string(res->uri),
+ std::string(payload->sid),
+ res->bitmap,
+ StringLLToVector(res->types),
+ StringLLToVector(res->interfaces)
+ )));
+ }
+ else
+ {
+ m_resources.push_back(std::shared_ptr<OC::OCResource>(
new OC::OCResource(m_clientWrapper, m_devAddr,
std::string(res->uri),
- std::string(uuidString),
- (res->bitmap & OC_OBSERVABLE) == OC_OBSERVABLE,
+ std::string(payload->sid),
+ res->bitmap,
StringLLToVector(res->types),
StringLLToVector(res->interfaces)
)));
+
+#ifdef TCP_ADAPTER
+ if (res->tcpPort != 0)
+ {
+ OCDevAddr tcpDevAddr = m_devAddr;
+ tcpDevAddr.port = res->tcpPort;
+ tcpDevAddr.adapter = OC_ADAPTER_TCP;
+ m_resources.push_back(std::shared_ptr<OC::OCResource>(
+ new OC::OCResource(m_clientWrapper, tcpDevAddr,
+ std::string(res->uri),
+ std::string(payload->sid),
+ res->bitmap,
+ StringLLToVector(res->types),
+ StringLLToVector(res->interfaces)
+ )));
+ }
+#endif
+ }
res = res->next;
}
+ payload = payload->next;
}
- else if (colRes)
- {
- while(colRes)
- {
- if (colRes->tags->bitmap & OC_SECURE)
- {
- m_devAddr.flags =
- (OCTransportFlags)(OC_FLAG_SECURE | m_devAddr.flags);
- }
+ }
- if (colRes->tags->port != 0)
- {
- m_devAddr.port = colRes->tags->port;
- }
+#ifdef WITH_MQ
+ ListenOCContainer(std::weak_ptr<IClientWrapper> cw,
+ OCDevAddr& devAddr, OCRepPayload* payload)
+ : m_clientWrapper(cw), m_devAddr(devAddr)
+ {
+ 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_resources.push_back(std::shared_ptr<OC::OCResource>(
- new OC::OCResource(m_clientWrapper, m_devAddr,
- std::string(colRes->setLinks->href),
- std::string((char*)colRes->tags->di.id),
- (colRes->tags->bitmap & OC_OBSERVABLE) == OC_OBSERVABLE,
- StringLLToVector(colRes->setLinks->rt),
- StringLLToVector(colRes->setLinks->itf)
- )));
- colRes = colRes->next;
+ new OC::OCResource(m_clientWrapper, m_devAddr,
+ std::string(topicList[idx]),
+ "",
+ OC_OBSERVABLE,
+ {OC_RSRVD_RESOURCE_TYPE_MQ_TOPIC},
+ {DEFAULT_INTERFACE})));
}
}
}
+ 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,
+ topicUri,
+ "",
+ OC_OBSERVABLE,
+ {OC_RSRVD_RESOURCE_TYPE_MQ_TOPIC},
+ {DEFAULT_INTERFACE})));
+ }
+#endif
+
const std::vector<std::shared_ptr<OCResource>>& Resources() const
{
return m_resources;