WIFI_MANAGER_ROAM_SUCCESS, /**< Wi-Fi Roaming is successful. */
} wifi_manager_roam_e;
+#if defined TIZEN_DA
+/**
+ * @brief Enumeration for the Wi-Fi DHCP state.
+ * @since_tizen 7.5
+ */
+typedef enum {
+ WIFI_MANAGER_DHCP_STATE_FAILED = -1, /* DHCP Fail */
+ WIFI_MANAGER_DHCP_STATE_SUCCESS = 0, /* DHCP Success */
+} wifi_manager_dhcp_state_e;
+#endif /* TIZEN_DA */
+
/**
* @brief The Wi-Fi netlink scan handle.
* @since_tizen 5.0
*/
int wifi_manager_unset_roaming_cb(wifi_manager_h wifi);
+#if defined TIZEN_DA
+/**
+ * @brief Called when the DHCP state is changed.
+ * @since_tizen 7.5
+ * @param[in] state The DHCP state
+ * @param[in] lease_time The DHCP lease time
+ * @param[in] user_data The user data passed from the callback registration function
+ * @see wifi_manager_dhcp_set_event_cb()
+ * @see wifi_manager_dhcp_unset_event_cb()
+ */
+
+typedef void(*wifi_manager_dhcp_event_cb)(wifi_manager_dhcp_state_e state, int lease_time, void *user_data);
+
+/**
+ * @brief set DHCP event callback
+ * @since_tizen 7.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
+ *
+ * @param[in] wifi The Wi-Fi handle
+ * @param[in] callback The callback function to be called
+ * @param[in] user_data The user data passed to the callback function
+ *
+ * @return 0 on success, otherwise negative error value
+ * @retval #WIFI_MANAGER_ERROR_NONE Successful
+ * @retval #WIFI_MANAGER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED Operation failed
+ * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED Permission Denied
+ * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED Not supported
+ */
+int wifi_manager_dhcp_set_event_cb(wifi_manager_h wifi, wifi_manager_dhcp_event_cb callback, void *user_data);
+
+/**
+ * @brief unset DHCP event callback
+ * @since_tizen 7.5
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/network.set
+ *
+ * @param[in] wifi The Wi-Fi handle
+ *
+ * @return 0 on success, otherwise negative error value
+ * @retval #WIFI_MANAGER_ERROR_NONE Successful
+ * @retval #WIFI_MANAGER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #WIFI_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #WIFI_MANAGER_ERROR_OPERATION_FAILED Operation failed
+ * @retval #WIFI_MANAGER_ERROR_PERMISSION_DENIED Permission Denied
+ * @retval #WIFI_MANAGER_ERROR_NOT_SUPPORTED Not supported
+ */
+int wifi_manager_dhcp_unset_event_cb(wifi_manager_h wifi);
+#endif /* TIZEN_DA */
+
/**
* @}
*/
NET_EVENT_WIFI_ROAM_STATE_IND,
#if defined TIZEN_DA
NET_EVENT_WIFI_TIMEOUT_RSP,
+ NET_EVENT_WIFI_DHCP_STATE_IND,
#endif /* TIZEN_DA */
} net_event_e;
guint subscribe_id_connman_scanstarted;
guint subscribe_id_connman_roaming;
guint subscribe_id_netconfig_wifi;
+#if defined TIZEN_DA
+ guint subscribe_id_connman_dhcp;
+#endif /* TIZEN_DA */
char interface_name[NET_WLAN_IF_NAME_LEN];
char mac_address[WIFI_MAC_ADDR_LEN + 1];
#define SIGNAL_SCAN_DONE "ScanDone"
#define SIGNAL_SCAN_CHANGED "ScanChanged"
#define SIGNAL_ROAMING_STATE_CHANGED "RoamingStateChanged"
+#if defined TIZEN_DA
+#define SIGNAL_DHCP_CHANGED "DhcpChanged"
+#endif /* TIZEN_DA */
#define CONNMAN_WIFI_TECHNOLOGY_PREFIX CONNMAN_PATH "/technology/wifi"
return NET_ERR_NONE;
}
+#if defined TIZEN_DA
+static int __net_handle_dhcp_changed(network_info_s *network_info, GVariant *param)
+{
+ __NETWORK_FUNC_ENTER__;
+
+ const char *key = NULL;
+ int value = 0;
+ GVariant *var;
+ net_event_info_s *event_data = NULL;
+
+ event_data = g_try_malloc0(sizeof(net_event_info_s));
+ if (event_data == NULL) {
+ __NETWORK_FUNC_EXIT__;
+ return NET_ERR_OUT_OF_MEMORY;
+ }
+
+ g_variant_get(param, "(sv)", &key, &var);
+
+ if (g_strcmp0(key, "DHCP_SUCCESS") == 0 || g_strcmp0(key, "DHCP_FAIL") == 0) {
+ if (g_variant_is_of_type(var, G_VARIANT_TYPE_INT32))
+ value = g_variant_get_int32(var);
+
+ WIFI_LOG(WIFI_INFO, "Key:[%s] value:[%d]", key, value);
+
+ event_data->Event = NET_EVENT_WIFI_DHCP_STATE_IND;
+ event_data->Error = NET_ERR_NONE;
+ event_data->Datalength = sizeof(gint);
+ event_data->Data = &value;
+
+ if (network_info->event_callback)
+ network_info->event_callback(event_data, network_info->user_data);
+ }
+
+ g_free(event_data);
+
+ g_free((gchar *)key);
+ if (NULL != var)
+ g_variant_unref(var);
+
+ WIFI_LOG(WIFI_INFO, "Exit Function");
+ __NETWORK_FUNC_EXIT__;
+ return NET_ERR_NONE;
+}
+#endif /* TIZEN_DA */
+
static void __net_connman_manager_signal_filter(GDBusConnection *conn,
const gchar *name, const gchar *path, const gchar *interface,
const gchar *sig, GVariant *param, gpointer user_data)
__net_handle_scan_done(network_info, param);
else if (g_strcmp0(sig, SIGNAL_ROAMING_STATE_CHANGED) == 0)
__net_handle_roaming_changed(network_info, param);
+#if defined TIZEN_DA
+ else if (g_strcmp0(sig, SIGNAL_DHCP_CHANGED) == 0)
+ __net_handle_dhcp_changed(network_info, param);
+#endif /* TIZEN_DA */
}
static void __net_netconfig_signal_filter(GDBusConnection *conn,
network_info,
NULL);
+#if defined TIZEN_DA
+ /* Create connman service dhcp connection */
+ network_info->subscribe_id_connman_dhcp = g_dbus_connection_signal_subscribe(
+ network_info->connection,
+ CONNMAN_SERVICE,
+ CONNMAN_MANAGER_INTERFACE,
+ SIGNAL_DHCP_CHANGED,
+ CONNMAN_MANAGER_PATH,
+ NULL,
+ G_DBUS_SIGNAL_FLAGS_NONE,
+ __net_connman_manager_signal_filter,
+ network_info,
+ NULL);
+#endif /* TIZEN_DA */
+
/* LCOV_EXCL_START */
if (network_info->subscribe_id_connman_state == 0 ||
network_info->subscribe_id_connman_error == 0 ||
network_info->subscribe_id_connman_roaming);
g_dbus_connection_signal_unsubscribe(network_info->connection,
network_info->subscribe_id_netconfig_wifi);
+#if defined TIZEN_DA
+ g_dbus_connection_signal_unsubscribe(network_info->connection,
+ network_info->subscribe_id_connman_dhcp);
+#endif /* TIZEN_DA */
}
__NETWORK_FUNC_EXIT__;
g_p_dpp_current = NULL;
}
+#if defined TIZEN_DA
+static void __dhcp_state_cb(wifi_manager_handle_s *wifi_handle, int lease_time)
+{
+ wifi_manager_dhcp_state_e state;
+
+ if (lease_time > 0)
+ state = WIFI_MANAGER_DHCP_STATE_SUCCESS;
+ else
+ state = WIFI_MANAGER_DHCP_STATE_FAILED;
+
+ if (wifi_handle->dhcp_event_cb)
+ wifi_handle->dhcp_event_cb(state, lease_time, wifi_handle->dhcp_event_user_data);
+}
+#endif /* TIZEN_DA */
+
static void __roaming_state_changed_cb(wifi_manager_handle_s *wifi_handle,
net_roam_event_info_s *roam_event_info)
{
__connected_cb(wifi_handle, result);
break;
+ case NET_EVENT_WIFI_DHCP_STATE_IND:
+ {
+ int *lease_time = (int *)event_cb->Data;
+ __dhcp_state_cb(wifi_handle, *lease_time);
+ }
+ break;
#endif /* TIZEN_DA */
//LCOV_EXCL_STOP
default:
void *dpp_event_user_data;
wifi_manager_roaming_state_changed_cb roaming_state_changed_cb;
void *roaming_state_changed_user_data;
+#if defined TIZEN_DA
+ wifi_manager_dhcp_event_cb dhcp_event_cb;
+ void *dhcp_event_user_data;
+#endif /* TIZEN_DA */
network_info_s *network_info;
char interface_name[NET_WLAN_IF_NAME_LEN];
__NETWORK_CAPI_FUNC_EXIT__;
return WIFI_MANAGER_ERROR_NONE;
}
+
+#if defined TIZEN_DA
+static int __wifi_set_dhcp_event_cb(wifi_manager_h wifi,
+ void *callback, void *user_data)
+{
+ wifi_manager_handle_s *local_handle = (wifi_manager_handle_s *)wifi;
+
+ local_handle->dhcp_event_cb = callback;
+ local_handle->dhcp_event_user_data = user_data;
+
+ return WIFI_MANAGER_ERROR_NONE;
+}
+
+EXPORT_API int wifi_manager_dhcp_set_event_cb(wifi_manager_h wifi,
+ wifi_manager_dhcp_event_cb callback, void *user_data)
+{
+ __NETWORK_CAPI_FUNC_ENTER__;
+
+ CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+ RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__);
+
+ if (callback == NULL) {
+ WIFI_LOG(WIFI_ERROR, "Invalid parameter");
+ __NETWORK_CAPI_FUNC_EXIT__;
+ return WIFI_MANAGER_ERROR_INVALID_PARAMETER;
+ }
+
+ __NETWORK_CAPI_FUNC_EXIT__;
+ return __wifi_set_dhcp_event_cb(wifi, callback, user_data);
+}
+
+EXPORT_API int wifi_manager_dhcp_unset_event_cb(wifi_manager_h wifi)
+{
+ __NETWORK_CAPI_FUNC_ENTER__;
+
+ CHECK_FEATURE_SUPPORTED(WIFI_FEATURE);
+
+ RET_ERR_IF_HANDLE_IS_NOT_VALID_OR_NOT_INITIALIZED(wifi, __NETWORK_CAPI_FUNC_EXIT__);
+
+ __NETWORK_CAPI_FUNC_EXIT__;
+ return __wifi_set_dhcp_event_cb(wifi, NULL, NULL);
+}
+#endif /* TIZEN_DA */
printf(", cur_bssid: %s, dst_bssid: %s\n", cur_bssid, dst_bssid);
}
+#if defined TIZEN_DA
+static void __test_dhcp_changed_callback(wifi_manager_dhcp_state_e state, int lease_time, void *user_data)
+{
+ if (state == WIFI_MANAGER_DHCP_STATE_SUCCESS)
+ printf("[%s] DHCP state changed callback, state : Success, lease time : %d\n", (char *)user_data, lease_time);
+ else
+ printf("[%s] DHCP state changed callback, state : Fail\n", (char *)user_data);
+}
+#endif /* TIZEN_DA */
+
int wman_test_init(void)
{
int rv = wifi_manager_initialize(&wifi);
wifi_manager_tdls_set_discovered_cb(wifi, __test_tdls_discover_callback, "1");
wifi_manager_set_module_state_changed_cb(wifi, __test_get_wifi_module_state_callback, "1");
wifi_manager_set_roaming_cb(wifi, __test_roaming_state_changed_callback, "1");
+#if defined TIZEN_DA
+ wifi_manager_dhcp_set_event_cb(wifi, __test_dhcp_changed_callback, "1");
+#endif /* TIZEN_DA */
} else {
printf("[1] Wifi init failed [%s]\n", wman_test_strerror(rv));
wifi_manager_tdls_set_state_changed_cb(wifi2, __test_tdls_state_callback, "2");
wifi_manager_tdls_set_discovered_cb(wifi, __test_tdls_discover_callback, "2");
wifi_manager_set_module_state_changed_cb(wifi, __test_get_wifi_module_state_callback, "2");
+#if defined TIZEN_DA
+ wifi_manager_dhcp_set_event_cb(wifi2, __test_dhcp_changed_callback, "2");
+#endif /* TIZEN_DA */
} else {
printf("[2] Wifi init failed [%s]\n", wman_test_strerror(rv));
return -1;