#include "camutex.h"
#include "logger.h"
-#define TAG "CA_BWT"
+#define TAG "OIC_CA_BWT"
#define BLOCKWISE_OPTION_BUFFER (sizeof(unsigned int))
#define BLOCK_NUMBER_IDX 4
#define BLOCK_SIZE(arg) (1 << ((arg) + 4))
// context for block-wise transfer
-static CABlockWiseContext_t g_context = { 0 };
+static CABlockWiseContext_t g_context = { .sendThreadFunc = NULL,
+ .receivedThreadFunc = NULL,
+ .dataList = NULL };
static bool CACheckPayloadLength(const CAData_t *sendData)
{
// check if message has to be transfered to a block
size_t maxBlockSize = BLOCK_SIZE(CA_DEFAULT_BLOCK_SIZE);
- OIC_LOG_V(DEBUG, TAG, "payloadLen=%d, maxBlockSize=%d", payloadLen, maxBlockSize);
+ OIC_LOG_V(DEBUG, TAG, "payloadLen=%zu, maxBlockSize=%zu", payloadLen, maxBlockSize);
if (payloadLen <= maxBlockSize)
{
CAResult_t res = CAInitBlockWiseMutexVariables();
if (CA_STATUS_OK != res)
{
+ u_arraylist_free(&g_context.dataList);
+ g_context.dataList = NULL;
OIC_LOG(ERROR, TAG, "init has failed");
}
receivedData->responseInfo->info.token,
receivedData->responseInfo->info.tokenLength,
endpoint->port);
- if(NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
+ if (NULL == blockDataID || blockDataID->idLength < 1)
{
- OIC_LOG(ERROR, TAG, "blockId is null");
- CADestroyBlockID(blockDataID);
- return CA_STATUS_FAILED;
+ // if retransmission is timeout, callback msg will be send without token.
+ if (NULL == blockDataID && !receivedData->responseInfo->info.token)
+ {
+ OIC_LOG(INFO, TAG, "retransmission was stopped");
+ return CA_REQUEST_TIMEOUT;
+ }
+ else
+ {
+ OIC_LOG(ERROR, TAG, "blockId is null");
+ CADestroyBlockID(blockDataID);
+ return CA_STATUS_FAILED;
+ }
}
CARemoveBlockDataFromList(blockDataID);
{
CABlockDataID_t* blockDataID = CACreateBlockDatablockId(
(CAToken_t)pdu->hdr->coap_hdr_udp_t.token,
- pdu->hdr->coap_hdr_udp_t.token_length,
- endpoint->port);
-
- if(NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
+ pdu->hdr->coap_hdr_udp_t.token_length,
+ endpoint->port);
+ if (NULL == blockDataID || blockDataID->idLength < 1)
{
OIC_LOG(ERROR, TAG, "blockId is null");
CADestroyBlockID(blockDataID);
(CAToken_t)pdu->hdr->coap_hdr_udp_t.token,
pdu->hdr->coap_hdr_udp_t.token_length,
endpoint->port);
- if(NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
+ if (NULL == blockDataID || blockDataID->idLength < 1)
{
OIC_LOG(ERROR, TAG, "blockId is null");
CADestroyBlockID(blockDataID);
(CAToken_t)pdu->hdr->coap_hdr_udp_t.token,
pdu->hdr->coap_hdr_udp_t.token_length,
endpoint->port);
-
- if(NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
+ if (NULL == blockDataID || blockDataID->idLength < 1)
{
OIC_LOG(ERROR, TAG, "blockId is null");
CADestroyBlockID(blockDataID);
return CA_STATUS_FAILED;
}
- // BlockData data is created if it not existed
- if (!CAIsBlockDataInList(blockDataID))
+ // Get BlockData data. If does not exist, create a new data
+ CABlockData_t *data = CAGetBlockDataFromBlockDataList(blockDataID);
+ if (!data)
{
- OIC_LOG(DEBUG, TAG, "no message in list");
+ OIC_LOG(DEBUG, TAG, "block data doesn't exist in list. create new one");
- CAData_t *data = CACreateNewDataSet(pdu, endpoint);
- if (!data)
+ CAData_t *cadata = CACreateNewDataSet(pdu, endpoint);
+ if (!cadata)
{
OIC_LOG(ERROR, TAG, "data is null");
CADestroyBlockID(blockDataID);
return CA_STATUS_FAILED;
}
- CABlockData_t *currData = CACreateNewBlockData(data);
+ CABlockData_t *currData = CACreateNewBlockData(cadata);
if (!currData)
{
- OIC_LOG(ERROR, TAG, "currData is null");
- CADestroyDataSet(data);
+ OIC_LOG(ERROR, TAG, "failed to create a new block data");
+ CADestroyDataSet(cadata);
CADestroyBlockID(blockDataID);
return CA_STATUS_FAILED;
}
- CADestroyDataSet(data);
+ CADestroyDataSet(cadata);
}
// update BLOCK OPTION1 type
return res;
}
- CABlockData_t *data = CAGetBlockDataFromBlockDataList(blockDataID);
- if (!data)
- {
- OIC_LOG(ERROR, TAG, "getting has failed");
- CADestroyBlockID(blockDataID);
- return CA_STATUS_FAILED;
- }
-
uint8_t blockWiseStatus = CA_BLOCK_UNKNOWN;
// received type from remote device
if (CA_MSG_ACKNOWLEDGE == pdu->hdr->coap_hdr_udp_t.type)
OIC_LOG(INFO, TAG, "received data is combining block1 and block2");
// initialize block number for response message
data->block1.num = 0;
- CADestroyBlockID(blockDataID);
- return CA_STATUS_OK;
}
else
{
OIC_LOG(INFO, TAG, "received data is not bulk data");
CAReceiveLastBlock(blockDataID, receivedData);
CARemoveBlockDataFromList(blockDataID);
- CADestroyBlockID(blockDataID);
- return CA_STATUS_OK;
}
+
+ CADestroyBlockID(blockDataID);
+ return CA_STATUS_OK;
}
blockWiseStatus = CA_OPTION1_ACK;
return res;
}
- res = CAUpdateBlockOptionItems(data, pdu, &block, COAP_OPTION_BLOCK1, blockWiseStatus);
+ res = CAUpdateBlockOptionItems(data, pdu, &block, COAP_OPTION_BLOCK1,
+ blockWiseStatus);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "update has failed");
(CAToken_t)pdu->hdr->coap_hdr_udp_t.token,
pdu->hdr->coap_hdr_udp_t.token_length,
endpoint->port);
-
- if(NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
+ if (NULL == blockDataID || blockDataID->idLength < 1)
{
OIC_LOG(ERROR, TAG, "blockId is null");
CADestroyBlockID(blockDataID);
return CA_STATUS_FAILED;
}
- // BlockData data is created if it not existed
- if (!CAIsBlockDataInList(blockDataID))
+ // Get BlockData data. If does not exist, create a new data
+ CABlockData_t *data = CAGetBlockDataFromBlockDataList(blockDataID);
+ if (!data)
{
- OIC_LOG(DEBUG, TAG, "no msg in list.");
+ OIC_LOG(DEBUG, TAG, "block data doesn't exist in list. create new one");
- CAData_t *data = CACreateNewDataSet(pdu, endpoint);
- if (!data)
+ CAData_t *cadata = CACreateNewDataSet(pdu, endpoint);
+ if (!cadata)
{
OIC_LOG(ERROR, TAG, "data is null");
CADestroyBlockID(blockDataID);
return CA_STATUS_FAILED;
}
- CABlockData_t *currData = CACreateNewBlockData(data);
+ CABlockData_t *currData = CACreateNewBlockData(cadata);
if (!currData)
{
- OIC_LOG(ERROR, TAG, "data is null");
- CADestroyDataSet(data);
+ OIC_LOG(ERROR, TAG, "failed to create a new block data");
+ CADestroyDataSet(cadata);
CADestroyBlockID(blockDataID);
return CA_STATUS_FAILED;
}
- CADestroyDataSet(data);
+ CADestroyDataSet(cadata);
}
// set Block Option Type
- CAResult_t res = CAUpdateBlockOptionType(blockDataID,
- COAP_OPTION_BLOCK2);
+ CAResult_t res = CAUpdateBlockOptionType(blockDataID, COAP_OPTION_BLOCK2);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "update has failed");
return res;
}
- CABlockData_t *data = CAGetBlockDataFromBlockDataList(blockDataID);
- if (!data)
- {
- OIC_LOG(ERROR, TAG, "getting has failed");
- CARemoveBlockDataFromList(blockDataID);
- CADestroyBlockID(blockDataID);
- return CA_STATUS_FAILED;
- }
-
uint8_t blockWiseStatus = CA_BLOCK_UNKNOWN;
if (0 == block.num && CA_GET == pdu->hdr->coap_hdr_udp_t.code && 0 == block.m)
{
return res;
}
-CAResult_t CAGetMoreBitFromBlock(size_t payloadLen, coap_block_t *block)
+CAResult_t CASetMoreBitFromBlock(size_t payloadLen, coap_block_t *block)
{
VERIFY_NON_NULL(block, TAG, "block");
if (info->payload)
{
dataLength = info->payloadSize;
- OIC_LOG_V(DEBUG, TAG, "dataLength - %d", dataLength);
+ OIC_LOG_V(DEBUG, TAG, "dataLength - %zu", dataLength);
}
OIC_LOG_V(DEBUG, TAG, "previous payload - %s", (*pdu)->data);
(CAToken_t)(*pdu)->hdr->coap_hdr_udp_t.token,
(*pdu)->hdr->coap_hdr_udp_t.token_length,
endpoint->port);
-
- if(NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
+ if (NULL == blockDataID || blockDataID->idLength < 1)
{
OIC_LOG(ERROR, TAG, "blockId is null");
res = CA_STATUS_FAILED;
VERIFY_NON_NULL(options, TAG, "options");
// get set block data from CABlock list-set.
- coap_block_t *block1 = CAGetBlockOption(blockID,
- COAP_OPTION_BLOCK1);
- coap_block_t *block2 = CAGetBlockOption(blockID,
- COAP_OPTION_BLOCK2);
+ coap_block_t *block1 = CAGetBlockOption(blockID, COAP_OPTION_BLOCK1);
+ coap_block_t *block2 = CAGetBlockOption(blockID, COAP_OPTION_BLOCK2);
if (!block1 || !block2)
{
OIC_LOG(ERROR, TAG, "getting has failed");
CALogBlockInfo(block2);
- uint8_t code = 0;
if (CA_MSG_ACKNOWLEDGE == (*pdu)->hdr->coap_hdr_udp_t.type ||
(CA_MSG_NONCONFIRM == (*pdu)->hdr->coap_hdr_udp_t.type &&
CA_GET != (*pdu)->hdr->coap_hdr_udp_t.code))
{
- int32_t res = coap_write_block_opt(block2, COAP_OPTION_BLOCK2, *pdu, dataLength);
- switch (res)
- {
- case -2: /* illegal block */
- code = COAP_RESPONSE_CODE(CA_BAD_REQ);
- OIC_LOG(ERROR, TAG, "write block option : -2");
- goto error;
- case -1: /* should really not happen */
- OIC_LOG(ERROR, TAG, "write block option : -1");
- break;
- case -3: /* cannot handle request */
- code = COAP_RESPONSE_CODE(CA_INTERNAL_SERVER_ERROR);
- OIC_LOG(ERROR, TAG, "write block option : -3");
- goto error;
- default:
- OIC_LOG(INFO, TAG, "success write block option");
- }
+ CASetMoreBitFromBlock(dataLength, block2);
CALogBlockInfo(block2);
// if block number is 0, add size2 option
if (0 == block2->num)
{
- res = CAAddBlockSizeOption(*pdu, COAP_OPTION_SIZE2, dataLength, options);
+ CAResult_t res = CAAddBlockSizeOption(*pdu, COAP_OPTION_SIZE2, dataLength, options);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "add has failed");
}
}
+ CAResult_t res = CAAddBlockOptionImpl(block2, COAP_OPTION_BLOCK2, options);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "add has failed");
+ CARemoveBlockDataFromList(blockID);
+ return res;
+ }
+
if (block1->num)
{
OIC_LOG(DEBUG, TAG, "combining block1 and block2");
- CAResult_t res = CAAddBlockOptionImpl(*pdu, block1, COAP_OPTION_BLOCK1, options);
+ res = CAAddBlockOptionImpl(block1, COAP_OPTION_BLOCK1, options);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "add has failed");
block1->num = 0;
}
+ res = CAAddOptionToPDU(*pdu, options);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "add has failed");
+ CARemoveBlockDataFromList(blockID);
+ return res;
+ }
+
if (!coap_add_block(*pdu, dataLength, (const unsigned char *) info->payload,
block2->num, block2->szx))
{
else
{
OIC_LOG(DEBUG, TAG, "option2, not ACK msg");
- CAResult_t res = CAAddBlockOptionImpl(*pdu, block2, COAP_OPTION_BLOCK2, options);
+ CAResult_t res = CAAddBlockOptionImpl(block2, COAP_OPTION_BLOCK2, options);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "add has failed");
+ CARemoveBlockDataFromList(blockID);
+ return res;
+ }
+
+ res = CAAddOptionToPDU(*pdu, options);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "add has failed");
}
return CA_STATUS_OK;
-
-error:
- OIC_LOG_V(ERROR, TAG, "error : %d", code);
-
- char* phrase = coap_response_phrase(code);
- if(phrase)
- {
- coap_add_data(*pdu, strlen(phrase),
- (unsigned char *) phrase);
- }
- return CA_STATUS_FAILED;
}
CAResult_t CAAddBlockOption1(coap_pdu_t **pdu, const CAInfo_t *info, size_t dataLength,
if (CA_MSG_ACKNOWLEDGE == (*pdu)->hdr->coap_hdr_udp_t.type)
{
OIC_LOG(DEBUG, TAG, "option1 and ACK msg..");
- CAResult_t res = CAAddBlockOptionImpl(*pdu, block1, COAP_OPTION_BLOCK1, options);
+ CAResult_t res = CAAddBlockOptionImpl(block1, COAP_OPTION_BLOCK1, options);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "add has failed");
+ CARemoveBlockDataFromList(blockID);
+ return res;
+ }
+
+ res = CAAddOptionToPDU(*pdu, options);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "add has failed");
}
else
{
- CAGetMoreBitFromBlock(dataLength, block1);
+ CASetMoreBitFromBlock(dataLength, block1);
CAResult_t res = CA_STATUS_OK;
// if block number is 0, add size1 option
}
}
- res = CAAddBlockOptionImpl(*pdu, block1, COAP_OPTION_BLOCK1, options);
+ res = CAAddBlockOptionImpl(block1, COAP_OPTION_BLOCK1, options);
if (CA_STATUS_OK != res)
{
OIC_LOG(ERROR, TAG, "add has failed");
CARemoveBlockDataFromList(blockID);
return res;
}
+
+ res = CAAddOptionToPDU(*pdu, options);
+ if (CA_STATUS_OK != res)
+ {
+ OIC_LOG(ERROR, TAG, "add has failed");
+ CARemoveBlockDataFromList(blockID);
+ return res;
+ }
+
CALogBlockInfo(block1);
if (!coap_add_block(*pdu, dataLength, (const unsigned char *) info->payload,
return CA_STATUS_OK;
}
-CAResult_t CAAddBlockOptionImpl(coap_pdu_t *pdu, coap_block_t *block, uint8_t blockType,
+CAResult_t CAAddBlockOptionImpl(coap_block_t *block, uint8_t blockType,
coap_list_t **options)
{
OIC_LOG(DEBUG, TAG, "IN-AddBlockOptionImpl");
- VERIFY_NON_NULL(pdu, TAG, "pdu");
VERIFY_NON_NULL(block, TAG, "block");
VERIFY_NON_NULL(options, TAG, "options");
return CA_STATUS_INVALID_PARAM;
}
+ OIC_LOG(DEBUG, TAG, "OUT-AddBlockOptionImpl");
+ return CA_STATUS_OK;
+}
+
+CAResult_t CAAddOptionToPDU(coap_pdu_t *pdu, coap_list_t **options)
+{
// after adding the block option to option list, add option list to pdu.
if (*options)
{
COAP_OPTION_DATA(*(coap_option *) opt->data));
OIC_LOG_V(DEBUG, TAG, "[%d] pdu length", pdu->length);
- coap_add_option(pdu, COAP_OPTION_KEY(*(coap_option *) opt->data),
- COAP_OPTION_LENGTH(*(coap_option *) opt->data),
- COAP_OPTION_DATA(*(coap_option *) opt->data), coap_udp);
+ int ret = coap_add_option(pdu, COAP_OPTION_KEY(*(coap_option *) opt->data),
+ COAP_OPTION_LENGTH(*(coap_option *) opt->data),
+ COAP_OPTION_DATA(*(coap_option *) opt->data), coap_udp);
+ if (!ret)
+ {
+ return CA_STATUS_FAILED;
+ }
}
}
OIC_LOG_V(DEBUG, TAG, "[%d] pdu length after option", pdu->length);
- OIC_LOG(DEBUG, TAG, "OUT-AddBlockOptionImpl");
return CA_STATUS_OK;
}
*totalPayloadLen = coap_decode_var_bytes(COAP_OPT_VALUE(option),
COAP_OPT_LENGTH(option));
- OIC_LOG_V(DEBUG, TAG, "the total payload length to be received is [%d]bytes",
+ OIC_LOG_V(DEBUG, TAG, "the total payload length to be received is [%zu]bytes",
*totalPayloadLen);
return true;
// update received payload length
currData->receivedPayloadLen += blockPayloadLen;
- OIC_LOG_V(DEBUG, TAG, "updated payload: %s, len: %d", currData->payload,
+ OIC_LOG_V(DEBUG, TAG, "updated payload: %s, len: %zu", currData->payload,
currData->receivedPayloadLen);
}
break;
default:
OIC_LOG_V(ERROR, TAG, "there is no Error Code of BWT[%d]", responseResult);
+ return CA_STATUS_FAILED;
}
OIC_LOG(DEBUG, TAG, "OUT-HandleBlockErrorRes");
ca_mutex_unlock(g_context.blockDataListMutex);
OIC_LOG(DEBUG, TAG, "OUT-CAGetTokenFromBlockDataList");
- return CA_STATUS_OK;
+ return CA_STATUS_FAILED;
}
CAResult_t CACheckBlockDataValidation(const CAData_t *sendData, CABlockData_t **blockData)
VERIFY_NON_NULL(sendData, TAG, "sendData");
VERIFY_NON_NULL(blockData, TAG, "blockData");
+ CABlockDataID_t* blockDataID;
+ if(sendData->requestInfo)
+ {
+ blockDataID = CACreateBlockDatablockId(
+ (CAToken_t)sendData->requestInfo->info.token,
+ sendData->requestInfo->info.tokenLength,
+ sendData->remoteEndpoint->port);
+ }
+ else if(sendData->responseInfo)
+ {
+ blockDataID = CACreateBlockDatablockId(
+ (CAToken_t)sendData->responseInfo->info.token,
+ sendData->responseInfo->info.tokenLength,
+ sendData->remoteEndpoint->port);
+ }
+ else
+ {
+ OIC_LOG(ERROR, TAG, "sendData doesn't have requestInfo or responseInfo");
+ return CA_STATUS_FAILED;
+ }
+
+ if (NULL == blockDataID || blockDataID->idLength < 1)
+ {
+ OIC_LOG(ERROR, TAG, "blockId is null");
+ CADestroyBlockID(blockDataID);
+ return CA_STATUS_FAILED;
+ }
+
ca_mutex_lock(g_context.blockDataListMutex);
size_t len = u_arraylist_length(g_context.dataList);
&& currData->blockDataId->idLength > 0
&& NULL != sendData->requestInfo->info.token)
{
- CABlockDataID_t* blockDataID = CACreateBlockDatablockId(
- (CAToken_t)sendData->requestInfo->info.token,
- sendData->requestInfo->info.tokenLength,
- sendData->remoteEndpoint->port);
-
- if(NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
- {
- OIC_LOG(ERROR, TAG, "blockId is null");
- CADestroyBlockID(blockDataID);
- return CA_STATUS_FAILED;
- }
-
if (CABlockidMatches(currData, blockDataID))
{
OIC_LOG(ERROR, TAG, "already sent");
- CADestroyBlockID(blockDataID);
continue;
}
- CADestroyBlockID(blockDataID);
}
}
else if (sendData->responseInfo) // sendData is responseMessage
&& currData->blockDataId->idLength > 0
&& NULL != sendData->responseInfo->info.token)
{
- CABlockDataID_t* blockDataID = CACreateBlockDatablockId(
- (CAToken_t)sendData->responseInfo->info.token,
- sendData->responseInfo->info.tokenLength,
- sendData->remoteEndpoint->port);
-
- if(NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
- {
- OIC_LOG(ERROR, TAG, "blockId is null");
- CADestroyBlockID(blockDataID);
- return CA_STATUS_FAILED;
- }
-
if (CABlockidMatches(currData, blockDataID))
{
// set sendData
}
currData->sentData = CACloneCAData(sendData);
*blockData = currData;
- CADestroyBlockID(blockDataID);
ca_mutex_unlock(g_context.blockDataListMutex);
+ CADestroyBlockID(blockDataID);
return CA_STATUS_OK;
}
- CADestroyBlockID(blockDataID);
}
}
else
}
ca_mutex_unlock(g_context.blockDataListMutex);
+ CADestroyBlockID(blockDataID);
+
return CA_STATUS_FAILED;
}
CABlockDataID_t* blockDataID = CACreateBlockDatablockId(
token, tokenLength,
data->sentData->remoteEndpoint->port);
- if (NULL == blockDataID || NULL == blockDataID->id || blockDataID->idLength < 1)
+ if (NULL == blockDataID || blockDataID->idLength < 1)
{
OIC_LOG(ERROR, TAG, "blockId is null");
CADestroyBlockID(blockDataID);
return CA_STATUS_OK;
}
-bool CAIsBlockDataInList(const CABlockDataID_t *blockID)
-{
- OIC_LOG(DEBUG, TAG, "IN-IsBlockDataInList");
- VERIFY_NON_NULL_RET(blockID, TAG, "blockID", false);
-
- ca_mutex_lock(g_context.blockDataListMutex);
-
- size_t len = u_arraylist_length(g_context.dataList);
- for (size_t i = 0; i < len; i++)
- {
- CABlockData_t *currData = (CABlockData_t *) u_arraylist_get(g_context.dataList, i);
- if (CABlockidMatches(currData, blockID))
- {
- OIC_LOG(DEBUG, TAG, "found block data");
- ca_mutex_unlock(g_context.blockDataListMutex);
- return true;
- }
- }
- ca_mutex_unlock(g_context.blockDataListMutex);
-
- OIC_LOG(DEBUG, TAG, "OUT-IsBlockDataInList");
- return false;
-}
-
void CADestroyDataSet(CAData_t* data)
{
VERIFY_NON_NULL_VOID(data, TAG, "data");
CABlockDataID_t* CACreateBlockDatablockId(const CAToken_t token, uint8_t tokenLength,
uint16_t portNumber)
{
- VERIFY_NON_NULL_RET(token, TAG, "token", NULL);
-
char port[PORT_LENGTH] = {0,};
port[0] = (char)((portNumber>>8) & 0xFF);
port[1] = (char)(portNumber & 0xFF);
return NULL;
}
- memcpy(blockDataID->id, token, tokenLength);
+ if (token)
+ {
+ memcpy(blockDataID->id, token, tokenLength);
+ }
+
memcpy(blockDataID->id + tokenLength, port, sizeof(port));
OIC_LOG(DEBUG, TAG, "BlockID is ");