*/
static int32_t g_numberOfServiceConnected = 0;
-void CAIncrementRegisteredServiceCount()
+/*void CAIncrementRegisteredServiceCount()
{
g_numberOfServiceConnected++;
+}*/
+
+CAResult_t CAAddLEDataToList(LEDataList **dataList, const void *data, uint32_t dataLength)
+{
+ OIC_LOG(DEBUG, TAG, "IN");
+
+ VERIFY_NON_NULL(dataList, TAG, "Data list is null");
+ VERIFY_NON_NULL(data, TAG, "data is null");
+
+ if (0 == dataLength)
+ {
+ OIC_LOG(ERROR, TAG, "Invalid input: data length is zero!");
+ return CA_STATUS_INVALID_PARAM;
+ }
+
+ LEDataList *pending_data = (LEDataList *) OICMalloc(sizeof(LEDataList));
+ if (NULL == pending_data)
+ {
+ OIC_LOG(ERROR, TAG, "OICMalloc failed (data list)!");
+ return CA_MEMORY_ALLOC_FAILED;
+ }
+
+ pending_data->data = (LEData *) OICMalloc(sizeof(LEData));
+ if (NULL == pending_data->data)
+ {
+ OIC_LOG(ERROR, TAG, "OICMalloc failed (data node)!");
+ OICFree(pending_data);
+ return CA_MEMORY_ALLOC_FAILED;
+ }
+
+ pending_data->next = NULL;
+ pending_data->data->data = (void *) OICMalloc(dataLength); //data
+ if (NULL == pending_data->data->data)
+ {
+ OIC_LOG(ERROR, TAG, "OICMalloc failed (data)!");
+ OICFree(pending_data->data);
+ OICFree(pending_data);
+ return CA_MEMORY_ALLOC_FAILED;
+ }
+
+ memcpy(pending_data->data->data, data, dataLength);
+ pending_data->data->dataLength = dataLength;
+
+ if (NULL == *dataList)
+ {
+ *dataList = pending_data;
+ }
+ else
+ {
+ LEDataList *curNode = *dataList;
+ while (curNode->next != NULL)
+ {
+ curNode = curNode->next;
+ }
+ curNode->next = pending_data;
+ }
+
+ OIC_LOG(DEBUG, TAG, "OUT");
+ return CA_STATUS_OK;
}
-void CADecrementRegisteredServiceCount()
+
+void CARemoveLEDataFromList(LEDataList **dataList)
{
- g_numberOfServiceConnected--;
+ OIC_LOG(DEBUG, TAG, "IN");
+
+ VERIFY_NON_NULL_VOID(dataList, TAG, "Data list is null");
+
+ if (*dataList)
+ {
+ LEDataList *curNode = *dataList;
+ *dataList = (*dataList)->next;
+
+ //Delete the first node
+ CADestroyLEData(curNode->data);
+ OICFree(curNode);
+ }
+
+ OIC_LOG(DEBUG, TAG, "OUT");
}
-void CAResetRegisteredServiceCount()
+void CADestroyLEDataList(LEDataList **dataList)
{
- g_numberOfServiceConnected = 0;
+ OIC_LOG(DEBUG, TAG, "IN");
+
+ VERIFY_NON_NULL_VOID(dataList, TAG, "Data list is null");
+
+ while (*dataList)
+ {
+ LEDataList *curNode = *dataList;
+ *dataList = (*dataList)->next;
+
+ CADestroyLEData(curNode->data);
+ OICFree(curNode);
+ }
+
+ *dataList = NULL;
+
+ OIC_LOG(DEBUG, TAG, "OUT");
}
-int32_t CAGetRegisteredServiceCount()
+void CADestroyLEData(LEData *data)
{
- return g_numberOfServiceConnected ;
+ if (data)
+ {
+ OICFree(data->data);
+ OICFree(data);
+ }
}
CAResult_t CAAddLEServerInfoToList(LEServerInfoList **serverList,
LEServerInfoList *node = (LEServerInfoList *) OICCalloc(1, sizeof(LEServerInfoList));
if (NULL == node)
{
- OIC_LOG(ERROR, TAG, "Malloc failed!");
+ OIC_LOG(ERROR, TAG, "Calloc failed!");
return CA_STATUS_FAILED;
}
*serverList = node;
}
- CAIncrementRegisteredServiceCount();
-
OIC_LOG_V(DEBUG, TAG, "Device [%s] added to list",
leServerInfo->remoteAddress);
{
prev->next = temp->next;
}
- CADecrementRegisteredServiceCount();
- bt_gatt_client_destroy(temp->serverInfo->clientHandle);
- OICFree(temp->serverInfo->remoteAddress);
- OICFree(temp->serverInfo);
+
+ CAFreeLEServerInfo(temp->serverInfo);
OICFree(temp);
OIC_LOG_V(DEBUG, TAG, "Device [%s] removed from list", remoteAddress);
break;
OIC_LOG(DEBUG, TAG, "IN");
- VERIFY_NON_NULL(serverList, TAG, "clientList");
VERIFY_NON_NULL(leServerInfo, TAG, "leClientInfo");
VERIFY_NON_NULL(leAddress, TAG, "leAddress");
+ if (NULL == serverList)
+ {
+ OIC_LOG(DEBUG, TAG, "Server list is empty");
+ return CA_STATUS_FAILED;
+ }
+
LEServerInfoList *cur = serverList;
*leServerInfo = NULL;
while (cur != NULL)
return CA_STATUS_FAILED;
}
-CAResult_t CAGetLEServerInfoByPosition(LEServerInfoList *serverList, int32_t position,
- LEServerInfo **leServerInfo)
-{
- OIC_LOG(DEBUG, TAG, "IN");
- VERIFY_NON_NULL(serverList, TAG, "clientList");
- VERIFY_NON_NULL(leServerInfo, TAG, "leClientInfo");
-
- if (0 > position)
- {
- OIC_LOG(ERROR, TAG, "Position Invalid input !");
- return CA_STATUS_INVALID_PARAM;
- }
-
- *leServerInfo = NULL;
- int32_t count = 0;
- LEServerInfoList *cur = serverList;
- while (cur != NULL)
- {
- if (position == count)
- {
- *leServerInfo = cur->serverInfo;
- OIC_LOG(DEBUG, TAG, "OUT");
- return CA_STATUS_OK;
- }
- count++;
- cur = cur->next;
- }
- OIC_LOG(DEBUG, TAG, "Client info not found for the position");
- return CA_STATUS_FAILED;
-}
void CAFreeLEServerList(LEServerInfoList *serverList)
{
OIC_LOG(DEBUG, TAG, "IN");
if (leServerInfo)
{
- if (leServerInfo->remoteAddress)
+ if (leServerInfo->clientHandle)
{
bt_gatt_client_destroy(leServerInfo->clientHandle);
- int32_t ret = bt_gatt_disconnect(leServerInfo->remoteAddress);
+ }
+
+ if (leServerInfo->pendingDataList)
+ {
+ CADestroyLEDataList(&(leServerInfo->pendingDataList));
+ }
+
+ if (leServerInfo->status > LE_STATUS_CONNECTED)
+ { int32_t ret = bt_gatt_disconnect(leServerInfo->remoteAddress);
if (BT_ERROR_NONE != ret)
{
ret);
return;
}
- OICFree(leServerInfo->remoteAddress);
}
+ OICFree(leServerInfo->remoteAddress);
OICFree(leServerInfo);
}
OIC_LOG(DEBUG, TAG, "OUT");
}
node->remoteAddress= clientAddress;
+ node->mtuSize = 0;
node->next = NULL;
if (*clientList == NULL) // Empty list
return CA_STATUS_OK;
}
+uint16_t CAClientInfoGetMTUSize(LEClientInfoList *clientList,
+ const char *clientAddress)
+{
+ OIC_LOG(DEBUG, TAG, "IN");
+
+ LEClientInfoList *temp = clientList;
+ while (temp)
+ {
+ if (!strcasecmp(temp->remoteAddress, clientAddress))
+ {
+ return temp->mtuSize;
+ }
+ temp = temp->next;
+ }
+
+ OIC_LOG(DEBUG, TAG, "OUT");
+ return 0;
+}
+
+CAResult_t CAClientInfoUpdateMTUSize(LEClientInfoList *clientList,
+ const char *clientAddress,uint16_t mtu_size)
+{
+ OIC_LOG(DEBUG, TAG, "IN");
+
+ LEClientInfoList *temp = clientList;
+ while (temp)
+ {
+ if (!strcasecmp(temp->remoteAddress, clientAddress))
+ {
+ temp->mtuSize = mtu_size;
+ return CA_STATUS_OK;
+ }
+ temp = temp->next;
+ }
+
+ OIC_LOG(DEBUG, TAG, "OUT");
+ return CA_STATUS_FAILED;
+}
+
CAResult_t CAIsLEClientInfoInList(LEClientInfoList *clientList,
const char *clientAddress)
{