From 1a99d46b8047455d7046e03af32334e634da0aa0 Mon Sep 17 00:00:00 2001 From: Senthil Kumar G S Date: Mon, 18 Nov 2019 16:17:41 +0530 Subject: [PATCH] Avoid CA IP NW monitor code duplications. 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 Signed-off-by: DoHyun Pyun --- .../csdk/connectivity/src/ip_adapter/SConscript | 5 +- .../src/ip_adapter/android/caipnwmonitor.c | 58 +----------- .../src/ip_adapter/caipnwmonitor_common.c | 105 +++++++++++++++++++++ .../src/ip_adapter/caipnwmonitor_common.h | 61 ++++++++++++ .../src/ip_adapter/linux/caipnwmonitor.c | 59 +----------- .../src/ip_adapter/tizen/caipnwmonitor.c | 58 +----------- .../src/ip_adapter/windows/caipnwmonitor.c | 10 -- 7 files changed, 182 insertions(+), 174 deletions(-) create mode 100644 resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c create mode 100644 resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h diff --git a/resource/csdk/connectivity/src/ip_adapter/SConscript b/resource/csdk/connectivity/src/ip_adapter/SConscript index 8cb1cbb..0864b31 100644 --- a/resource/csdk/connectivity/src/ip_adapter/SConscript +++ b/resource/csdk/connectivity/src/ip_adapter/SConscript @@ -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. diff --git a/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c index 2c451f6..05cddc7 100644 --- a/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/android/caipnwmonitor.c @@ -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 index 0000000..1fcb957 --- /dev/null +++ b/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.c @@ -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 index 0000000..949d0fa --- /dev/null +++ b/resource/csdk/connectivity/src/ip_adapter/caipnwmonitor_common.h @@ -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_ */ diff --git a/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c index 1dcd851..39fc257 100644 --- a/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/linux/caipnwmonitor.c @@ -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, diff --git a/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c index 079ecd5..036b0f1 100644 --- a/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c @@ -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() diff --git a/resource/csdk/connectivity/src/ip_adapter/windows/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/windows/caipnwmonitor.c index e1902ec..18813d4 100644 --- a/resource/csdk/connectivity/src/ip_adapter/windows/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/windows/caipnwmonitor.c @@ -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; -- 2.7.4