Avoid CA IP NW monitor code duplications. 91/218791/1
authorSenthil Kumar G S <senthil.gs@samsung.com>
Mon, 18 Nov 2019 10:47:41 +0000 (16:17 +0530)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Thu, 28 Nov 2019 07:22:06 +0000 (16:22 +0900)
Code duplications in CA IP Network Monitor reported by Sonarqube
has been addressed in this patch.

https://github.sec.samsung.net/RS7-IOTIVITY/IoTivity/commit/983a7d1076abb25b82321bed2fb5c4fa07da8389
(cherry-picked from 983a7d1076abb25b82321bed2fb5c4fa07da8389)

Change-Id: I801c5bb382f6beb05164d98653b2d309c6282d7c
Signed-off-by: Senthil Kumar G S <senthil.gs@samsung.com>
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
resource/csdk/connectivity/src/ip_adapter/SConscript
resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c
resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c [new file with mode: 0644]
resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h [new file with mode: 0644]
resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c
resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c
resource/csdk/connectivity/src/ip_adapter/windows/caipnwmonitor.c

index 8cb1cbb..0864b31 100644 (file)
@@ -21,7 +21,10 @@ if target_os == 'arduino':
 else:
     common_files = [
         os.path.join(src_dir, 'caipadapter.c'),
-       os.path.join(src_dir, 'caipserver.c') ]
+        os.path.join(src_dir, 'caipserver.c'),
+        os.path.join(src_dir, 'caipnwmonitor_common.c') ]
+
+env.AppendUnique(CPPPATH = [ src_dir ])
 
 # Get list of target-specific source file base names, i.e. no parent
 # directories prepended to the path.
index 2c451f6..05cddc7 100644 (file)
@@ -36,6 +36,7 @@
 
 #include "caadapterutils.h"
 #include "caipnwmonitor.h"
+#include "caipnwmonitor_common.h"
 #include "logger.h"
 #include "oic_malloc.h"
 #include "oic_string.h"
@@ -127,71 +128,20 @@ CAResult_t CAIPStopNetworkMonitor(CATransportAdapter_t adapter)
     return CA_STATUS_OK;
 }
 
-int CAGetPollingInterval(int interval)
-{
-    return interval;
-}
-
 static void CAIPPassNetworkChangesToAdapter(CANetworkStatus_t status)
 {
-    CAIPCBData_t *cbitem = NULL;
-    LL_FOREACH(g_adapterCallbackList, cbitem)
-    {
-        if (cbitem && cbitem->adapter)
-        {
-            cbitem->callback(cbitem->adapter, status);
-        }
-    }
+    CAIPPassNetworkChangesToAdapterInternal(status, g_adapterCallbackList, CA_IP_NW_COMMON_ANDROID);
 }
 
 CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback,
                                          CATransportAdapter_t adapter)
 {
-    if (!callback)
-    {
-        OIC_LOG(ERROR, TAG, "callback is null");
-        return CA_STATUS_INVALID_PARAM;
-    }
-
-    CAIPCBData_t *cbitem = NULL;
-    LL_FOREACH(g_adapterCallbackList, cbitem)
-    {
-        if (cbitem && adapter == cbitem->adapter && callback == cbitem->callback)
-        {
-            OIC_LOG(DEBUG, TAG, "this callback is already added");
-            return CA_STATUS_OK;
-        }
-    }
-
-    cbitem = (CAIPCBData_t *)OICCalloc(1, sizeof(*cbitem));
-    if (!cbitem)
-    {
-        OIC_LOG(ERROR, TAG, "Malloc failed");
-        return CA_STATUS_FAILED;
-    }
-
-    cbitem->adapter = adapter;
-    cbitem->callback = callback;
-    LL_APPEND(g_adapterCallbackList, cbitem);
-
-    return CA_STATUS_OK;
+    return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList);
 }
 
 CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter)
 {
-    CAIPCBData_t *cbitem = NULL;
-    CAIPCBData_t *tmpCbitem = NULL;
-    LL_FOREACH_SAFE(g_adapterCallbackList, cbitem, tmpCbitem)
-    {
-        if (cbitem && adapter == cbitem->adapter)
-        {
-            OIC_LOG(DEBUG, TAG, "remove specific callback");
-            LL_DELETE(g_adapterCallbackList, cbitem);
-            OICFree(cbitem);
-            return CA_STATUS_OK;
-        }
-    }
-    return CA_STATUS_OK;
+    return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList);
 }
 
 u_arraylist_t *CAFindInterfaceChange()
diff --git a/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c b/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c
new file mode 100644 (file)
index 0000000..1fcb957
--- /dev/null
@@ -0,0 +1,105 @@
+/******************************************************************
+*
+* Copyright 2019 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 "caipnwmonitor.h"
+#include "caipnwmonitor_common.h"
+
+#include "utlist.h"
+#include "logger.h"
+
+#define TAG "OIC_CA_IP_MONITOR_COMMON"
+
+/**
+ * @todo For Windows platform: Implement network interface monitoring.
+ * Not used in win32, but caipserver currently requires this function
+ * be defined. not critical.
+ */
+int CAGetPollingInterval(int interval)
+{
+    return interval;
+}
+
+void CAIPPassNetworkChangesToAdapterInternal(CANetworkStatus_t status,
+    CAIPCBData_t *adapterCallbackList, CAIPAdapterPlatform_t platform)
+{
+    CAIPCBData_t *cbitem = NULL;
+    LL_FOREACH(adapterCallbackList, cbitem)
+    {
+        if (cbitem && cbitem->adapter)
+        {
+            cbitem->callback(cbitem->adapter, status);
+            if (platform == CA_IP_NW_COMMON_LINUX)
+            {
+                CALogAdapterStateInfo(cbitem->adapter, status);
+            }
+        }
+    }
+}
+
+CAResult_t CAIPSetNetworkMonitorCallbackInternal(CAIPAdapterStateChangeCallback callback,
+                                         CATransportAdapter_t adapter, CAIPCBData_t *adapterCallbackList)
+{
+    if (!callback)
+    {
+        OIC_LOG(ERROR, TAG, "callback is null");
+        return CA_STATUS_INVALID_PARAM;
+    }
+
+    CAIPCBData_t *cbitem = NULL;
+    LL_FOREACH(adapterCallbackList, cbitem)
+    {
+        if (cbitem && adapter == cbitem->adapter && callback == cbitem->callback)
+        {
+            OIC_LOG(DEBUG, TAG, "this callback is already added");
+            return CA_STATUS_OK;
+        }
+    }
+
+    cbitem = (CAIPCBData_t *)OICCalloc(1, sizeof(*cbitem));
+    if (!cbitem)
+    {
+        OIC_LOG(ERROR, TAG, "Malloc failed");
+        return CA_STATUS_FAILED;
+    }
+
+    cbitem->adapter = adapter;
+    cbitem->callback = callback;
+    LL_APPEND(adapterCallbackList, cbitem);
+
+    return CA_STATUS_OK;
+}
+
+CAResult_t CAIPUnSetNetworkMonitorCallbackInternal(CATransportAdapter_t adapter,
+                                         CAIPCBData_t *adapterCallbackList)
+{
+    CAIPCBData_t *cbitem = NULL;
+    CAIPCBData_t *tmpCbitem = NULL;
+    LL_FOREACH_SAFE(adapterCallbackList, cbitem, tmpCbitem)
+    {
+        if (cbitem && adapter == cbitem->adapter)
+        {
+            OIC_LOG(DEBUG, TAG, "remove specific callback");
+            LL_DELETE(adapterCallbackList, cbitem);
+            OICFree(cbitem);
+            return CA_STATUS_OK;
+        }
+    }
+    return CA_STATUS_OK;
+}
diff --git a/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h b/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h
new file mode 100644 (file)
index 0000000..949d0fa
--- /dev/null
@@ -0,0 +1,61 @@
+/******************************************************************
+ *
+ * Copyright 2019 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.
+ *
+ ******************************************************************/
+
+/**
+ * @file caipnwmonitor_common.h
+ * This file provides common APIs of IP network monitor modules.
+ */
+
+#ifndef CA_IP_NW_INTERFACE_COMMON_H_
+#define CA_IP_NW_INTERFACE_COMMON_H_
+
+#include "cacommon.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ * Enum for defining different platforms for internal usage.
+ */
+typedef enum
+{
+    CA_IP_NW_COMMON_ANDROID = 0,
+    CA_IP_NW_COMMON_LINUX,
+    CA_IP_NW_COMMON_TIZEN,
+    CA_IP_NW_COMMON_TIZENRT,
+    CA_IP_NW_COMMON_WINDOWS
+} CAIPAdapterPlatform_t;
+
+void CAIPPassNetworkChangesToAdapterInternal(CANetworkStatus_t status,
+                                         CAIPCBData_t *adapterCallbackList, CAIPAdapterPlatform_t platform);
+
+CAResult_t CAIPSetNetworkMonitorCallbackInternal(CAIPAdapterStateChangeCallback callback,
+                                         CATransportAdapter_t adapter, CAIPCBData_t *adapterCallbackList);
+
+CAResult_t CAIPUnSetNetworkMonitorCallbackInternal(CATransportAdapter_t adapter,
+                                         CAIPCBData_t *adapterCallbackList);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CA_IP_NW_INTERFACE_COMMON_H_ */
index 1dcd851..39fc257 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "octhread.h"
 #include "caipnwmonitor.h"
+#include "caipnwmonitor_common.h"
 #include "caadapterutils.h"
 #include "logger.h"
 #include "oic_malloc.h"
@@ -225,72 +226,20 @@ CAResult_t CAIPStopNetworkMonitor(CATransportAdapter_t adapter)
     return CAIPUnSetNetworkMonitorCallback(adapter);
 }
 
-int CAGetPollingInterval(int interval)
-{
-    return interval;
-}
-
 static void CAIPPassNetworkChangesToAdapter(CANetworkStatus_t status)
 {
-    CAIPCBData_t *cbitem = NULL;
-    LL_FOREACH(g_adapterCallbackList, cbitem)
-    {
-        if (cbitem && cbitem->adapter)
-        {
-            cbitem->callback(cbitem->adapter, status);
-            CALogAdapterStateInfo(cbitem->adapter, status);
-        }
-    }
+    CAIPPassNetworkChangesToAdapterInternal(status, g_adapterCallbackList, CA_IP_NW_COMMON_LINUX);
 }
 
 CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback,
                                          CATransportAdapter_t adapter)
 {
-    if (!callback)
-    {
-        OIC_LOG(ERROR, TAG, "callback is null");
-        return CA_STATUS_INVALID_PARAM;
-    }
-
-    CAIPCBData_t *cbitem = NULL;
-    LL_FOREACH(g_adapterCallbackList, cbitem)
-    {
-        if (cbitem && adapter == cbitem->adapter && callback == cbitem->callback)
-        {
-            OIC_LOG(DEBUG, TAG, "this callback is already added");
-            return CA_STATUS_OK;
-        }
-    }
-
-    cbitem = (CAIPCBData_t *)OICCalloc(1, sizeof(*cbitem));
-    if (!cbitem)
-    {
-        OIC_LOG(ERROR, TAG, "Malloc failed");
-        return CA_STATUS_FAILED;
-    }
-
-    cbitem->adapter = adapter;
-    cbitem->callback = callback;
-    LL_APPEND(g_adapterCallbackList, cbitem);
-
-    return CA_STATUS_OK;
+    return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList);
 }
 
 CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter)
 {
-    CAIPCBData_t *cbitem = NULL;
-    CAIPCBData_t *tmpCbitem = NULL;
-    LL_FOREACH_SAFE(g_adapterCallbackList, cbitem, tmpCbitem)
-    {
-        if (cbitem && adapter == cbitem->adapter)
-        {
-            OIC_LOG(DEBUG, TAG, "remove specific callback");
-            LL_DELETE(g_adapterCallbackList, cbitem);
-            OICFree(cbitem);
-            return CA_STATUS_OK;
-        }
-    }
-    return CA_STATUS_OK;
+    return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList);
 }
 
 static CAInterface_t *CANewInterfaceItem(int index, const char *name, int family,
index 079ecd5..036b0f1 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "caipinterface.h"
 #include "caipnwmonitor.h"
+#include "caipnwmonitor_common.h"
 #include "caadapterutils.h"
 #include "logger.h"
 #include "oic_malloc.h"
@@ -80,71 +81,20 @@ static void CAIPPassNetworkChangesToAdapter(CANetworkStatus_t status);
  */
 static void CAIPConnectionStateChangedCb(connection_type_e type, void* userData);
 
-int CAGetPollingInterval(int interval)
-{
-    return interval;
-}
-
 static void CAIPPassNetworkChangesToAdapter(CANetworkStatus_t status)
 {
-    CAIPCBData_t *cbitem = NULL;
-    LL_FOREACH(g_adapterCallbackList, cbitem)
-    {
-        if (cbitem && cbitem->adapter)
-        {
-            cbitem->callback(cbitem->adapter, status);
-        }
-    }
+    CAIPPassNetworkChangesToAdapterInternal(status, g_adapterCallbackList, CA_IP_NW_COMMON_TIZEN);
 }
 
 CAResult_t CAIPSetNetworkMonitorCallback(CAIPAdapterStateChangeCallback callback,
                                          CATransportAdapter_t adapter)
 {
-    if (!callback)
-    {
-        OIC_LOG(ERROR, TAG, "callback is null");
-        return CA_STATUS_INVALID_PARAM;
-    }
-
-    CAIPCBData_t *cbitem = NULL;
-    LL_FOREACH(g_adapterCallbackList, cbitem)
-    {
-        if (cbitem && adapter == cbitem->adapter && callback == cbitem->callback)
-        {
-            OIC_LOG(DEBUG, TAG, "this callback is already added");
-            return CA_STATUS_OK;
-        }
-    }
-
-    cbitem = (CAIPCBData_t *)OICCalloc(1, sizeof(*cbitem));
-    if (!cbitem)
-    {
-        OIC_LOG(ERROR, TAG, "Malloc failed");
-        return CA_STATUS_FAILED;
-    }
-
-    cbitem->adapter = adapter;
-    cbitem->callback = callback;
-    LL_APPEND(g_adapterCallbackList, cbitem);
-
-    return CA_STATUS_OK;
+    return CAIPSetNetworkMonitorCallbackInternal(callback, adapter, g_adapterCallbackList);
 }
 
 CAResult_t CAIPUnSetNetworkMonitorCallback(CATransportAdapter_t adapter)
 {
-    CAIPCBData_t *cbitem = NULL;
-    CAIPCBData_t *tmpCbitem = NULL;
-    LL_FOREACH_SAFE(g_adapterCallbackList, cbitem, tmpCbitem)
-    {
-        if (cbitem && adapter == cbitem->adapter)
-        {
-            OIC_LOG(DEBUG, TAG, "remove specific callback");
-            LL_DELETE(g_adapterCallbackList, cbitem);
-            OICFree(cbitem);
-            return CA_STATUS_OK;
-        }
-    }
-    return CA_STATUS_OK;
+    return CAIPUnSetNetworkMonitorCallbackInternal(adapter, g_adapterCallbackList);
 }
 
 u_arraylist_t *CAFindInterfaceChange()
index e1902ec..18813d4 100644 (file)
@@ -61,16 +61,6 @@ CAResult_t CAIPStopNetworkMonitor(CATransportAdapter_t adapter)
  * Not used in win32, but caipserver currently requires this function
  * be defined. not critical.
  */
-int CAGetPollingInterval(int interval)
-{
-    return interval;
-}
-
-/**
- * @todo Implement network interface monitoring.
- * Not used in win32, but caipserver currently requires this function
- * be defined. not critical.
- */
 u_arraylist_t *CAFindInterfaceChange()
 {
     u_arraylist_t *iflist = NULL;