blob: 7dfdc81665b1843b9fcfd6b06eb108afe25636be [file]
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
*
* Copyright (C) 2021 Aleksander Morgado <aleksander@aleksander.es>
* Copyright (C) 2021 Google, Inc.
*/
#ifndef MM_IFACE_MODEM_3GPP_PROFILE_MANAGER_H
#define MM_IFACE_MODEM_3GPP_PROFILE_MANAGER_H
#include <glib-object.h>
#include <gio/gio.h>
#define _LIBMM_INSIDE_MM
#include <libmm-glib.h>
#include "mm-iface-modem-3gpp.h"
#define MM_TYPE_IFACE_MODEM_3GPP_PROFILE_MANAGER mm_iface_modem_3gpp_profile_manager_get_type ()
G_DECLARE_INTERFACE (MMIfaceModem3gppProfileManager, mm_iface_modem_3gpp_profile_manager, MM, IFACE_MODEM_3GPP_PROFILE_MANAGER, MMIfaceModem3gpp)
#define MM_IFACE_MODEM_3GPP_PROFILE_MANAGER_DBUS_SKELETON "iface-modem-3gpp-profile-manager-dbus-skeleton"
struct _MMIfaceModem3gppProfileManagerInterface {
GTypeInterface g_iface;
/* Check for profile management support (async) */
void (* check_support) (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* check_support_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
gchar **index_field,
GError **error);
/* Asynchronous setup of unsolicited events */
void (* setup_unsolicited_events) (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* setup_unsolicited_events_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* Asynchronous enabling of unsolicited events */
void (* enable_unsolicited_events) (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* enable_unsolicited_events_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* Asynchronous disabling of unsolicited events */
void (* disable_unsolicited_events) (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* disable_unsolicited_events_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* Asynchronous cleaning up of unsolicited events */
void (* cleanup_unsolicited_events) (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* cleanup_unsolicited_events_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* Get a single profile.
* This is completely optional, and should be used by implementations that are able
* to query one single profile settings. For all other implementations, it should be
* set to NULL so that the generic implementation is used (listing all and lookup by
* profile id) */
void (* get_profile) (MMIfaceModem3gppProfileManager *self,
gint profile_id,
GAsyncReadyCallback callback,
gpointer user_data);
MM3gppProfile * (* get_profile_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* List */
void (* list_profiles) (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* list_profiles_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GList **profiles,
GError **error);
/* Delete */
void (* delete_profile) (MMIfaceModem3gppProfileManager *self,
MM3gppProfile *requested,
const gchar *index_field,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* delete_profile_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/*
* Check profile format (substep of 'set profiles')
*
* Before a profile is set, we would like to check the format of the set
* operation, if possible.
*
* Expected outputs:
* - new_id: whether new profiles can be created with a specific known id.
* - min_profile_id: minimum supported profile id.
* - max_profile_id: maximum supported profile id.
* - apn_cmp: method to use when comparing APN strings.
* - profile_cmp_flags: flags to use when comparing profile objects.
*
* The check is done per IP family, as the ranges may be different for each.
*/
void (* check_format) (MMIfaceModem3gppProfileManager *self,
MMBearerIpFamily family,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* check_format_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
gboolean *new_id,
gint *min_profile_id,
gint *max_profile_id,
GEqualFunc *apn_cmp,
MM3gppProfileCmpFlags *profile_cmp_flags,
GError **error);
/* Check activated profile (substep of 'set profiles')
*
* Before a profile is set, we may attempt to deactivate it first, but only
* if there is no known bearer using it already and only if this check for
* activation really reports the profile being already activated.
*
* The given profile MUST have profile-id set, so the set_profile()
* implementation should only use it once the profile-id is known, never
* before.
*
* This step is optional (method pointers can be initialized to NULL), so
* that the deactivate profile step is done always.
*/
void (* check_activated_profile) (MMIfaceModem3gppProfileManager *self,
MM3gppProfile *requested,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* check_activated_profile_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
gboolean *out_activated,
GError **error);
/* Deactivate profile (substep of 'set profiles')
*
* Before a profile is set, we may attempt to deactivate it first, but only
* if there is no known bearer using it already.
*
* The given profile MUST have profile-id set, so the set_profile()
* implementation should only use it once the profile-id is known, never
* before.
*/
void (* deactivate_profile) (MMIfaceModem3gppProfileManager *self,
MM3gppProfile *requested,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* deactivate_profile_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* Store profile (substep of 'set profiles') */
void (* store_profile) (MMIfaceModem3gppProfileManager *self,
MM3gppProfile *requested,
const gchar *index_field,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean (* store_profile_finish) (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
gint *out_profile_id,
MMBearerApnType *out_apn_type,
GError **error);
};
/* Initialize profile manager interface (async) */
void mm_iface_modem_3gpp_profile_manager_initialize (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_iface_modem_3gpp_profile_manager_initialize_finish (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* Enable profile manager interface (async) */
void mm_iface_modem_3gpp_profile_manager_enable (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_iface_modem_3gpp_profile_manager_enable_finish (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* Disable profile manager interface (async) */
void mm_iface_modem_3gpp_profile_manager_disable (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_iface_modem_3gpp_profile_manager_disable_finish (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
/* Shutdown profile manager interface */
void mm_iface_modem_3gpp_profile_manager_shutdown (MMIfaceModem3gppProfileManager *self);
/* Bind properties for simple GetStatus() */
void mm_iface_modem_3gpp_profile_manager_bind_simple_status (MMIfaceModem3gppProfileManager *self,
MMSimpleStatus *status);
/* Helpers to request ignorig Updated signal emission requests sent by implementations during
* our own operations */
void mm_iface_modem_3gpp_profile_manager_update_ignore_start (MMIfaceModem3gppProfileManager *self);
void mm_iface_modem_3gpp_profile_manager_update_ignore_stop (MMIfaceModem3gppProfileManager *self);
void mm_iface_modem_3gpp_profile_manager_update_ignore_stop_delayed (MMIfaceModem3gppProfileManager *self);
/* Helper to emit the Updated signal by implementations */
void mm_iface_modem_3gpp_profile_manager_updated (MMIfaceModem3gppProfileManager *self);
/* Internal list profile management */
void mm_iface_modem_3gpp_profile_manager_get_profile (MMIfaceModem3gppProfileManager *self,
gint profile_id,
GAsyncReadyCallback callback,
gpointer user_data);
MM3gppProfile *mm_iface_modem_3gpp_profile_manager_get_profile_finish (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
void mm_iface_modem_3gpp_profile_manager_list_profiles (MMIfaceModem3gppProfileManager *self,
GAsyncReadyCallback callback,
gpointer user_data);
gboolean mm_iface_modem_3gpp_profile_manager_list_profiles_finish (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GList **profiles,
GError **error);
void mm_iface_modem_3gpp_profile_manager_set_profile (MMIfaceModem3gppProfileManager *self,
MM3gppProfile *requested,
const gchar *index_field,
gboolean strict,
GAsyncReadyCallback callback,
gpointer user_data);
MM3gppProfile *mm_iface_modem_3gpp_profile_manager_set_profile_finish (MMIfaceModem3gppProfileManager *self,
GAsyncResult *res,
GError **error);
#endif /* MM_IFACE_MODEM_3GPP_PROFILE_MANAGER_H */