int net_get_profile_info(network_info_s *network_info,
const char *profile_name, net_profile_info_s *prof_info);
+int net_get_connected_profile(network_info_s *network_info,
+ const char *ifname, net_profile_info_s *prof_info);
int net_get_profile_list(network_info_s *network_info, GSList **profile_list);
int _net_extract_service_info(network_info_s *network_info,
gboolean _net_check_service_mac_addr(network_info_s *network_info, const char* service);
int _net_get_interface_list(network_info_s *network_info, GSList **interface_list);
int _net_get_profile_list(network_info_s *network_info, GSList **profile_list);
+int _net_get_connected_profile(network_info_s *network_info,
+ const char *ifname, net_profile_info_s *profile_info);
net_err_e _net_get_wifi_state(network_info_s *network_info);
void _net_clear_request_table(network_info_s *network_info);
* @retval #WIFI_MANAGER_ERROR_NONE Successful
* @retval #WIFI_MANAGER_ERROR_NOT_INITIALIZED Not initialized
* @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED Operation failed
* @retval #WIFI_MANAGER_ERROR_OUT_OF_MEMORY Out of memory
* @retval #WIFI_MANAGER_ERROR_NO_CONNECTION There is no connected AP
* @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED Permission Denied
return err;
}
+static int __net_extract_connected_profile(network_info_s *network_info,
+ GVariant *message, net_profile_info_s *profile_info)
+{
+ int err = NET_ERR_NONE;
+ gchar *obj_path = NULL;
+ GVariantIter *iter = NULL;
+
+ __NETWORK_FUNC_ENTER__;
+
+ if (!g_variant_is_of_type(message, G_VARIANT_TYPE("(oa{sv})"))) {
+ WIFI_LOG(WIFI_ERROR, "There is no connected service");
+ __NETWORK_FUNC_EXIT__;
+ return NET_ERR_NO_PROFILE;
+ }
+
+ g_variant_get(message, "(oa{sv})", &obj_path, &iter);
+
+ if (g_str_has_prefix(obj_path, CONNMAN_WIFI_SERVICE_PROFILE_PREFIX) != TRUE) {
+ WIFI_LOG(WIFI_ERROR, "No wifi service");
+ __NETWORK_FUNC_EXIT__;
+ return NET_ERR_NO_PROFILE;
+ }
+
+ err = _net_extract_service_info(network_info, obj_path, iter, profile_info);
+
+ g_variant_iter_free(iter);
+ g_free(obj_path);
+
+ return err;
+}
+
void net_forget_ap_finished(network_info_s *network_info, net_err_e Error)
{
__NETWORK_FUNC_ENTER__;
return Error;
}
+int _net_get_connected_profile(network_info_s *network_info,
+ const char *ifname, net_profile_info_s *profile_info)
+{
+ __NETWORK_FUNC_ENTER__;
+
+ net_err_e err = NET_ERR_NO_PROFILE;
+ GVariant *message;
+ GVariant *params = NULL;
+
+ params = g_variant_new("(s)", ifname);
+
+ message = _net_invoke_dbus_method(network_info,
+ CONNMAN_SERVICE, CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE, "GetConnectedService",
+ params, &err);
+ if (message == NULL) {
+ WIFI_LOG(WIFI_ERROR, "Failed to get connected service(profile)"); //LCOV_EXCL_LINE
+ __NETWORK_FUNC_EXIT__; //LCOV_EXCL_LINE
+ return err; //LCOV_EXCL_LINE
+ }
+
+ err = __net_extract_connected_profile(network_info, message, profile_info);
+
+ g_variant_unref(message);
+
+ __NETWORK_FUNC_EXIT__;
+ return err;
+}
+
int net_init_profile_info(network_info_s *network_info, net_profile_info_s *ProfInfo)
{
int i = 0;
return Error;
}
+int net_get_connected_profile(network_info_s *network_info,
+ const char *ifname, net_profile_info_s *prof_info)
+{
+ __NETWORK_FUNC_ENTER__;
+
+ net_err_e err = NET_ERR_NONE;
+
+ err = _net_get_connected_profile(network_info, ifname, prof_info);
+ if (err != NET_ERR_NONE) {
+ WIFI_LOG(WIFI_ERROR, //LCOV_EXCL_LINE
+ "Failed to get service(profile) list. Error [%s]",
+ _net_print_error(err));
+ }
+
+ __NETWORK_FUNC_EXIT__;
+ return err;
+}
+
//LCOV_EXCL_START
int net_get_interface_list(network_info_s *network_info, GSList **interface_list)
{
int rv;
wifi_manager_handle_s *wifi_handle = wifi;
net_profile_info_s *ap_info = NULL;
- net_profile_info_s *connected_ap = NULL;
- GSList *list;
-
- rv = __update_profile_iterator(wifi_handle);
- if (rv == NET_ERR_ACCESS_DENIED) {
- WIFI_LOG(WIFI_ERROR, "Access denied"); //LCOV_EXCL_LINE
- return WIFI_MANAGER_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
- }
-
- for (list = wifi_handle->profile_iterator; list; list = list->next) {
- net_profile_info_s *prof_info = (net_profile_info_s *)list->data;
- if (!g_strcmp0(prof_info->net_info.DevName, wifi_handle->interface_name)) {
- if (prof_info->ProfileState == NET_STATE_TYPE_ONLINE ||
- prof_info->ProfileState == NET_STATE_TYPE_READY) {
- connected_ap = prof_info;
- break;
- }
- }
- }
-
- if (connected_ap == NULL) {
- WIFI_LOG(WIFI_ERROR, "There is no connected AP"); //LCOV_EXCL_LINE
- return WIFI_MANAGER_ERROR_NO_CONNECTION; //LCOV_EXCL_LINE
- }
+ const char *ifname = wifi_handle->interface_name;
ap_info = g_try_malloc0(sizeof(net_profile_info_s));
if (ap_info == NULL)
return WIFI_MANAGER_ERROR_OUT_OF_MEMORY;
- memcpy(ap_info, connected_ap, sizeof(net_profile_info_s));
- ap_info->vsie_list = g_slist_copy_deep(connected_ap->vsie_list,
- _wifi_copy_vsie_list, NULL);
- ap_info->bssid_list = g_slist_copy_deep(connected_ap->bssid_list,
- _wifi_copy_bssid_list, NULL);
+ rv = net_get_connected_profile(wifi_handle->network_info, ifname, ap_info);
+
+ if (rv == NET_ERR_NO_PROFILE)
+ return WIFI_MANAGER_ERROR_NO_CONNECTION; //LCOV_EXCL_LINE
+ else if (rv == NET_ERR_ACCESS_DENIED) {
+ WIFI_LOG(WIFI_ERROR, "Access denied"); //LCOV_EXCL_LINE
+ return WIFI_MANAGER_ERROR_PERMISSION_DENIED; //LCOV_EXCL_LINE
+ } else if (rv == NET_ERR_INVALID_PARAM)
+ return WIFI_MANAGER_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
+ else if (rv != NET_ERR_NONE)
+ return WIFI_MANAGER_ERROR_OPERATION_FAILED; //LCOV_EXCL_LINE
_wifi_add_to_ap_list(ap_info);
*ap = (wifi_manager_ap_h)ap_info;