#include "caremotehandler.h"
#include "cablockwisetransfer.h"
#include "oic_malloc.h"
+#include "oic_string.h"
#include "camutex.h"
#include "logger.h"
if (g_context.dataList)
{
+ CARemoveAllBlockDataFromList();
u_arraylist_free(&g_context.dataList);
}
}
CAResult_t CANegotiateBlockSize(CABlockData_t *currData, coap_block_t *block,
- coap_pdu_t *pdu, uint16_t blockType)
+ const coap_pdu_t *pdu, uint16_t blockType)
{
OIC_LOG(DEBUG, TAG, "IN-NegotiateBlockSize");
// get resource uri information from received response message
// to send next request message to remote device
- CAResponseInfo_t resInfo = { 0 };
- CAGetResponseInfoFromPDU(pdu, &resInfo, endpoint);
+ CAResponseInfo_t* resInfo = (CAResponseInfo_t*)OICCalloc(1, sizeof(*resInfo));
+ if (!resInfo)
+ {
+ OIC_LOG(ERROR, TAG, "memory allocation failed");
+ OICFree(requestData.token);
+ return NULL;
+ }
+ CAGetResponseInfoFromPDU(pdu, resInfo, endpoint);
requestInfo->method = CA_GET;
- requestInfo->info.resourceUri = resInfo.info.resourceUri;
+ requestInfo->info.resourceUri = OICStrdup(resInfo->info.resourceUri);
+
+ // after copying the resource uri, destroy response info.
+ CADestroyResponseInfoInternal(resInfo);
}
CAData_t *data = (CAData_t *) OICCalloc(1, sizeof(CAData_t));
return CA_STATUS_OK;
}
+CAResult_t CARemoveAllBlockDataFromList()
+{
+ OIC_LOG(DEBUG, TAG, "CARemoveAllBlockDataFromList");
+
+ ca_mutex_lock(g_context.blockDataListMutex);
+
+ size_t len = u_arraylist_length(g_context.dataList);
+ for (size_t i = len; i > 0; i--)
+ {
+ CABlockData_t *removedData = u_arraylist_remove(g_context.dataList, i - 1);
+ if (removedData)
+ {
+ // destroy memory
+ if (removedData->sentData)
+ {
+ CADestroyDataSet(removedData->sentData);
+ }
+ CADestroyBlockID(removedData->blockDataId);
+ OICFree(removedData->payload);
+ OICFree(removedData);
+ }
+ }
+ ca_mutex_unlock(g_context.blockDataListMutex);
+
+ return CA_STATUS_OK;
+}
+
void CADestroyDataSet(CAData_t* data)
{
VERIFY_NON_NULL_VOID(data, TAG, "data");
OIC_LOG_V(DEBUG, TAG, "block option-szx : %d", block->szx);
}
+
+CAResult_t CARemoveBlockDataFromListWithSeed(const CAToken_t token, uint8_t tokenLength,
+ uint16_t portNumber)
+{
+ CABlockDataID_t* blockDataID = CACreateBlockDatablockId(token, tokenLength, portNumber);
+ if (NULL == blockDataID || blockDataID->idLength < 1)
+ {
+ OIC_LOG(ERROR, TAG, "blockId is null");
+ CADestroyBlockID(blockDataID);
+ return CA_STATUS_FAILED;
+ }
+
+ CAResult_t res = CA_STATUS_OK;
+
+ if (NULL != CAGetBlockDataFromBlockDataList(blockDataID))
+ {
+ res = CARemoveBlockDataFromList(blockDataID);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "CARemoveBlockDataFromList failed");
+ }
+ }
+
+ CADestroyBlockID(blockDataID);
+
+ return res;
+}