/**
* Logging tag for module name.
*/
-#define TAG "RPM"
+#define TAG "OIC_RM_PARSER"
/**
* Table key to parser Payload Table.
OCStackResult RMPConstructGatewayPayload(uint32_t gatewayId, OCRepPayload **payload)
{
- OC_LOG(DEBUG, TAG, "RMPConstructGatewayPayload IN");
+ OIC_LOG(DEBUG, TAG, "RMPConstructGatewayPayload IN");
RM_NULL_CHECK_WITH_RET(payload, TAG, "payload");
*payload = OCRepPayloadCreate();
if(!*payload)
{
- OC_LOG(ERROR, TAG, "Failed to allocate Payload");
+ OIC_LOG(ERROR, TAG, "Failed to allocate Payload");
return OC_STACK_ERROR;
}
OCRepPayloadSetPropInt(*payload, GATEWAY, gatewayId);
OCRepPayloadSetPropInt(*payload, LENGTH_PROP, 0);
- OC_LOG(DEBUG, TAG, "RMPConstructGatewayPayload OUT");
+ OIC_LOG(DEBUG, TAG, "RMPConstructGatewayPayload OUT");
return OC_STACK_OK;
}
const u_linklist_t *routingtable, bool isUpdateSeqNeeded,
OCRepPayload **payload)
{
- OC_LOG(DEBUG, TAG, "RMPConstructObserveResPayload IN");
+ OIC_LOG(DEBUG, TAG, "RMPConstructObserveResPayload IN");
RM_NULL_CHECK_WITH_RET(payload, TAG, "payload");
*payload = (OCRepPayload *)OCRepPayloadCreate();
if(!*payload)
{
- OC_LOG(ERROR, TAG, "Failed to allocate Payload");
+ OIC_LOG(ERROR, TAG, "Failed to allocate Payload");
return OC_STACK_ERROR;
}
if (NULL == routingtable)
{
OCRepPayloadSetPropInt(*payload, LENGTH_PROP, 0);
- OC_LOG(DEBUG, TAG, "Routing Table NULL for ObserveRes Payload");
+ OIC_LOG(DEBUG, TAG, "Routing Table NULL for ObserveRes Payload");
return OC_STACK_OK;
}
OCRepPayload *add = OCRepPayloadCreate();
if(!add)
{
- OC_LOG(ERROR, TAG, "Failed to allocate Payload");
+ OIC_LOG(ERROR, TAG, "Failed to allocate Payload");
return OC_STACK_ERROR;
}
bool res = OCRepPayloadSetPropObjectArray(*payload, TABLE, arrayPayload, dimensions);
if (!res)
{
- OC_LOG(ERROR, TAG, "Failed to Construct Observer response Payload");
+ OIC_LOG(ERROR, TAG, "Failed to Construct Observer response Payload");
return OC_STACK_ERROR;
}
}
- OC_LOG(DEBUG, TAG, "RMPConstructObserveResPayload OUT");
+ OIC_LOG(DEBUG, TAG, "RMPConstructObserveResPayload OUT");
return OC_STACK_OK;
}
const u_linklist_t *removedGateways, bool isUpdateSeqNeeded,
OCRepPayload **removedPayload)
{
- OC_LOG(DEBUG, TAG, "RMPConstructRemovalPayload IN");
+ OIC_LOG(DEBUG, TAG, "RMPConstructRemovalPayload IN");
RM_NULL_CHECK_WITH_RET(removedGateways, TAG, "removedGateways");
RM_NULL_CHECK_WITH_RET(removedPayload, TAG, "removedPayload");
*removedPayload = OCRepPayloadCreate();
if(!*removedPayload)
{
- OC_LOG(ERROR, TAG, "Failed to allocate Payload");
+ OIC_LOG(ERROR, TAG, "Failed to allocate Payload");
return OC_STACK_ERROR;
}
OCRepPayload *add = OCRepPayloadCreate();
if(!add)
{
- OC_LOG(ERROR, TAG, "Failed to allocate Payload");
+ OIC_LOG(ERROR, TAG, "Failed to allocate Payload");
return OC_STACK_ERROR;
}
add->base.type = PAYLOAD_TYPE_REPRESENTATION;
- OC_LOG_V(DEBUG, TAG, "Removing the gateway entry: %u", entry->destination->gatewayId);
+ OIC_LOG_V(DEBUG, TAG, "Removing the gateway entry: %u", entry->destination->gatewayId);
OCRepPayloadSetPropInt(add, GATEWAY, entry->destination->gatewayId);
OCRepPayloadSetPropInt(add, ROUTE_COST, 0);
arrayPayload[i] = add;
bool res = OCRepPayloadSetPropObjectArray(*removedPayload, TABLE, arrayPayload, dimensions);
if (!res)
{
- OC_LOG(ERROR, TAG, "Failed to Construct Removal Payload");
+ OIC_LOG(ERROR, TAG, "Failed to Construct Removal Payload");
return OC_STACK_ERROR;
}
- OC_LOG(DEBUG, TAG, "RMPConstructRemovalPayload OUT");
+ OIC_LOG(DEBUG, TAG, "RMPConstructRemovalPayload OUT");
return OC_STACK_OK;
}
uint32_t *gatewayId)
{
OCPayload *ocPayload = NULL;
- OCParsePayload(&ocPayload, payload, payloadSize);
+ OCParsePayload(&ocPayload, PAYLOAD_TYPE_REPRESENTATION, payload, payloadSize);
OCRepPayload *repPayload = (OCRepPayload *)ocPayload;
OCStackResult res = RMPParseResponsePayload(repPayload, gatewayId, NULL, NULL, NULL);
if (OC_STACK_OK != res)
{
- OC_LOG(DEBUG, TAG, "ParseResponsePayload failed");
+ OIC_LOG(DEBUG, TAG, "ParseResponsePayload failed");
}
return res;
uint32_t *seqNum, u_linklist_t **gatewayTable,
bool *isUpdateSeqNeeded)
{
- OC_LOG(DEBUG, TAG, "RMPParsePayload IN");
+ OIC_LOG(DEBUG, TAG, "RMPParsePayload IN");
RM_NULL_CHECK_WITH_RET(payload, TAG, "payload");
RM_NULL_CHECK_WITH_RET(gatewayId, TAG, "gatewayId");
int len = length;
if (0 == len)
{
- OC_LOG(DEBUG, TAG, "Parsed Gateway Payload");
+ OIC_LOG(DEBUG, TAG, "Parsed Gateway Payload");
return OC_STACK_OK;
}
if (NULL == gatewayTable)
{
- OC_LOG(DEBUG, TAG, "Parsed Request Payload");
+ OIC_LOG(DEBUG, TAG, "gatewayTable is NULL");
return OC_STACK_OK;
}
- OCRepPayload **responsePayload[len];
-
+ OCRepPayload **responsePayload = NULL;
size_t dimensions[MAX_REP_ARRAY_DEPTH];
- OCRepPayloadGetPropObjectArray(payload, TABLE, responsePayload, dimensions);
-
- if (NULL == *responsePayload)
+ OCRepPayloadGetPropObjectArray(payload, TABLE, &responsePayload, dimensions);
+ if (NULL == responsePayload)
{
- OC_LOG(DEBUG, TAG, "RMPParsePayload OUT");
+ OIC_LOG(DEBUG, TAG, "RMPParsePayload OUT");
return OC_STACK_OK;
}
*gatewayTable = u_linklist_create();
if (NULL == *gatewayTable)
{
- OC_LOG(DEBUG, TAG, "Gateway table create failed");
- return OC_STACK_ERROR;
+ OIC_LOG(DEBUG, TAG, "Gateway table create failed");
+ goto error_exit;
}
+ size_t resPayloadSize = calcDimTotal(dimensions);
for (int i = 0; i < len; i++)
{
RTMGatewayEntry_t *entry = (RTMGatewayEntry_t *)OICCalloc(1, sizeof(RTMGatewayEntry_t));
-
if (NULL == entry)
{
- OC_LOG(DEBUG, TAG, "RTMGatewayEntry_t Calloc failed");
- return OC_STACK_ERROR;
+ OIC_LOG(DEBUG, TAG, "RTMGatewayEntry_t Calloc failed");
+ goto error_exit;
}
// Filling new Entry
entry->destination = (RTMGatewayId_t*)OICCalloc(1, sizeof(RTMGatewayId_t));
if (NULL == entry->destination)
{
- OC_LOG(DEBUG, TAG, "Destination Calloc failed");
+ OIC_LOG(DEBUG, TAG, "Destination Calloc failed");
OICFree(entry);
- return OC_STACK_ERROR;
+ goto error_exit;
}
entry->nextHop = (RTMGatewayId_t*)OICCalloc(1, sizeof(RTMGatewayId_t));
if (NULL == entry->nextHop)
{
- OC_LOG(DEBUG, TAG, "nextHop Calloc failed");
- OICFree(entry);
+ OIC_LOG(DEBUG, TAG, "nextHop Calloc failed");
OICFree(entry->destination);
- return OC_STACK_ERROR;
+ OICFree(entry);
+ goto error_exit;
}
entry->nextHop->gatewayId = *gatewayId;
int64_t gatewayBuf;
int64_t routeCost;
- OCRepPayloadGetPropInt(*((*responsePayload) + i), GATEWAY, &gatewayBuf);
- OCRepPayloadGetPropInt(*((*responsePayload) + i), ROUTE_COST, &routeCost);
+ OCRepPayloadGetPropInt(responsePayload[i], GATEWAY, &gatewayBuf);
+ OCRepPayloadGetPropInt(responsePayload[i], ROUTE_COST, &routeCost);
entry->destination->gatewayId = gatewayBuf;
entry->routeCost = routeCost;
u_linklist_add(*gatewayTable, (void *)entry);
}
- OC_LOG(DEBUG, TAG, "RMPParsePayload OUT");
+
+ for (size_t k = 0; k < resPayloadSize; k++)
+ {
+ OCRepPayloadDestroy(responsePayload[k]);
+ }
+ OICFree(responsePayload);
+
+ OIC_LOG(DEBUG, TAG, "RMPParsePayload OUT");
return OC_STACK_OK;
+
+error_exit:
+ for (size_t k = 0; k < resPayloadSize; k++)
+ {
+ OCRepPayloadDestroy(responsePayload[k]);
+ }
+ OICFree(responsePayload);
+ return OC_STACK_ERROR;
}
void RMPFreePayload(OCRepPayload *payload)
{
- OC_LOG(DEBUG, TAG, "RMPFreePayload IN");
+ OIC_LOG(DEBUG, TAG, "RMPFreePayload IN");
RM_NULL_CHECK_VOID(payload, TAG, "payload");
OCRepPayloadDestroy(payload);
- OC_LOG(DEBUG, TAG, "RMPFreePayload OUT");
+ OIC_LOG(DEBUG, TAG, "RMPFreePayload OUT");
}