Correct address in the baseURI field for resource directory.
JIRA ISSUE:855
Signed-off-by: Habib Virji <habib.virji@samsung.com>
Change-Id: Idf86fe801e25e32c84268f421feff479270faa1b
Reviewed-on: https://gerrit.iotivity.org/gerrit/4351
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
#include <StringConstants.h>
#include "ocpayload.h"
#include "ocrandom.h"
+#include "oic_string.h"
namespace OC
{
{
while(colRes)
{
+ // currently support for ipv4 is provided.
+ OCDevAddr colAddr;
+ colAddr.adapter = OC_ADAPTER_IP;
+ colAddr.flags = OC_IP_USE_V4;
+ char *ptr = strtok(colRes->tags->baseURI, ":");
+ OICStrcpy(colAddr.addr, sizeof(colAddr.addr), ptr);
+
if (colRes->tags->bitmap & OC_SECURE)
{
- m_devAddr.flags =
+ colAddr.flags =
(OCTransportFlags)(OC_FLAG_SECURE | m_devAddr.flags);
}
-
if (colRes->tags->port != 0)
{
- m_devAddr.port = colRes->tags->port;
+ colAddr.port = colRes->tags->port;
+ }
+ else
+ {
+ colAddr.port = atoi(ptr+1);
}
m_resources.push_back(std::shared_ptr<OC::OCResource>(
- new OC::OCResource(m_clientWrapper, m_devAddr,
+ new OC::OCResource(m_clientWrapper, colAddr,
std::string(colRes->setLinks->href),
std::string((char*)colRes->tags->di.id),
(colRes->tags->bitmap & OC_OBSERVABLE) == OC_OBSERVABLE,
#include "payload_logging.h"
#include "oic_malloc.h"
+#include "octypes.h"
#include "rdpayload.h"
}
}
-OCStackResult OCRDStorePublishedResources(const OCResourceCollectionPayload *payload)
+OCStackResult OCRDStorePublishedResources(const OCResourceCollectionPayload *payload, const OCDevAddr *address)
{
OCResourceCollectionPayload *storeResource = (OCResourceCollectionPayload *)OICCalloc(1, sizeof(OCResourceCollectionPayload));
if (!storeResource)
return OC_STACK_NO_MEMORY;
}
- OC_LOG(DEBUG, TAG, "Storing Resources ... ");
+ OC_LOG_V(DEBUG, TAG, "Storing Resources for %s:%u", address->addr, address->port);
+
+ char rdPubAddr[MAX_ADDR_STR_SIZE];
+ snprintf(rdPubAddr, MAX_ADDR_STR_SIZE, "%s:%d", address->addr, address->port);
OCTagsPayload *tags = payload->tags;
- storeResource->tags = OCCopyTagsResources(tags->n.deviceName, tags->di.id, tags->baseURI,
- tags->bitmap, tags->port, tags->ins, tags->rts, tags->drel, tags->ttl);
+ storeResource->tags = OCCopyTagsResources(tags->n.deviceName, tags->di.id, rdPubAddr,
+ tags->bitmap, address->port, tags->ins, tags->rts, tags->drel, tags->ttl);
if (!storeResource->tags)
{
OC_LOG(ERROR, TAG, "Failed allocating memory for tags.");
* Stores the publish resources.
*
* @param payload RDPublish payload sent from the remote device.
+ * @param address The address of the device publishing resources.
*
* @return ::OC_STACK_OK upon success, ::OC_STACK_ERROR in case of error.
*/
-OCStackResult OCRDStorePublishedResources(const OCResourceCollectionPayload *payload);
+OCStackResult OCRDStorePublishedResources(const OCResourceCollectionPayload *payload, const OCDevAddr *address);
#ifdef __cplusplus
}
goto no_memory;
}
+ OCTagsLog(DEBUG, rdPayload->rdPublish->tags);
+ OCLinksLog(DEBUG, rdPayload->rdPublish->setLinks);
+
OCDevAddr rdAddr = { 0 };
OICStrcpy(rdAddr.addr, MAX_ADDR_STR_SIZE, addr);
rdAddr.port = port;
OCRDPayload *payload = (OCRDPayload *)ehRequest->payload;
if (payload && payload->rdPublish)
{
- OCRDStorePublishedResources(payload->rdPublish);
+ OCRDStorePublishedResources(payload->rdPublish, &ehRequest->devAddr);
}
OCRDPayload *rdPayload = OCRDPayloadCreate();