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
#ifdef WITH_MQ
ListenOCContainer(std::weak_ptr<IClientWrapper> cw,
OCDevAddr& devAddr, OCRepPayload* payload)
- : m_clientWrapper(cw), m_devAddr(devAddr)
{
if (payload)
{
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
}
private:
std::vector<std::shared_ptr<OC::OCResource>> m_resources;
- std::weak_ptr<IClientWrapper> m_clientWrapper;
- OCDevAddr& m_devAddr;
};
}