mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-03 14:50:30 +01:00
libnm: Add async start/stop routines for P2P find operations
These were dropped earlier as new sync API must not be the primary way of calling new routines in libnm. In this particular case the DBus calls are simple and unlikely to fail. Most users should use the normal async API and call the finish routine. However, if the API user is not interested in the result, then they can simply set the callback to NULL to ignore it. [thaller@redhat.com: added options argument to start-find method]
This commit is contained in:
parent
f1714b485d
commit
60691d76ad
3 changed files with 169 additions and 0 deletions
|
|
@ -1454,6 +1454,10 @@ global:
|
|||
nm_device_wifi_p2p_get_hw_address;
|
||||
nm_device_wifi_p2p_get_peers;
|
||||
nm_device_wifi_p2p_get_type;
|
||||
nm_device_wifi_p2p_start_find;
|
||||
nm_device_wifi_p2p_start_find_finish;
|
||||
nm_device_wifi_p2p_stop_find;
|
||||
nm_device_wifi_p2p_stop_find_finish;
|
||||
nm_setting_wifi_p2p_get_peer;
|
||||
nm_setting_wifi_p2p_get_type;
|
||||
nm_setting_wifi_p2p_get_wps_method;
|
||||
|
|
|
|||
|
|
@ -183,6 +183,150 @@ nm_device_wifi_p2p_get_peer_by_path (NMDeviceWifiP2P *device,
|
|||
return peer;
|
||||
}
|
||||
|
||||
static void
|
||||
start_find_finished_cb (GObject *obj,
|
||||
GAsyncResult *res,
|
||||
gpointer user_data)
|
||||
{
|
||||
NMDBusDeviceWifiP2P *proxy = (NMDBusDeviceWifiP2P*) obj;
|
||||
gs_unref_object GTask *task = G_TASK (user_data);
|
||||
GError *error = NULL;
|
||||
gboolean success;
|
||||
|
||||
success = nmdbus_device_wifi_p2p_call_start_find_finish (proxy, res, &error);
|
||||
if (!success)
|
||||
g_task_return_error (task, error);
|
||||
else
|
||||
g_task_return_boolean (task, TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_device_wifi_p2p_start_find:
|
||||
* @device: a #NMDeviceWifiP2P
|
||||
* @options: (allow-none): optional options passed to StartFind.
|
||||
* @cancellable: a #GCancellable, or %NULL
|
||||
* @callback: a #GAsyncReadyCallback, or %NULL
|
||||
* @user_data: user_data for @callback
|
||||
*
|
||||
* Request NM to search for Wi-Fi P2P peers on @device. Note that the call
|
||||
* returns immediately after requesting the find, and it may take some time
|
||||
* after that for peers to be found.
|
||||
*
|
||||
* The find operation will run for 30s by default. You can stop it earlier
|
||||
* using nm_device_p2p_wifi_stop_find().
|
||||
*
|
||||
* Since: 1.16
|
||||
**/
|
||||
void
|
||||
nm_device_wifi_p2p_start_find (NMDeviceWifiP2P *device,
|
||||
GVariant *options,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
NMDeviceWifiP2PPrivate *priv = NM_DEVICE_WIFI_P2P_GET_PRIVATE (device);
|
||||
GTask *task;
|
||||
|
||||
g_return_if_fail (NM_IS_DEVICE_WIFI_P2P (device));
|
||||
|
||||
task = g_task_new (device, cancellable, callback, user_data);
|
||||
|
||||
if (!options)
|
||||
options = g_variant_new_array (G_VARIANT_TYPE ("{sv}"), NULL, 0);
|
||||
nmdbus_device_wifi_p2p_call_start_find (priv->proxy,
|
||||
options,
|
||||
cancellable,
|
||||
start_find_finished_cb,
|
||||
task);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_device_wifi_p2p_start_find_finish:
|
||||
* @device: a #NMDeviceWifiP2P
|
||||
* @result: the #GAsyncResult
|
||||
* @error: #GError return address
|
||||
*
|
||||
* Finish an operation started by nm_device_wifi_p2p_start_find().
|
||||
*
|
||||
* Returns: %TRUE if the call was successful
|
||||
*
|
||||
* Since: 1.16
|
||||
**/
|
||||
gboolean
|
||||
nm_device_wifi_p2p_start_find_finish (NMDeviceWifiP2P *device,
|
||||
GAsyncResult *result,
|
||||
GError **error)
|
||||
{
|
||||
return g_task_propagate_boolean (G_TASK (result), error);
|
||||
}
|
||||
|
||||
static void
|
||||
stop_find_finished_cb (GObject *obj,
|
||||
GAsyncResult *res,
|
||||
gpointer user_data)
|
||||
{
|
||||
NMDBusDeviceWifiP2P *proxy = (NMDBusDeviceWifiP2P*) obj;
|
||||
gs_unref_object GTask *task = G_TASK (user_data);
|
||||
GError *error = NULL;
|
||||
gboolean success;
|
||||
|
||||
success = nmdbus_device_wifi_p2p_call_stop_find_finish (proxy, res, &error);
|
||||
if (!success)
|
||||
g_task_return_error (task, error);
|
||||
else
|
||||
g_task_return_boolean (task, TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_device_wifi_p2p_stop_find:
|
||||
* @device: a #NMDeviceWifiP2P
|
||||
* @cancellable: a #GCancellable, or %NULL
|
||||
* @callback: a #GAsyncReadyCallback, or %NULL
|
||||
* @user_data: user_data for @callback
|
||||
*
|
||||
* Request NM to stop any ongoing find operation for Wi-Fi P2P peers on @device.
|
||||
*
|
||||
* Since: 1.16
|
||||
**/
|
||||
void
|
||||
nm_device_wifi_p2p_stop_find (NMDeviceWifiP2P *device,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
NMDeviceWifiP2PPrivate *priv = NM_DEVICE_WIFI_P2P_GET_PRIVATE (device);
|
||||
GTask *task;
|
||||
|
||||
g_return_if_fail (NM_IS_DEVICE_WIFI_P2P (device));
|
||||
|
||||
task = g_task_new (device, cancellable, callback, user_data);
|
||||
|
||||
nmdbus_device_wifi_p2p_call_stop_find (priv->proxy,
|
||||
cancellable,
|
||||
stop_find_finished_cb,
|
||||
task);
|
||||
}
|
||||
|
||||
/**
|
||||
* nm_device_wifi_p2p_stop_find_finish:
|
||||
* @device: a #NMDeviceWifiP2P
|
||||
* @result: the #GAsyncResult
|
||||
* @error: #GError return address
|
||||
*
|
||||
* Finish an operation started by nm_device_wifi_p2p_stop_find().
|
||||
*
|
||||
* Returns: %TRUE if the call was successful
|
||||
*
|
||||
* Since: 1.16
|
||||
**/
|
||||
gboolean
|
||||
nm_device_wifi_p2p_stop_find_finish (NMDeviceWifiP2P *device,
|
||||
GAsyncResult *result,
|
||||
GError **error)
|
||||
{
|
||||
return g_task_propagate_boolean (G_TASK (result), error);
|
||||
}
|
||||
|
||||
static void
|
||||
clean_up_peers (NMDeviceWifiP2P *self)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -58,6 +58,27 @@ NMWifiP2PPeer * nm_device_wifi_p2p_get_peer_by_path (NMDeviceWifiP2P *d
|
|||
NM_AVAILABLE_IN_1_16
|
||||
const GPtrArray * nm_device_wifi_p2p_get_peers (NMDeviceWifiP2P *device);
|
||||
|
||||
NM_AVAILABLE_IN_1_16
|
||||
void nm_device_wifi_p2p_start_find (NMDeviceWifiP2P *device,
|
||||
GVariant *options,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
NM_AVAILABLE_IN_1_16
|
||||
gboolean nm_device_wifi_p2p_start_find_finish (NMDeviceWifiP2P *device,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
|
||||
NM_AVAILABLE_IN_1_16
|
||||
void nm_device_wifi_p2p_stop_find (NMDeviceWifiP2P *device,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
NM_AVAILABLE_IN_1_16
|
||||
gboolean nm_device_wifi_p2p_stop_find_finish (NMDeviceWifiP2P *device,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __NM_DEVICE_WIFI_P2P_H__ */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue