[ARDUINO] Fixed heap corruption and build issues
authorAbhishek Sharma <ce.abhishek@samsung.com>
Mon, 20 Jul 2015 14:57:56 +0000 (20:27 +0530)
committerErich Keane <erich.keane@intel.com>
Mon, 20 Jul 2015 16:33:37 +0000 (16:33 +0000)
1) Fixed heap corruption in le adapter
2) Fixed build issues on enabling OIC_LOG_V
3) Deleting unnecessary files added by IPV6 merge

Change-Id: Ia7cc7782771f2e76c1a7927a376f866ade0f927d
Signed-off-by: Abhishek Sharma <ce.abhishek@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/1760
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Joseph Morrow <joseph.l.morrow@intel.com>
Reviewed-by: Erich Keane <erich.keane@intel.com>
resource/csdk/connectivity/samples/arduino/casample.cpp
resource/csdk/connectivity/src/bt_le_adapter/arduino/cableserver.cpp
resource/csdk/connectivity/src/bt_le_adapter/caleadapter_singlethread.c [deleted file]
resource/csdk/connectivity/src/camessagehandler_singlethread.c
resource/csdk/connectivity/src/ip_adapter/arduino/caipnwmonitor_eth.cpp
resource/csdk/connectivity/src/ip_adapter/arduino/caipnwmonitor_wifi.cpp
resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_eth.cpp
resource/csdk/connectivity/src/ip_adapter/arduino/caipserver_wifi.cpp

index 165796e..3d5c961 100644 (file)
@@ -349,6 +349,7 @@ void SendRequest()
     requestData.token = token;
     requestData.tokenLength = tokenLength;
     requestData.payload = (CAPayload_t)"Json Payload";
+    requestData.payloadSize = strlen((const char *) requestData.payload);
 
     requestData.type = msgType;
     requestData.resourceUri = (char *)OICMalloc(strlen(resourceUri) + 1);
@@ -406,7 +407,7 @@ void SendRequestAll()
 
     // create remote endpoint
     CAEndpoint_t *endpoint = NULL;
-    CAResult_t res = CACreateEndpoint(CA_DEFAULT_FLAGS, selectedNetwork, address, atoi(port),
+    CAResult_t res = CACreateEndpoint(CA_IPV4, selectedNetwork, address, atoi(port),
                                         &endpoint);
 
     if (res != CA_STATUS_OK)
@@ -433,6 +434,7 @@ void SendRequestAll()
     requestData.token = token;
     requestData.tokenLength = tokenLength;
     requestData.payload = (CAPayload_t)"Temp Json Payload";
+    requestData.payloadSize = strlen((const char *) requestData.payload);
     requestData.type = CA_MSG_NONCONFIRM;
     requestData.resourceUri = (char *)OICMalloc(strlen(resourceUri) + 1);
     strcpy(requestData.resourceUri, resourceUri);
@@ -513,6 +515,7 @@ void SendNotification()
     respondData.token = token;
     respondData.tokenLength = tokenLength;
     respondData.payload = (CAPayload_t)"Notification Data";
+    respondData.payloadSize = strlen((const char *) respondData.payload);
     respondData.resourceUri = (char *)OICMalloc(strlen(resourceUri) + 1);
     strcpy(respondData.resourceUri, resourceUri);
 
@@ -705,6 +708,8 @@ void RequestHandler(const CAEndpoint_t *object, const CARequestInfo_t *requestIn
     Serial.println(requestInfo->info.resourceUri);
     Serial.print("data: ");
     Serial.println((char*)requestInfo->info.payload);
+    Serial.print("data size: ");
+    Serial.println(requestInfo->info.payloadSize);
     Serial.print("Type: ");
     Serial.println(requestInfo->info.type);
 
@@ -740,6 +745,8 @@ void ResponseHandler(const CAEndpoint_t *object, const CAResponseInfo_t *respons
         Serial.println(responseInfo->info.resourceUri);
         Serial.print("data: ");
         Serial.println((char*)responseInfo->info.payload);
+        Serial.print("data size: ");
+        Serial.println(responseInfo->info.payloadSize);
         Serial.print("Type: ");
         Serial.println(responseInfo->info.type);
         Serial.print("res result=");
@@ -839,6 +846,7 @@ void SendResponse(CAEndpoint_t *endpoint, const CAInfo_t* info)
         responseData.token = (info != NULL) ? info->token : NULL;
         responseData.tokenLength = (info != NULL) ? info->tokenLength : 0;
         responseData.payload = reinterpret_cast<CAPayload_t>(const_cast<char*>("response payload"));
+        responseData.payloadSize = strlen((const char *) responseData.payload);
     }
     CAResponseInfo_t responseInfo = {CA_BAD_REQ, {CA_MSG_RESET}};
     responseInfo.result = static_cast<CAResponseResult_t>(respCode);
index 57fcc84..74f9b14 100644 (file)
@@ -111,13 +111,13 @@ void CACheckLEDataInternal()
                 if (g_receivedDataLen > 0)
                 {
                     OIC_LOG_V(DEBUG, TAG, "recv dataLen=%d", g_receivedDataLen);
-                    //CANotifyCallback((void *)g_coapBuffer, g_dataLen, "", 0);
                     uint32_t sentLength = 0;
+                    // g_coapBuffer getting freed by CAMesssageHandler
                     g_bleServerDataReceivedCallback("", "", g_coapBuffer,
                                                     g_receivedDataLen, &sentLength);
                 }
+
                 g_receivedDataLen = 0;
-                OICFree(g_coapBuffer);
                 g_coapBuffer = NULL;
                 break;
             }
diff --git a/resource/csdk/connectivity/src/bt_le_adapter/caleadapter_singlethread.c b/resource/csdk/connectivity/src/bt_le_adapter/caleadapter_singlethread.c
deleted file mode 100644 (file)
index cdedbbd..0000000
+++ /dev/null
@@ -1,427 +0,0 @@
-/******************************************************************
-*
-* Copyright 2014 Samsung Electronics All Rights Reserved.
-*
-*
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*      http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-******************************************************************/
-#include "caleadapter_singlethread.h"
-
-#include "caleinterface_singlethread.h"
-#include "cableserver.h"
-#include "logger.h"
-#include "caadapterutils.h"
-#include "cafragmentation.h"
-
-#define TAG "LAD"
-
-/**
- * @def MAX_EVENT_COUNT
- * @brief Maximum number of tries to get the event on BLE Shield address.
- */
-#define MAX_EVENT_COUNT 20
-
-static CANetworkChangeCallback g_networkCallback = NULL;
-static bool g_serverRunning = false;
-static CANetworkPacketReceivedCallback g_respCallback;
-static char *g_coapBuffer = NULL;
-static uint32_t g_dataLen = 0;
-static uint32_t g_packetDataLen = 0;
-
-/**
- * @brief API to register for BLE network notification.
- * @param net_callback - network notification callback.
- * @return - Error Code
- */
-CAResult_t LERegisterNetworkNotifications(CANetworkChangeCallback netCallback);
-
-/**
- * @brief API to send received data to upper layer.
- * @param[in] data - data received from BLE characteristics.
- * @param[in] dataLen - received data Length.
- * @param[in] senderAdrs - sender Address.
- * @param[in] senderPort - sender port.
- * @return - Error Code
- */
-void CANotifyCallback(const void *data, int32_t dataLen, const char *senderAdrs,
-                      int32_t senderPort);
-
-/**
- * @brief API to read the data from characteristics and invoke notifyCallback.
- * @return - void
- */
-void CACheckData();
-
-/**
- * @brief API to Send the data.
- * @return - Number of bytes sent. -1 on error.
- */
-int32_t CASendLEData(const void *data, uint32_t dataLen);
-
-CAResult_t CAInitializeLE(CARegisterConnectivityCallback registerCallback,
-                          CANetworkPacketReceivedCallback reqRespCallback,
-                          CANetworkChangeCallback netCallback)
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    if (NULL == registerCallback || NULL == reqRespCallback || NULL == netCallback)
-    {
-        OIC_LOG(ERROR, TAG, "i/p null");
-        return CA_STATUS_INVALID_PARAM;
-    }
-
-    CAResult_t result = CALEInitializeNetworkMonitor();
-    if (CA_STATUS_OK != result)
-    {
-        OIC_LOG_V(ERROR, TAG, "n/w init fail: %d", result);
-        return CA_STATUS_FAILED;
-    }
-
-    g_respCallback = reqRespCallback;
-    LERegisterNetworkNotifications(netCallback);
-    CAConnectivityHandler_t connHandler;
-    connHandler.startAdapter = CAStartLE;
-    connHandler.startListenServer = CAStartLEListeningServer;
-    connHandler.startDiscoveryServer = CAStartLEDiscoveryServer;
-    connHandler.sendData = CASendLEUnicastData;
-    connHandler.sendDataToAll = CASendLEMulticastData;
-    connHandler.GetnetInfo = CAGetLEInterfaceInformation;
-    connHandler.readData = CAReadLEData;
-    connHandler.stopAdapter = CAStopLE;
-    connHandler.terminate = CATerminateLE;
-    registerCallback(connHandler, CA_ADAPTER_GATT_BTLE);
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-CAResult_t CAStartLE()
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-CAResult_t CAStartLEListeningServer()
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    CAResult_t result = CAInitializeBle();
-    if (CA_STATUS_OK != result)
-    {
-        OIC_LOG_V(ERROR, TAG, "ble init fail: %d", result);
-        return CA_STATUS_FAILED;
-    }
-    /**
-     * Below for loop is to process the BLE Events received from BLE Shield.
-     * BLE Events includes BLE Shield Address Added as a patch to RBL Library.
-     */
-    for (int iter = 0; iter < MAX_EVENT_COUNT; iter++)
-    {
-        CACheckData();
-    }
-
-    g_serverRunning = true;
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-CAResult_t CAStartLEDiscoveryServer()
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-CAResult_t CAStartLENotifyServer()
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-uint32_t CASendLENotification(const CAEndpoint_t *endpoint, const void *data,
-                              uint32_t dataLen)
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return 1;
-}
-
-int32_t CASendLEUnicastData(const CAEndpoint_t *remoteEndpoint, const void *data, uint32_t dataLen)
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    if (NULL == remoteEndpoint || NULL == data || dataLen == 0)
-    {
-        OIC_LOG(ERROR, TAG, "i/p null");
-        return -1;
-    }
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CASendLEData(data, dataLen);
-}
-
-int32_t CASendLEMulticastData(const void *data, uint32_t dataLen)
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    if (NULL == data || 0 == dataLen)
-    {
-        OIC_LOG(ERROR, TAG, "i/p null");
-        return -1;
-    }
-
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CASendLEData(data, dataLen);
-}
-
-CAResult_t CAGetLEInterfaceInformation(CAEndpoint_t **info, uint32_t *size)
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-
-    if (NULL == info || NULL == size)
-    {
-        OIC_LOG(ERROR, TAG, "i/p null");
-        return CA_STATUS_INVALID_PARAM;
-    }
-
-    char *leAddress = NULL;
-    CAResult_t res = CAGetLEAddress(&leAddress);
-    if (CA_STATUS_OK != res)
-    {
-        OIC_LOG(ERROR, TAG, "CAGetLEAddress has failed");
-        return res;
-    }
-
-    if (NULL == leAddress)
-    {
-        OIC_LOG(ERROR, TAG, "Failed to get Le addr");
-        return CA_STATUS_FAILED;
-    }
-
-    OIC_LOG_V(DEBUG, TAG, "leAddress = %s", leAddress);
-
-    /**
-     * Create local endpoint using util function
-     */
-    (*info) = CAAdapterCreateEndpoint(CA_DEFAULT_FLAGS, CA_ADAPTER_GATT_BTLE, leAddress, 0);
-    if (NULL == (*info))
-    {
-        OIC_LOG(ERROR, TAG, "malloc fail");
-        return CA_MEMORY_ALLOC_FAILED;
-    }
-
-    (*size) = 1;
-    if (*leAddress)
-    {
-        OICFree(leAddress);
-    }
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-CAResult_t CAReadLEData()
-{
-    if (true == g_serverRunning)
-    {
-        CACheckData();
-    }
-    return CA_STATUS_OK;
-}
-
-CAResult_t CAStopLE()
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    CAStopBleGattServer();
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-void CATerminateLE()
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    g_respCallback = NULL;
-    LERegisterNetworkNotifications(NULL);
-    CAResult_t result = CATerminateBle();
-    if (CA_STATUS_OK != result)
-    {
-        OIC_LOG(ERROR, TAG, "ble terminate fail");
-        return;
-    }
-
-    CALETerminateNetworkMonitor();
-    g_serverRunning = false;
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return;
-}
-
-CAResult_t LERegisterNetworkNotifications(CANetworkChangeCallback netCallback)
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    g_networkCallback = netCallback;
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-CAResult_t CAStartBleGattServer()
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    // Done at time of setup i.e. in initializeBle api
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-CAResult_t CAStopBleGattServer()
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    // There is no server running to stop.
-    OIC_LOG(DEBUG, TAG, "OUT");
-    return CA_STATUS_OK;
-}
-
-void CANotifyCallback(const void *data, int32_t dataLen, const char *senderAdrs, int32_t senderPort)
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    if (g_respCallback)
-    {
-
-        /* Cannot get Address as of now */
-        CAEndpoint_t *localEndpoint = CAAdapterCreateLocalEndpoint(CA_IPV4, CA_ADAPTER_GATT_BTLE,
-                                                                   senderAdrs, senderPort);
-
-        g_respCallback(localEndpoint, data, dataLen);
-    }
-    OIC_LOG(DEBUG, TAG, "OUT");
-}
-
-void CACheckData()
-{
-    CABleDoEvents();
-
-    if (CAIsBleDataAvailable())
-    {
-        // Allocate Memory for COAP Buffer and do ParseHeader
-        if (NULL == g_coapBuffer)
-        {
-            OIC_LOG(DEBUG, TAG, "IN");
-            char headerArray[CA_HEADER_LENGTH] = "";
-            while (CAIsBleDataAvailable() && g_dataLen < CA_HEADER_LENGTH)
-            {
-                headerArray[g_dataLen++] = CAReadBleData();
-            }
-
-            g_packetDataLen = CAParseHeader(headerArray);
-
-            if (g_packetDataLen > COAP_MAX_PDU_SIZE)
-            {
-                OIC_LOG(ERROR, TAG, "len > pdu_size");
-                return;
-            }
-
-            g_coapBuffer = (char *)OICCalloc((size_t)g_packetDataLen, sizeof(char));
-            if (NULL == g_coapBuffer)
-            {
-                OIC_LOG(ERROR, TAG, "malloc");
-                return;
-            }
-
-            OIC_LOG(DEBUG, TAG, "OUT");
-            g_dataLen = 0;
-        }
-
-        OIC_LOG(DEBUG, TAG, "IN");
-        while (CAIsBleDataAvailable())
-        {
-            OIC_LOG(DEBUG, TAG, "In While loop");
-            g_coapBuffer[g_dataLen++] = CAReadBleData();
-            if (g_dataLen == g_packetDataLen)
-            {
-                OIC_LOG(DEBUG, TAG, "Read Comp BLE Pckt");
-                g_coapBuffer[g_dataLen] = '\0';
-                if (g_dataLen > 0)
-                {
-                    OIC_LOG_V(DEBUG, TAG, "recv dataLen=%d", g_dataLen);
-                    CANotifyCallback((void *)g_coapBuffer, g_dataLen, "", 0);
-                }
-                g_dataLen = 0;
-                OICFree(g_coapBuffer);
-                g_coapBuffer = NULL;
-                break;
-            }
-        }
-        OIC_LOG(DEBUG, TAG, "OUT");
-    }
-    else
-    {
-        OIC_LOG(DEBUG, TAG, "NoData");
-    }
-    return;
-}
-
-int32_t CASendLEData(const void *data, uint32_t dataLen)
-{
-    OIC_LOG(DEBUG, TAG, "IN");
-    char header[CA_HEADER_LENGTH] = {0};
-
-    CAResult_t result = CAGenerateHeader(header, dataLen);
-
-    if (CA_STATUS_OK != result)
-    {
-        OIC_LOG(ERROR, TAG, "Generate header failed");
-        return -1;
-    }
-
-    if (!CAIsBleConnected())
-    {
-        OIC_LOG(ERROR, TAG, "le not conn");
-        return -1;
-    }
-
-    result = CAUpdateCharacteristicsToAllGattClients(header, CA_HEADER_LENGTH);
-    if (CA_STATUS_OK != result)
-    {
-        OIC_LOG(ERROR, TAG, "Update characteristics failed");
-        return -1;
-    }
-
-    int32_t dataLimit = dataLen / CA_SUPPORTED_BLE_MTU_SIZE;
-    for (int32_t iter = 0; iter < dataLimit; iter++)
-    {
-        result = CAUpdateCharacteristicsToAllGattClients((data +
-                                                         (iter * CA_SUPPORTED_BLE_MTU_SIZE)),
-                                                         CA_SUPPORTED_BLE_MTU_SIZE);
-        if (CA_STATUS_OK != result)
-        {
-            OIC_LOG(ERROR, TAG, "Update characteristics failed");
-            return -1;
-        }
-        CABleDoEvents();
-    }
-
-    uint8_t remainingLen = dataLen % CA_SUPPORTED_BLE_MTU_SIZE;
-    if(remainingLen)
-    {
-        result = CAUpdateCharacteristicsToAllGattClients((data +
-                                                         (dataLimit * CA_SUPPORTED_BLE_MTU_SIZE)),
-                                                         remainingLen);
-        if (CA_STATUS_OK != result)
-        {
-            OIC_LOG(ERROR, TAG, "Update characteristics failed");
-            return -1;
-        }
-        CABleDoEvents();
-    }
-
-    OIC_LOG(DEBUG, TAG, "writebytes done");
-    OIC_LOG(DEBUG, TAG, "OUT");
-    // Arduino BLEWrite doesnot return value. So, Return the received DataLength
-    return dataLen;
-}
-
index 19ea3c0..a5c1293 100644 (file)
@@ -152,7 +152,7 @@ static void CAProcessData(const CAData_t *data)
         }
         else
         {
-            OIC_LOG_V(ERROR,TAG,"Failed to Generate Unicast PDU");
+            OIC_LOG(ERROR,TAG, "Failed to Generate Unicast PDU");
             return;
         }
     }
index 1e8c208..afedf68 100644 (file)
@@ -69,7 +69,7 @@ u_arraylist_t *CAIPGetInterfaceInformation(int desiredIndex)
     u_arraylist_t *iflist = u_arraylist_create();
     if (!iflist)
     {
-        OIC_LOG_V(ERROR, TAG, "Failed to create iflist: %s", strerror(errno));
+        OIC_LOG(ERROR, TAG, "Failed to create iflist");
         return NULL;
     }
 
index cc79fc9..e137f15 100644 (file)
@@ -73,7 +73,7 @@ u_arraylist_t *CAIPGetInterfaceInformation(int desiredIndex)
     u_arraylist_t *iflist = u_arraylist_create();
     if (!iflist)
     {
-        OIC_LOG_V(ERROR, TAG, "Failed to create iflist: %s", strerror(errno));
+        OIC_LOG(ERROR, TAG, "Failed to create iflist");
         return NULL;
     }
 
index 5adb1a2..09098dc 100644 (file)
@@ -145,7 +145,7 @@ CAResult_t CAIPStartServer()
     ret = CAIPStartMulticastServer("0.0.0.0", "224.0.1.187", 5683);
     if (CA_STATUS_OK != ret)
     {
-        OIC_LOG_V(ERROR, IP_ADAPTER_TAG, "Start multicast failed[%d]", ret);
+        OIC_LOG_V(ERROR, TAG, "Start multicast failed[%d]", ret);
     }
     return ret;
 }
@@ -312,7 +312,7 @@ CAResult_t CAGetIPInterfaceInformation(CAEndpoint_t **info, uint32_t *size)
     u_arraylist_t *iflist = CAIPGetInterfaceInformation(0);
     if (!iflist)
     {
-        OIC_LOG_V(ERROR, TAG, "get interface info failed: %s", strerror(errno));
+        OIC_LOG(ERROR, TAG, "get interface info failed");
         return CA_STATUS_FAILED;
     }
 
index 3b982a5..153dc52 100644 (file)
@@ -135,7 +135,7 @@ CAResult_t CAIPStartServer()
     ret = CAIPStartMulticastServer("0.0.0.0", "224.0.1.187", 5683);
     if (CA_STATUS_OK != ret)
     {
-        OIC_LOG_V(ERROR, IP_ADAPTER_TAG, "Start multicast failed[%d]", ret);
+        OIC_LOG_V(ERROR, TAG, "Start multicast failed[%d]", ret);
     }
     return ret;
 }
@@ -256,7 +256,7 @@ CAResult_t CAGetIPInterfaceInformation(CAEndpoint_t **info, uint32_t *size)
     u_arraylist_t *iflist = CAIPGetInterfaceInformation(0);
     if (!iflist)
     {
-        OIC_LOG_V(ERROR, TAG, "get interface info failed: %s", strerror(errno));
+        OIC_LOG(ERROR, TAG, "get interface info failed");
         return CA_STATUS_FAILED;
     }