aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-modem.c88
-rw-r--r--src/mm-base-modem.h21
2 files changed, 65 insertions, 44 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c
index 1c023c32..9f187306 100644
--- a/src/mm-base-modem.c
+++ b/src/mm-base-modem.c
@@ -67,7 +67,9 @@ struct _MMBaseModemPrivate {
guint max_timeouts;
guint set_invalid_unresponsive_modem_id;
+ /* The authorization provider */
MMAuthProvider *authp;
+ GCancellable *authp_cancellable;
GHashTable *ports;
MMAtSerialPort *primary;
@@ -545,44 +547,56 @@ mm_base_modem_organize_ports (MMBaseModem *self,
return TRUE;
}
+/*****************************************************************************/
+/* Authorization */
+
gboolean
-mm_base_modem_auth_request (MMBaseModem *self,
- const gchar *authorization,
- GDBusMethodInvocation *invocation,
- MMAuthRequestCb callback,
- gpointer callback_data,
- GDestroyNotify notify,
- GError **error)
+mm_base_modem_authorize_finish (MMBaseModem *self,
+ GAsyncResult *res,
+ GError **error)
{
- g_return_val_if_fail (MM_IS_BASE_MODEM (self), FALSE);
-
- return !!mm_auth_provider_request_auth (self->priv->authp,
- authorization,
- G_OBJECT (self),
- invocation,
- callback,
- callback_data,
- notify,
- error);
+ return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error);
}
-gboolean
-mm_base_modem_auth_finish (MMBaseModem *self,
- MMAuthRequest *req,
- GError **error)
+static void
+authorize_ready (MMAuthProvider *authp,
+ GAsyncResult *res,
+ GSimpleAsyncResult *simple)
{
- if (mm_auth_request_get_result (req) != MM_AUTH_RESULT_AUTHORIZED) {
- g_set_error (error,
- MM_CORE_ERROR,
- MM_CORE_ERROR_UNAUTHORIZED,
- "This request requires the '%s' authorization",
- mm_auth_request_get_authorization (req));
- return FALSE;
- }
+ GError *error = NULL;
- return TRUE;
+ if (!mm_auth_provider_authorize_finish (authp, res, &error))
+ g_simple_async_result_take_error (simple, error);
+ else
+ g_simple_async_result_set_op_res_gboolean (simple, TRUE);
+
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
}
+void
+mm_base_modem_authorize (MMBaseModem *self,
+ GDBusMethodInvocation *invocation,
+ const gchar *authorization,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *result;
+
+ result = g_simple_async_result_new (G_OBJECT (self),
+ callback,
+ user_data,
+ mm_base_modem_authorize);
+ mm_auth_provider_authorize (self->priv->authp,
+ invocation,
+ authorization,
+ self->priv->authp_cancellable,
+ (GAsyncReadyCallback)authorize_ready,
+ result);
+}
+
+/*****************************************************************************/
+
const gchar *
mm_base_modem_get_device (MMBaseModem *self)
{
@@ -633,7 +647,9 @@ mm_base_modem_init (MMBaseModem *self)
MM_TYPE_BASE_MODEM,
MMBaseModemPrivate);
- self->priv->authp = mm_auth_provider_get ();
+ /* Setup authorization provider */
+ self->priv->authp = mm_auth_get_provider ();
+ self->priv->authp_cancellable = g_cancellable_new ();
self->priv->ports = g_hash_table_new_full (g_str_hash,
g_str_equal,
@@ -728,7 +744,9 @@ finalize (GObject *object)
{
MMBaseModem *self = MM_BASE_MODEM (object);
- mm_auth_provider_cancel_for_owner (self->priv->authp, object);
+ /* TODO
+ * mm_auth_provider_cancel_for_owner (self->priv->authp, object);
+ */
mm_dbg ("Modem (%s) '%s' completely disposed",
self->priv->plugin,
@@ -746,6 +764,9 @@ dispose (GObject *object)
{
MMBaseModem *self = MM_BASE_MODEM (object);
+ /* Cancel all ongoing auth requests */
+ g_cancellable_cancel (self->priv->authp_cancellable);
+
g_clear_object (&self->priv->primary);
g_clear_object (&self->priv->secondary);
g_clear_object (&self->priv->data);
@@ -758,6 +779,9 @@ dispose (GObject *object)
g_clear_object (&self->priv->connection);
+ g_clear_object (&self->priv->authp);
+ g_clear_object (&self->priv->authp_cancellable);
+
G_OBJECT_CLASS (mm_base_modem_parent_class)->dispose (object);
}
diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h
index 214a51a7..b572cf87 100644
--- a/src/mm-base-modem.h
+++ b/src/mm-base-modem.h
@@ -23,8 +23,7 @@
#include <mm-gdbus-modem.h>
-#include "mm-auth-request.h"
-#include "mm-auth-provider.h"
+#include "mm-auth.h"
#include "mm-port.h"
#include "mm-at-serial-port.h"
#include "mm-qcdm-serial-port.h"
@@ -126,16 +125,14 @@ void mm_base_modem_set_valid (MMBaseModem *self,
gboolean valid);
gboolean mm_base_modem_get_valid (MMBaseModem *self);
-gboolean mm_base_modem_auth_request (MMBaseModem *self,
- const gchar *authorization,
- GDBusMethodInvocation *context,
- MMAuthRequestCb callback,
- gpointer callback_data,
- GDestroyNotify notify,
- GError **error);
-gboolean mm_base_modem_auth_finish (MMBaseModem *self,
- MMAuthRequest *req,
- GError **error);
+void mm_base_modem_authorize (MMBaseModem *self,
+ GDBusMethodInvocation *invocation,
+ const gchar *authorization,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean mm_base_modem_authorize_finish (MMBaseModem *self,
+ GAsyncResult *res,
+ GError **error);
const gchar *mm_base_modem_get_device (MMBaseModem *self);
const gchar *mm_base_modem_get_driver (MMBaseModem *self);