From: Jaehyun Kim Date: Tue, 9 Apr 2013 12:58:48 +0000 (+0900) Subject: Add new API : net_set_default_cellular_service_profile_async() X-Git-Tag: accepted/tizen_2.1/20130425.035313~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6fe462c5b109f8ba7d08b0e760c17e2a70233212;p=platform%2Fcore%2Fconnectivity%2Flibnet-client.git Add new API : net_set_default_cellular_service_profile_async() Change-Id: Idb23fb0095d73efc537a0a0b9bee562223947e3c --- diff --git a/include/common/network-cm-intf.h b/include/common/network-cm-intf.h index 3cec0b9..624eb86 100644 --- a/include/common/network-cm-intf.h +++ b/include/common/network-cm-intf.h @@ -141,6 +141,8 @@ typedef enum /** Wi-Fi interface WPS Response Event */ NET_EVENT_WIFI_WPS_RSP, + /** Set default cellular profile Response Event */ + NET_EVENT_CELLULAR_SET_DEFAULT_RSP, } net_event_t; /** diff --git a/include/profile/network-pm-intf.h b/include/profile/network-pm-intf.h index 6269ef0..1306028 100644 --- a/include/profile/network-pm-intf.h +++ b/include/profile/network-pm-intf.h @@ -407,6 +407,21 @@ int net_get_profile_list(net_device_t device_type, net_profile_info_t **profile_ ******************************************************************************************/ int net_set_default_cellular_service_profile(const char *profile_name); +/*****************************************************************************************/ +/** + * This function sets the default profile which provides the given cellular service. + * + * \par Sync (or) Async: + * This is a Asynchronous API. + * + * \param[in] profile_name Profile Identifier. + * + * \par Prospective Clients: + * External Apps. + * +******************************************************************************************/ +int net_set_default_cellular_service_profile_async(const char *profile_name); + /** * \} */ diff --git a/packaging/libnet-client.spec b/packaging/libnet-client.spec index c6e8b10..ae0a0cd 100644 --- a/packaging/libnet-client.spec +++ b/packaging/libnet-client.spec @@ -1,6 +1,6 @@ Name: libnet-client Summary: Network Client library (Shared library) -Version: 0.1.77_17 +Version: 0.1.77_18 Release: 1 Group: System/Network License: Flora License @@ -40,6 +40,11 @@ make %{?_smp_mflags} mkdir -p %{buildroot}%{_datadir}/license cp LICENSE.Flora %{buildroot}%{_datadir}/license/libnet-client +#Make test app +cd test +cp -rf %{buildroot}/usr/lib/ ./ +./build.sh +cd .. %files %manifest libnet-client.manifest diff --git a/src/include/network-dbus-request.h b/src/include/network-dbus-request.h index d1883e7..6f9f0d3 100644 --- a/src/include/network-dbus-request.h +++ b/src/include/network-dbus-request.h @@ -129,5 +129,6 @@ void _net_dbus_set_pending_call(DBusPendingCall *call); void _net_dbus_clear_pending_call(void); gboolean __net_dbus_abort_open_request(const char *profile_name); int _net_dbus_specific_scan_request(const char *ssid); +int _net_dbus_set_default(const char* profile_name); #endif /** __NETWORK_SIGNAL_HANDLER_H_ */ diff --git a/src/include/network-internal.h b/src/include/network-internal.h index e6f1b16..15decdd 100644 --- a/src/include/network-internal.h +++ b/src/include/network-internal.h @@ -167,6 +167,7 @@ typedef enum NETWORK_REQUEST_TYPE_WIFI_POWER, NETWORK_REQUEST_TYPE_ENROLL_WPS, NETWORK_REQUEST_TYPE_SPECIFIC_SCAN, + NETWORK_REQUEST_TYPE_SET_DEFAULT, NETWORK_REQUEST_TYPE_MAX } network_async_request_type_t; diff --git a/src/network-dbus-request.c b/src/network-dbus-request.c index 0453526..d4689ac 100644 --- a/src/network-dbus-request.c +++ b/src/network-dbus-request.c @@ -470,6 +470,51 @@ done: __NETWORK_FUNC_EXIT__; } +static void __net_set_default_reply(DBusPendingCall *call, void *user_data) +{ + __NETWORK_FUNC_ENTER__; + + NETWORK_LOG(NETWORK_LOW, "__net_set_default_reply() called\n"); + + net_event_info_t event_data = {0,}; + int rv; + + DBusMessage *reply = dbus_pending_call_steal_reply(call); + net_err_t Error = _net_get_error_from_message(reply); + + NETWORK_LOG(NETWORK_ERROR, "Error code : [%d]\n", Error); + + if (request_table[NETWORK_REQUEST_TYPE_SET_DEFAULT].flag == TRUE) { + memset(&request_table[NETWORK_REQUEST_TYPE_SET_DEFAULT], + 0, sizeof(network_request_table_t)); + event_data.Event = NET_EVENT_CELLULAR_SET_DEFAULT_RSP; + + if (Error == NET_ERR_NONE) { + rv = _net_get_boolean(reply); + + NETWORK_LOG(NETWORK_LOW, "Reply : [%s]\n", rv ? "TRUE" : "FALSE"); + + if (rv) + event_data.Error = NET_ERR_NONE; + else + event_data.Error = NET_ERR_UNKNOWN; + } else + event_data.Error = Error; + + NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_CELLULAR_SET_DEFAULT_RSP Error = %s\n", + _net_print_error(event_data.Error)); + _net_client_callback(&event_data); + } + + dbus_message_unref(reply); + dbus_pending_call_unref(call); + + network_dbus_pending_call_data.is_used = FALSE; + network_dbus_pending_call_data.pcall = NULL; + + __NETWORK_FUNC_EXIT__; +} + static char *__net_make_group_name(const char *ssid, const char *net_mode, const char *sec) { char *buf; @@ -755,6 +800,20 @@ int _net_dbus_scan_request(void) return Error; } +int _net_dbus_set_default(const char* profile_name) +{ + __NETWORK_FUNC_ENTER__; + + net_err_t Error = NET_ERR_NONE; + + Error = _net_invoke_dbus_method_nonblock(TELEPHONY_SERVCE, + profile_name, TELEPHONY_PROFILE_INTERFACE, + "SetDefaultConnection", __net_set_default_reply); + + __NETWORK_FUNC_EXIT__; + return Error; +} + int _net_dbus_set_bgscan_mode(net_wifi_background_scan_mode_t mode) { __NETWORK_FUNC_ENTER__; diff --git a/src/network-profile-intf.c b/src/network-profile-intf.c index 72ecf78..763077a 100644 --- a/src/network-profile-intf.c +++ b/src/network-profile-intf.c @@ -73,7 +73,8 @@ static int __net_telephony_delete_profile(net_profile_name_t* PdpProfName); static int __net_wifi_delete_profile(net_profile_name_t* WifiProfName, wlan_security_mode_type_t sec_mode); static int __net_telephony_add_profile(net_profile_info_t *ProfInfo, net_service_type_t network_type); -static int __net_set_default_cellular_service_profile(const char* ProfileName); +static int __net_set_default_cellular_service_profile_sync(const char* ProfileName); +static int __net_set_default_cellular_service_profile_async(const char* ProfileName); /***************************************************************************** * Global Functions @@ -84,6 +85,7 @@ static int __net_set_default_cellular_service_profile(const char* ProfileName); *****************************************************************************/ extern network_info_t NetworkInfo; +extern network_request_table_t request_table[NETWORK_REQUEST_TYPE_MAX]; /***************************************************************************** * Global Variables @@ -1680,7 +1682,7 @@ done: return Error; } -static int __net_set_default_cellular_service_profile(const char* ProfileName) +static int __net_set_default_cellular_service_profile_sync(const char* ProfileName) { __NETWORK_FUNC_ENTER__; @@ -1725,7 +1727,29 @@ static int __net_set_default_cellular_service_profile(const char* ProfileName) done: __NETWORK_FUNC_EXIT__; + return Error; +} + +static int __net_set_default_cellular_service_profile_async(const char* ProfileName) +{ + __NETWORK_FUNC_ENTER__; + + net_err_t Error = NET_ERR_NONE; + net_profile_name_t telephony_profile; + char connman_profile[NET_PROFILE_NAME_LEN_MAX+1] = {0,}; + + g_strlcpy(connman_profile, ProfileName, NET_PROFILE_NAME_LEN_MAX+1); + + Error = __net_telephony_search_pdp_profile((char*)connman_profile, &telephony_profile); + if (Error != NET_ERR_NONE) { + NETWORK_LOG(NETWORK_HIGH, "__net_telephony_search_pdp_profile() failed\n"); + __NETWORK_FUNC_EXIT__; + return Error; + } + Error = _net_dbus_set_default(telephony_profile.ProfileName); + + __NETWORK_FUNC_EXIT__; return Error; } @@ -2414,7 +2438,7 @@ EXPORT_API int net_set_default_cellular_service_profile(const char *profile_name return NET_ERR_INVALID_PARAM; } - Error = __net_set_default_cellular_service_profile(profile_name); + Error = __net_set_default_cellular_service_profile_sync(profile_name); if (Error != NET_ERR_NONE) { NETWORK_LOG(NETWORK_ERROR, "Error!!! failed to set default cellular service(profile). Error [%s]\n", @@ -2426,6 +2450,50 @@ EXPORT_API int net_set_default_cellular_service_profile(const char *profile_name return NET_ERR_NONE; } +EXPORT_API int net_set_default_cellular_service_profile_async(const char *profile_name) +{ + net_err_t Error = NET_ERR_NONE; + + if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) { + NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n"); + __NETWORK_FUNC_EXIT__; + return NET_ERR_APP_NOT_REGISTERED; + } + + if (_net_check_profile_name(profile_name) != NET_ERR_NONE) { + NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Parameter\n"); + __NETWORK_FUNC_EXIT__; + return NET_ERR_INVALID_PARAM; + } + + if(request_table[NETWORK_REQUEST_TYPE_SET_DEFAULT].flag == TRUE) { + NETWORK_LOG(NETWORK_ERROR, "Error!! Request already in progress\n"); + __NETWORK_FUNC_EXIT__; + return NET_ERR_IN_PROGRESS; + } + + if (_net_dbus_is_pending_call_used() == TRUE) { + NETWORK_LOG(NETWORK_ERROR, "Error!! pending call already in progress\n"); + __NETWORK_FUNC_EXIT__; + return NET_ERR_IN_PROGRESS; + } + + request_table[NETWORK_REQUEST_TYPE_SET_DEFAULT].flag = TRUE; + + Error = __net_set_default_cellular_service_profile_async(profile_name); + if (Error != NET_ERR_NONE) { + NETWORK_LOG(NETWORK_ERROR, + "Error!!! failed to set default cellular service(profile). Error [%s]\n", + _net_print_error(Error)); + memset(&request_table[NETWORK_REQUEST_TYPE_SET_DEFAULT], + 0, sizeof(network_request_table_t)); + __NETWORK_FUNC_EXIT__; + return Error; + } + + return NET_ERR_NONE; +} + /***************************************************************************** * ConnMan Wi-Fi Client Interface Async Function Definition *****************************************************************************/ diff --git a/test/build.sh b/test/build.sh index 9eaa6b7..2307304 100755 --- a/test/build.sh +++ b/test/build.sh @@ -2,5 +2,5 @@ rm -f network_client -gcc -Wall -g -O2 -o ./network_client ./main.c `pkg-config glib-2.0 dbus-glib-1 gthread-2.0 network --cflags --libs` +gcc -Wall -g -O2 -o ./network_client ./main.c `pkg-config glib-2.0 dbus-glib-1 gthread-2.0 --cflags --libs` -I../include/common -I../include/profile -I../include/wifi -L./lib/ -lnetwork diff --git a/test/main.c b/test/main.c index 337c750..423ac63 100644 --- a/test/main.c +++ b/test/main.c @@ -505,6 +505,10 @@ static void __network_evt_cb(net_event_info_t* event_cb, void* user_data) break; + case NET_EVENT_CELLULAR_SET_DEFAULT_RSP: + debug_print("Got Set cellular default profile Rsp : %d\n", event_cb->Error); + break; + default : debug_print("Error! Unknown Event\n\n"); break; @@ -1470,15 +1474,31 @@ static gboolean network_main_gthread(gpointer data) break; case 'm': { + int user_sel; + debug_print( "Enter API type(1:sync, 2:async) : \n"); + scanf("%d", &user_sel); + + if (user_sel != 1 && user_sel != 2) { + debug_print("Error!! Invalid input.\n"); + break; + } + debug_print( "Enter Profile Name: \n"); scanf("%s", ProfileName); gettimeofday(&timevar, NULL); start_time = Convert_time2double(timevar); - if (net_set_default_cellular_service_profile(ProfileName) != NET_ERR_NONE) { - debug_print("Error!! net_set_default_cellular_service_profile() failed.\n"); - break; + if (user_sel == 1) { + if (net_set_default_cellular_service_profile(ProfileName) != NET_ERR_NONE) { + debug_print("Error!! net_set_default_cellular_service_profile() failed.\n"); + break; + } + } else { + if (net_set_default_cellular_service_profile_async(ProfileName) != NET_ERR_NONE) { + debug_print("Error!! net_set_default_cellular_service_profile_async() failed.\n"); + break; + } } gettimeofday(&timevar, NULL);