Add new API : net_set_default_cellular_service_profile_async()
authorJaehyun Kim <jeik01.kim@samsung.com>
Tue, 9 Apr 2013 12:58:48 +0000 (21:58 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Tue, 9 Apr 2013 14:18:23 +0000 (23:18 +0900)
Change-Id: Idb23fb0095d73efc537a0a0b9bee562223947e3c

include/common/network-cm-intf.h
include/profile/network-pm-intf.h
packaging/libnet-client.spec
src/include/network-dbus-request.h
src/include/network-internal.h
src/network-dbus-request.c
src/network-profile-intf.c
test/build.sh
test/main.c

index 3cec0b9..624eb86 100644 (file)
@@ -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;
 
 /**
index 6269ef0..1306028 100644 (file)
@@ -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);
+
 /**
  * \}
  */
index c6e8b10..ae0a0cd 100644 (file)
@@ -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
index d1883e7..6f9f0d3 100644 (file)
@@ -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_ */
index e6f1b16..15decdd 100644 (file)
@@ -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;
 
index 0453526..d4689ac 100644 (file)
@@ -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__;
index 72ecf78..763077a 100644 (file)
@@ -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
  *****************************************************************************/
index 9eaa6b7..2307304 100755 (executable)
@@ -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
 
index 337c750..423ac63 100644 (file)
@@ -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);