aboutsummaryrefslogtreecommitdiff
path: root/src/mm-modem-base.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2010-03-01 09:07:05 -0800
committerDan Williams <dcbw@redhat.com>2010-03-01 09:07:05 -0800
commitf6c514897e40e768b180963f2782ed60527ffaa6 (patch)
tree3a0619829a4b1eaee11d7f196b30021e6b7d1127 /src/mm-modem-base.c
parent7a0373afee63eeb9e677f61ccd19fd4aed549ac9 (diff)
parent9d7cb0ddcf69993903c5bc51bbbfbd3a57f55413 (diff)
Merge remote branch 'origin/master' into qcdm
Diffstat (limited to 'src/mm-modem-base.c')
-rw-r--r--src/mm-modem-base.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/mm-modem-base.c b/src/mm-modem-base.c
index b9d07060..20ba2a4c 100644
--- a/src/mm-modem-base.c
+++ b/src/mm-modem-base.c
@@ -44,6 +44,8 @@ typedef struct {
gboolean valid;
MMModemState state;
+ MMAuthProvider *authp;
+
GHashTable *ports;
} MMModemBasePrivate;
@@ -213,11 +215,51 @@ mm_modem_base_set_unlock_required (MMModemBase *self, const char *unlock_require
/*****************************************************************************/
+static gboolean
+modem_auth_request (MMModem *modem,
+ const char *authorization,
+ DBusGMethodInvocation *context,
+ MMAuthRequestCb callback,
+ gpointer callback_data,
+ GDestroyNotify notify,
+ GError **error)
+{
+ MMModemBase *self = MM_MODEM_BASE (modem);
+ MMModemBasePrivate *priv = MM_MODEM_BASE_GET_PRIVATE (self);
+
+ g_assert (priv->authp);
+ return !!mm_auth_provider_request_auth (priv->authp,
+ authorization,
+ G_OBJECT (self),
+ context,
+ callback,
+ callback_data,
+ notify,
+ error);
+}
+
+static gboolean
+modem_auth_finish (MMModem *modem, MMAuthRequest *req, GError **error)
+{
+ if (mm_auth_request_get_result (req) != MM_AUTH_RESULT_AUTHORIZED) {
+ g_set_error (error, MM_MODEM_ERROR, MM_MODEM_ERROR_AUTHORIZATION_REQUIRED,
+ "This request requires the '%s' authorization",
+ mm_auth_request_get_authorization (req));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*****************************************************************************/
+
static void
mm_modem_base_init (MMModemBase *self)
{
MMModemBasePrivate *priv = MM_MODEM_BASE_GET_PRIVATE (self);
+ priv->authp = mm_auth_provider_get ();
+
priv->ports = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
mm_properties_changed_signal_register_property (G_OBJECT (self),
@@ -228,6 +270,8 @@ mm_modem_base_init (MMModemBase *self)
static void
modem_init (MMModem *modem_class)
{
+ modem_class->auth_request = modem_auth_request;
+ modem_class->auth_finish = modem_auth_finish;
}
static gboolean
@@ -326,6 +370,8 @@ finalize (GObject *object)
MMModemBase *self = MM_MODEM_BASE (object);
MMModemBasePrivate *priv = MM_MODEM_BASE_GET_PRIVATE (self);
+ mm_auth_provider_cancel_for_owner (priv->authp, object);
+
g_hash_table_destroy (priv->ports);
g_free (priv->driver);
g_free (priv->plugin);