aboutsummaryrefslogtreecommitdiff
path: root/libmm-glib
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-11-26 12:42:28 +0100
committerAleksander Morgado <aleksander@aleksander.es>2021-12-24 14:03:15 +0100
commit24e634229d27cd9743c5c5cfa3e6cedd98bf1379 (patch)
tree185e13bf6db4c342005ffeb8832ae6aa49dfe397 /libmm-glib
parente61fd7ca589110810baec2237d052b564dfe4488 (diff)
libmm-glib: new 'profile-enabled' in 3GPP profile
Not applicable to bearer properties, as this is exclusively a proflie management setting, unrelated to connection attempts.
Diffstat (limited to 'libmm-glib')
-rw-r--r--libmm-glib/mm-3gpp-profile.c67
-rw-r--r--libmm-glib/mm-3gpp-profile.h4
2 files changed, 71 insertions, 0 deletions
diff --git a/libmm-glib/mm-3gpp-profile.c b/libmm-glib/mm-3gpp-profile.c
index af0782a3..eca2f7e0 100644
--- a/libmm-glib/mm-3gpp-profile.c
+++ b/libmm-glib/mm-3gpp-profile.c
@@ -46,6 +46,7 @@ G_DEFINE_TYPE (MM3gppProfile, mm_3gpp_profile, G_TYPE_OBJECT)
#define PROPERTY_IP_TYPE "ip-type"
#define PROPERTY_APN_TYPE "apn-type"
#define PROPERTY_ACCESS_TYPE_PREFERENCE "access-type-preference"
+#define PROPERTY_ENABLED "profile-enabled"
struct _MM3gppProfilePrivate {
gint profile_id;
@@ -54,6 +55,8 @@ struct _MM3gppProfilePrivate {
MMBearerIpFamily ip_type;
MMBearerApnType apn_type;
MMBearerAccessTypePreference access_type_preference;
+ gboolean enabled;
+ gboolean enabled_set;
/* Optional authentication settings */
MMBearerAllowedAuth allowed_auth;
@@ -112,6 +115,9 @@ mm_3gpp_profile_cmp (MM3gppProfile *a,
if (!(flags & MM_3GPP_PROFILE_CMP_FLAGS_NO_ACCESS_TYPE_PREFERENCE) &&
(a->priv->access_type_preference != b->priv->access_type_preference))
return FALSE;
+ if (!(flags & MM_3GPP_PROFILE_CMP_FLAGS_NO_ENABLED) &&
+ ((a->priv->enabled != b->priv->enabled) || (a->priv->enabled_set != b->priv->enabled_set)))
+ return FALSE;
return TRUE;
}
@@ -474,6 +480,45 @@ mm_3gpp_profile_get_access_type_preference (MM3gppProfile *self)
/*****************************************************************************/
/**
+ * mm_3gpp_profile_set_enabled:
+ * @self: a #MM3gppProfile.
+ * @enabled: boolean value.
+ *
+ * Sets the flag to indicate whether the profile is enabled or disabled.
+ *
+ * Since: 1.20
+ */
+void
+mm_3gpp_profile_set_enabled (MM3gppProfile *self,
+ gboolean enabled)
+{
+ g_return_if_fail (MM_IS_3GPP_PROFILE (self));
+
+ self->priv->enabled_set = TRUE;
+ self->priv->enabled = enabled;
+}
+
+/**
+ * mm_3gpp_profile_get_enabled:
+ * @self: a #MM3gppProfile.
+ *
+ * Checks whether the profile is enabled or disabled.
+ *
+ * Returns: %TRUE if the profile is enabled, %FALSE otherwise.
+ *
+ * Since: 1.20
+ */
+gboolean
+mm_3gpp_profile_get_enabled (MM3gppProfile *self)
+{
+ g_return_val_if_fail (MM_IS_3GPP_PROFILE (self), FALSE);
+
+ return self->priv->enabled;
+}
+
+/*****************************************************************************/
+
+/**
* mm_3gpp_profile_get_dictionary: (skip)
*/
GVariant *
@@ -542,6 +587,13 @@ mm_3gpp_profile_get_dictionary (MM3gppProfile *self)
PROPERTY_ACCESS_TYPE_PREFERENCE,
g_variant_new_uint32 (self->priv->access_type_preference));
+ if (self->priv->enabled_set)
+ g_variant_builder_add (&builder,
+ "{sv}",
+ PROPERTY_ENABLED,
+ g_variant_new_boolean (self->priv->enabled));
+
+
return g_variant_ref_sink (g_variant_builder_end (&builder));
}
@@ -612,6 +664,16 @@ mm_3gpp_profile_consume_string (MM3gppProfile *self,
return FALSE;
}
mm_3gpp_profile_set_access_type_preference (self, access_type_preference);
+ } else if (g_str_equal (key, PROPERTY_ENABLED)) {
+ GError *inner_error = NULL;
+ gboolean profile_enabled;
+
+ profile_enabled = mm_common_get_boolean_from_string (value, &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
+ return FALSE;
+ }
+ mm_3gpp_profile_set_enabled (self, profile_enabled);
} else {
g_set_error (error,
MM_CORE_ERROR,
@@ -712,6 +774,10 @@ mm_3gpp_profile_consume_variant (MM3gppProfile *self,
mm_3gpp_profile_set_access_type_preference (
self,
g_variant_get_uint32 (value));
+ else if (g_str_equal (key, PROPERTY_ENABLED))
+ mm_3gpp_profile_set_enabled (
+ self,
+ g_variant_get_boolean (value));
else {
/* Set error */
g_set_error (error,
@@ -798,6 +864,7 @@ mm_3gpp_profile_init (MM3gppProfile *self)
self->priv->ip_type = MM_BEARER_IP_FAMILY_NONE;
self->priv->apn_type = MM_BEARER_APN_TYPE_NONE;
self->priv->access_type_preference = MM_BEARER_ACCESS_TYPE_PREFERENCE_NONE;
+ self->priv->enabled = TRUE;
}
static void
diff --git a/libmm-glib/mm-3gpp-profile.h b/libmm-glib/mm-3gpp-profile.h
index 21a95ccd..ecff787a 100644
--- a/libmm-glib/mm-3gpp-profile.h
+++ b/libmm-glib/mm-3gpp-profile.h
@@ -92,6 +92,8 @@ void mm_3gpp_profile_set_apn_type (MM3gppProfile *s
MMBearerApnType apn_type);
void mm_3gpp_profile_set_access_type_preference (MM3gppProfile *self,
MMBearerAccessTypePreference access_type_preference);
+void mm_3gpp_profile_set_enabled (MM3gppProfile *self,
+ gboolean enabled);
gint mm_3gpp_profile_get_profile_id (MM3gppProfile *self);
const gchar *mm_3gpp_profile_get_profile_name (MM3gppProfile *self);
@@ -102,6 +104,7 @@ const gchar *mm_3gpp_profile_get_password (MM3gpp
MMBearerIpFamily mm_3gpp_profile_get_ip_type (MM3gppProfile *self);
MMBearerApnType mm_3gpp_profile_get_apn_type (MM3gppProfile *self);
MMBearerAccessTypePreference mm_3gpp_profile_get_access_type_preference (MM3gppProfile *self);
+gboolean mm_3gpp_profile_get_enabled (MM3gppProfile *self);
/*****************************************************************************/
/* ModemManager/libmm-glib/mmcli specific methods */
@@ -132,6 +135,7 @@ typedef enum {
MM_3GPP_PROFILE_CMP_FLAGS_NO_APN_TYPE = 1 << 4,
MM_3GPP_PROFILE_CMP_FLAGS_NO_IP_TYPE = 1 << 5,
MM_3GPP_PROFILE_CMP_FLAGS_NO_ACCESS_TYPE_PREFERENCE = 1 << 6,
+ MM_3GPP_PROFILE_CMP_FLAGS_NO_ENABLED = 1 << 7,
} MM3gppProfileCmpFlags;
gboolean mm_3gpp_profile_cmp (MM3gppProfile *a,