From b29b51d9c6f5b053b3775ff6429e400efde7776a Mon Sep 17 00:00:00 2001 From: "hyuna0213.jo" Date: Fri, 28 Oct 2016 13:18:54 +0900 Subject: [PATCH] Tizen: Support Ethernet/3G Status Monitoring in IP Adapter Currently Wifi status monitoring is supported for tizen. To support Ethernet/3G status monitoring in IP Adapter, Wifi Manager is replaced with Connection Manager. Change-Id: Ie5350269c152a42267218749952ab47171b865be Signed-off-by: hyuna0213.jo Reviewed-on: https://gerrit.iotivity.org/gerrit/13711 Tested-by: jenkins-iotivity Reviewed-by: Abhishek Sharma Reviewed-by: Ashok Babu Channa --- .../build/tizen/packaging/com.oic.ca.spec | 1 + .../csdk/connectivity/build/tizen/scons/SConscript | 4 +- .../connectivity/src/ip_adapter/tizen/SConscript | 2 +- .../src/ip_adapter/tizen/caipnwmonitor.c | 167 ++++++++++----------- .../packaging/com.oic.ri.sample.spec | 1 + .../tizen/SimpleClientServer/scons/SConscript | 4 +- .../samples/tizen/build/packaging/com.oic.ri.spec | 1 + .../stack/samples/tizen/build/scons/SConscript | 2 +- .../packaging/com.oic.es.sample.spec | 1 + tools/tizen/iotivity.spec | 1 + 10 files changed, 88 insertions(+), 96 deletions(-) diff --git a/resource/csdk/connectivity/build/tizen/packaging/com.oic.ca.spec b/resource/csdk/connectivity/build/tizen/packaging/com.oic.ca.spec index 222cd4e..e51214f 100644 --- a/resource/csdk/connectivity/build/tizen/packaging/com.oic.ca.spec +++ b/resource/csdk/connectivity/build/tizen/packaging/com.oic.ca.spec @@ -15,6 +15,7 @@ License: Apache-2.0 Group: Applications/OIC BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(capi-network-connection) BuildRequires: pkgconfig(capi-network-wifi) BuildRequires: pkgconfig(capi-network-bluetooth) BuildRequires: boost-devel diff --git a/resource/csdk/connectivity/build/tizen/scons/SConscript b/resource/csdk/connectivity/build/tizen/scons/SConscript index 5dc9883..88be35d 100644 --- a/resource/csdk/connectivity/build/tizen/scons/SConscript +++ b/resource/csdk/connectivity/build/tizen/scons/SConscript @@ -20,7 +20,7 @@ else: if env.get('LOGGING'): env.AppendUnique(CPPDEFINES = ['TB_LOG']) -env.ParseConfig("pkg-config --cflags --libs capi-network-wifi dlog glib-2.0") +env.ParseConfig("pkg-config --cflags --libs capi-network-wifi capi-network-connection dlog glib-2.0") if 'ALL' in transport: env.AppendUnique(CPPDEFINES = ['WIFI_ADAPTER', 'NO_ETHERNET_ADAPTER','EDR_ADAPTER','LE_ADAPTER']) print "CA Transport is ALL" @@ -53,4 +53,4 @@ else: env.SConscript(['../con/lib/libcoap-4.1.1/SConscript']) env.SConscript(['../con/SConscript']) env.SConscript(['../con/c_common/SConscript']) -env.SConscript(['../con/logger/SConscript']) \ No newline at end of file +env.SConscript(['../con/logger/SConscript']) diff --git a/resource/csdk/connectivity/src/ip_adapter/tizen/SConscript b/resource/csdk/connectivity/src/ip_adapter/tizen/SConscript index 249d73c..560891e 100644 --- a/resource/csdk/connectivity/src/ip_adapter/tizen/SConscript +++ b/resource/csdk/connectivity/src/ip_adapter/tizen/SConscript @@ -5,7 +5,7 @@ Import('env', 'src_dir') import os.path -env.ParseConfig("pkg-config --cflags --libs capi-network-wifi") +env.ParseConfig("pkg-config --cflags --libs capi-network-wifi capi-network-connection") src_files = [ 'caipnwmonitor.c' ] diff --git a/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c b/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c index e5b98f8..b04a283 100644 --- a/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c +++ b/resource/csdk/connectivity/src/ip_adapter/tizen/caipnwmonitor.c @@ -18,8 +18,6 @@ * ******************************************************************/ -#include "caipinterface.h" - #include #include #include @@ -29,12 +27,14 @@ #include #include #include -#include #include #include #include #include +#include +#include +#include "caipinterface.h" #include "caipnwmonitor.h" #include "caadapterutils.h" #include "logger.h" @@ -42,13 +42,21 @@ #include "oic_string.h" #include -#define TAG "IP_MONITOR" +#define TAG "OIC_CA_IP_MONITOR" + +#define MAX_INTERFACE_INFO_LENGTH (1024) + #define NETLINK_MESSAGE_LENGTH (4096) #define IFC_LABEL_LOOP "lo" #define IFC_ADDR_LOOP_IPV4 "127.0.0.1" #define IFC_ADDR_LOOP_IPV6 "::1" /** + * Used to storing a connection handle for managing data connections. + */ +static connection_h connection = NULL; + +/** * Used to storing adapter changes callback interface. */ static struct CAIPCBData_t *g_adapterCallbackList = NULL; @@ -78,13 +86,7 @@ static void CAIPPassNetworkChangesToAdapter(CANetworkStatus_t status); /** * Callback function to received connection state changes. */ -static void CAWIFIConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, - void *userData); - -/** - * Callback function to received device state changes. - */ -static void CAWIFIDeviceStateChangedCb(wifi_device_state_e state, void *userData); +static void CAIPConnectionStateChangedCb(connection_type_e type, void* userData); int CAGetPollingInterval(int interval) { @@ -200,29 +202,27 @@ CAResult_t CAIPStartNetworkMonitor(CAIPAdapterStateChangeCallback callback, if (!g_adapterCallbackList) { - // Initialize Wifi service - wifi_error_e ret = wifi_initialize(); - if (WIFI_ERROR_NONE != ret) - { - OIC_LOG(ERROR, TAG, "wifi_initialize failed"); - return CA_STATUS_FAILED; - } - - // Set callback for receiving state changes - ret = wifi_set_device_state_changed_cb(CAWIFIDeviceStateChangedCb, NULL); - if (WIFI_ERROR_NONE != ret) - { - OIC_LOG(ERROR, TAG, "wifi_set_device_state_changed_cb failed"); - return CA_STATUS_FAILED; - } - - // Set callback for receiving connection state changes - ret = wifi_set_connection_state_changed_cb(CAWIFIConnectionStateChangedCb, NULL); - if (WIFI_ERROR_NONE != ret) - { - OIC_LOG(ERROR, TAG, "wifi_set_connection_state_changed_cb failed"); - return CA_STATUS_FAILED; - } + // Initialize Wifi service. + if (WIFI_ERROR_NONE != wifi_initialize()) + { + OIC_LOG(ERROR, TAG, "wifi_initialize failed"); + } + + // Initialize Connections. + connection_error_e ret = connection_create(&connection); + if (CONNECTION_ERROR_NONE != ret) + { + OIC_LOG(ERROR, TAG, "connection_create failed"); + return CA_STATUS_FAILED; + } + + // Set callback for receiving state changes. + ret = connection_set_type_changed_cb(connection, CAIPConnectionStateChangedCb, NULL); + if (CONNECTION_ERROR_NONE != ret) + { + OIC_LOG(ERROR, TAG, "connection_set_type_changed_cb failed"); + return CA_STATUS_FAILED; + } } return CAIPSetNetworkMonitorCallback(callback, adapter); @@ -235,26 +235,29 @@ CAResult_t CAIPStopNetworkMonitor(CATransportAdapter_t adapter) CAIPUnSetNetworkMonitorCallback(adapter); if (!g_adapterCallbackList) { - // Reset callback for receiving state changes - wifi_error_e ret = wifi_unset_device_state_changed_cb(); - if (WIFI_ERROR_NONE != ret) - { - OIC_LOG(ERROR, TAG, "wifi_unset_device_state_changed_cb failed"); - } - - // Reset callback for receiving connection state changes - ret = wifi_unset_connection_state_changed_cb(); - if (WIFI_ERROR_NONE != ret) - { - OIC_LOG(ERROR, TAG, "wifi_unset_connection_state_changed_cb failed"); - } - - // Deinitialize Wifi service - ret = wifi_deinitialize(); - if (WIFI_ERROR_NONE != ret) - { - OIC_LOG(ERROR, TAG, "wifi_deinitialize failed"); - } + // Deinitialize Wifi service. + if (WIFI_ERROR_NONE != wifi_deinitialize()) + { + OIC_LOG(ERROR, TAG, "wifi_deinitialize failed"); + } + + // Reset callback for receiving state changes. + if (connection) + { + connection_error_e ret = connection_unset_type_changed_cb(connection); + if (CONNECTION_ERROR_NONE != ret) + { + OIC_LOG(ERROR, TAG, "connection_unset_type_changed_cb failed"); + } + + // Deinitialize Wifi service. + ret = connection_destroy(connection); + if (CONNECTION_ERROR_NONE != ret) + { + OIC_LOG(ERROR, TAG, "connection_destroy failed"); + } + connection = NULL; + } } return CA_STATUS_OK; @@ -397,43 +400,27 @@ static CAInterface_t *CANewInterfaceItem(int index, char *name, int family, return ifitem; } -void CAWIFIConnectionStateChangedCb(wifi_connection_state_e state, wifi_ap_h ap, - void *userData) -{ - OIC_LOG(DEBUG, TAG, "IN"); - - if (WIFI_CONNECTION_STATE_ASSOCIATION == state - || WIFI_CONNECTION_STATE_CONFIGURATION == state) - { - OIC_LOG(DEBUG, TAG, "Connection is in Association State"); - return; - } - - if (WIFI_CONNECTION_STATE_CONNECTED == state) - { - CAIPPassNetworkChangesToAdapter(CA_INTERFACE_UP); - } - else - { - CAIPPassNetworkChangesToAdapter(CA_INTERFACE_DOWN); - } - - OIC_LOG(DEBUG, TAG, "OUT"); -} - -void CAWIFIDeviceStateChangedCb(wifi_device_state_e state, void *userData) +void CAIPConnectionStateChangedCb(connection_type_e type, void* userData) { - OIC_LOG(DEBUG, TAG, "IN"); - - if (WIFI_DEVICE_STATE_ACTIVATED == state) + switch (type) { - OIC_LOG(DEBUG, TAG, "Wifi is in Activated State"); + case CONNECTION_TYPE_DISCONNECTED: + OIC_LOG(DEBUG, TAG, "Connection is in CONNECTION_TYPE_DISCONNECTED"); + CAIPPassNetworkChangesToAdapter(CA_INTERFACE_DOWN); + break; + case CONNECTION_TYPE_ETHERNET: + OIC_LOG(DEBUG, TAG, "Connection is in CONNECTION_TYPE_ETHERNET"); + CAIPPassNetworkChangesToAdapter(CA_INTERFACE_UP); + break; + case CONNECTION_TYPE_WIFI: + OIC_LOG(DEBUG, TAG, "Connection is in CONNECTION_TYPE_WIFI"); + CAIPPassNetworkChangesToAdapter(CA_INTERFACE_UP); + break; + case CONNECTION_TYPE_CELLULAR: + OIC_LOG(DEBUG, TAG, "Connection is in CONNECTION_TYPE_CELLULAR"); + CAIPPassNetworkChangesToAdapter(CA_INTERFACE_UP); + break; + default: + break; } - else - { - CAWIFIConnectionStateChangedCb(WIFI_CONNECTION_STATE_DISCONNECTED, NULL, NULL); - OIC_LOG(DEBUG, TAG, "Wifi is in Deactivated State"); - } - - OIC_LOG(DEBUG, TAG, "OUT"); } diff --git a/resource/csdk/stack/samples/tizen/SimpleClientServer/packaging/com.oic.ri.sample.spec b/resource/csdk/stack/samples/tizen/SimpleClientServer/packaging/com.oic.ri.sample.spec index e3c14c1..c62ea02 100644 --- a/resource/csdk/stack/samples/tizen/SimpleClientServer/packaging/com.oic.ri.sample.spec +++ b/resource/csdk/stack/samples/tizen/SimpleClientServer/packaging/com.oic.ri.sample.spec @@ -17,6 +17,7 @@ BuildRequires: boost-devel BuildRequires: boost-thread BuildRequires: boost-system BuildRequires: boost-filesystem +BuildRequires: pkgconfig(capi-network-connection) BuildRequires: pkgconfig(capi-network-wifi) BuildRequires: pkgconfig(capi-network-bluetooth) BuildRequires: scons diff --git a/resource/csdk/stack/samples/tizen/SimpleClientServer/scons/SConscript b/resource/csdk/stack/samples/tizen/SimpleClientServer/scons/SConscript index 79ca1a2..0b3c271 100644 --- a/resource/csdk/stack/samples/tizen/SimpleClientServer/scons/SConscript +++ b/resource/csdk/stack/samples/tizen/SimpleClientServer/scons/SConscript @@ -32,7 +32,7 @@ sample_dir = build_dir print "MQ flag is %s" % with_mq -env.AppendUnique(CPPFLAGS = ['-std=c++0x', '-fPIC', '-D__TIZEN__','-DWITH_POSIX', '-Wall', '-DSLP_SDK_LOG', '-g','-D_GNU_SOURCE','-DTIZEN_DEBUG_ENABLE', '-DTB_LOG','`pkg-config', '--cflags', '--libs','dlog', 'com.oic.ri', 'capi-network-wifi', +env.AppendUnique(CPPFLAGS = ['-std=c++0x', '-fPIC', '-D__TIZEN__','-DWITH_POSIX', '-Wall', '-DSLP_SDK_LOG', '-g','-D_GNU_SOURCE','-DTIZEN_DEBUG_ENABLE', '-DTB_LOG','`pkg-config', '--cflags', '--libs','dlog', 'com.oic.ri', 'capi-network-wifi', 'capi-network-connection', 'gobject-2.0','glib-2.0`']) if routing == 'GW': @@ -41,7 +41,7 @@ elif routing == 'EP': env.AppendUnique(CPPDEFINES = ['ROUTING_EP']) env.Append(LIBS=[ - 'm', 'pthread', 'rt', 'dl', 'stdc++', 'gobject-2.0', 'gio-2.0', 'glib-2.0', 'capi-network-wifi', 'dlog', 'capi-network-bluetooth', 'connectivity_abstraction', 'coap', 'octbstack', 'ocsrm', 'c_common' + 'm', 'pthread', 'rt', 'dl', 'stdc++', 'gobject-2.0', 'gio-2.0', 'glib-2.0', 'capi-network-wifi', 'capi-network-connection', 'dlog', 'capi-network-bluetooth', 'connectivity_abstraction', 'coap', 'octbstack', 'ocsrm', 'c_common' ]) if secured == '1': diff --git a/resource/csdk/stack/samples/tizen/build/packaging/com.oic.ri.spec b/resource/csdk/stack/samples/tizen/build/packaging/com.oic.ri.spec index 95fd898..06ad14f 100644 --- a/resource/csdk/stack/samples/tizen/build/packaging/com.oic.ri.spec +++ b/resource/csdk/stack/samples/tizen/build/packaging/com.oic.ri.spec @@ -14,6 +14,7 @@ License: Apache-2.0 Group: Applications/OIC BuildRequires: pkgconfig(dlog) BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(capi-network-connection) BuildRequires: pkgconfig(capi-network-wifi) BuildRequires: pkgconfig(capi-network-bluetooth) BuildRequires: pkgconfig(uuid) diff --git a/resource/csdk/stack/samples/tizen/build/scons/SConscript b/resource/csdk/stack/samples/tizen/build/scons/SConscript index 0382f4f..24750a6 100644 --- a/resource/csdk/stack/samples/tizen/build/scons/SConscript +++ b/resource/csdk/stack/samples/tizen/build/scons/SConscript @@ -20,7 +20,7 @@ else: if env.get('LOGGING'): env.AppendUnique(CPPDEFINES = ['TB_LOG']) -env.ParseConfig("pkg-config --cflags --libs capi-network-wifi dlog glib-2.0") +env.ParseConfig("pkg-config --cflags --libs capi-network-wifi capi-network-connection dlog glib-2.0") if 'ALL' in transport: env.AppendUnique(CPPDEFINES = ['WIFI_ADAPTER', 'NO_ETHERNET_ADAPTER','EDR_ADAPTER','LE_ADAPTER']) print "CA Transport is ALL" diff --git a/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/packaging/com.oic.es.sample.spec b/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/packaging/com.oic.es.sample.spec index 41d14d9..e6829ca 100644 --- a/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/packaging/com.oic.es.sample.spec +++ b/service/easy-setup/sampleapp/enrollee/tizen-sdb/EnrolleeSample/packaging/com.oic.es.sample.spec @@ -18,6 +18,7 @@ BuildRequires: boost-devel BuildRequires: boost-thread BuildRequires: boost-system BuildRequires: boost-filesystem +BuildRequires: pkgconfig(capi-network-connection) BuildRequires: pkgconfig(capi-network-wifi) BuildRequires: pkgconfig(capi-network-bluetooth) BuildRequires: scons diff --git a/tools/tizen/iotivity.spec b/tools/tizen/iotivity.spec index e130281..6b8ae77 100644 --- a/tools/tizen/iotivity.spec +++ b/tools/tizen/iotivity.spec @@ -90,6 +90,7 @@ BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(sqlite3) %if "%{TARGET_OS}" == "tizen" BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(capi-network-connection) BuildRequires: pkgconfig(capi-network-wifi) BuildRequires: pkgconfig(capi-network-bluetooth) >= 0.1.52 %endif -- 2.7.4