summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-04-25 19:04:35 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-04-25 19:04:35 +0200
commit456a4289b7532f646fe697118cc7bfb386f7d328 (patch)
treeee06c4e16d5326598c8952481305771cf2e3dc26
parent23204111130fca0a93a22508431ad8bb17210bdd (diff)
downloadModemManager-456a4289b7532f646fe697118cc7bfb386f7d328.tar.gz
libmm-glib: handle relative validity in the MMSmsProperties
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt5
-rw-r--r--libmm-glib/mm-sms-properties.c70
-rw-r--r--libmm-glib/mm-sms-properties.h5
3 files changed, 55 insertions, 25 deletions
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index d26261877..d52795e2e 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -929,8 +929,9 @@ mm_sms_properties_get_number
mm_sms_properties_set_number
mm_sms_properties_get_smsc
mm_sms_properties_set_smsc
-mm_sms_properties_get_validity
-mm_sms_properties_set_validity
+mm_sms_properties_get_validity_type
+mm_sms_properties_get_validity_relative
+mm_sms_properties_set_validity_relative
mm_sms_properties_get_class
mm_sms_properties_set_class
mm_sms_properties_get_delivery_report_request
diff --git a/libmm-glib/mm-sms-properties.c b/libmm-glib/mm-sms-properties.c
index f946ad074..05d5fd16b 100644
--- a/libmm-glib/mm-sms-properties.c
+++ b/libmm-glib/mm-sms-properties.c
@@ -18,6 +18,7 @@
#include <stdlib.h>
#include "mm-errors-types.h"
+#include "mm-enums-types.h"
#include "mm-common-helpers.h"
#include "mm-sms-properties.h"
@@ -48,8 +49,8 @@ struct _MMSmsPropertiesPrivate {
GByteArray *data;
gchar *number;
gchar *smsc;
- gboolean validity_set;
- guint validity;
+ MMSmsValidityType validity_type;
+ guint validity_relative;
gboolean class_set;
guint class;
gboolean delivery_report_request_set;
@@ -264,36 +265,53 @@ mm_sms_properties_get_smsc (MMSmsProperties *self)
/*****************************************************************************/
/**
- * mm_sms_properties_set_validity:
+ * mm_sms_properties_set_validity_relative:
* @self: A #MMSmsProperties.
- * @validity: The validity.
+ * @validity: The validity of %MM_SMS_VALIDITY_TYPE_RELATIVE type.
*
- * Sets the validity time of the SMS.
+ * Sets the relative validity time of the SMS.
*/
void
-mm_sms_properties_set_validity (MMSmsProperties *self,
- guint validity)
+mm_sms_properties_set_validity_relative (MMSmsProperties *self,
+ guint validity)
{
g_return_if_fail (MM_IS_SMS_PROPERTIES (self));
- self->priv->validity_set = TRUE;
- self->priv->validity = validity;
+ self->priv->validity_type = MM_SMS_VALIDITY_TYPE_RELATIVE;
+ self->priv->validity_relative = validity;
}
/**
- * mm_sms_properties_get_validity:
+ * mm_sms_properties_get_validity_type:
* @self: A #MMSmsProperties.
*
- * Gets the validity time of the SMS.
+ * Gets the relative validity type the SMS.
+ *
+ * Returns: a #MMSmsValidityType.
+ */
+MMSmsValidityType
+mm_sms_properties_get_validity_type (MMSmsProperties *self)
+{
+ g_return_val_if_fail (MM_IS_SMS_PROPERTIES (self), 0);
+
+ return self->priv->validity_type;
+}
+
+/**
+ * mm_sms_properties_get_validity_relative:
+ * @self: A #MMSmsProperties.
+ *
+ * Gets the relative validity time of the SMS.
*
* Returns: the validity time or 0 if unknown.
*/
guint
-mm_sms_properties_get_validity (MMSmsProperties *self)
+mm_sms_properties_get_validity_relative (MMSmsProperties *self)
{
g_return_val_if_fail (MM_IS_SMS_PROPERTIES (self), 0);
+ g_return_val_if_fail (self->priv->validity_type == MM_SMS_VALIDITY_TYPE_RELATIVE, 0);
- return self->priv->validity;
+ return self->priv->validity_relative;
}
/*****************************************************************************/
@@ -411,11 +429,11 @@ mm_sms_properties_get_dictionary (MMSmsProperties *self)
PROPERTY_SMSC,
g_variant_new_string (self->priv->smsc));
- if (self->priv->validity_set)
+ if (self->priv->validity_type == MM_SMS_VALIDITY_TYPE_RELATIVE)
g_variant_builder_add (&builder,
"{sv}",
PROPERTY_VALIDITY,
- g_variant_new_uint32 (self->priv->validity));
+ g_variant_new ("(uv)", MM_SMS_VALIDITY_TYPE_RELATIVE, g_variant_new_uint32 (self->priv->validity_relative)));
if (self->priv->class_set)
g_variant_builder_add (&builder,
@@ -497,7 +515,7 @@ consume_string (MMSmsProperties *self,
return FALSE;
}
- mm_sms_properties_set_validity (self, n);
+ mm_sms_properties_set_validity_relative (self, n);
} else if (g_str_equal (key, PROPERTY_CLASS)) {
GError *inner_error = NULL;
guint n;
@@ -608,11 +626,20 @@ consume_variant (MMSmsProperties *properties,
mm_sms_properties_set_smsc (
properties,
g_variant_get_string (value, NULL));
- else if (g_str_equal (key, PROPERTY_VALIDITY))
- mm_sms_properties_set_validity (
- properties,
- g_variant_get_uint32 (value));
- else if (g_str_equal (key, PROPERTY_CLASS))
+ else if (g_str_equal (key, PROPERTY_VALIDITY)) {
+ guint type;
+ GVariant *val;
+
+ g_variant_get (value, "(uv)", &type, &val);
+ if (type == MM_SMS_VALIDITY_TYPE_RELATIVE) {
+ mm_sms_properties_set_validity_relative (
+ properties,
+ g_variant_get_uint32 (val));
+ } else if (type != MM_SMS_VALIDITY_TYPE_UNKNOWN)
+ g_warning ("SMS validity type '%s' not supported yet",
+ mm_sms_validity_type_get_string (type));
+ g_variant_unref (val);
+ } else if (g_str_equal (key, PROPERTY_CLASS))
mm_sms_properties_set_class (
properties,
g_variant_get_uint32 (value));
@@ -718,6 +745,7 @@ mm_sms_properties_init (MMSmsProperties *self)
self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
MM_TYPE_SMS_PROPERTIES,
MMSmsPropertiesPrivate);
+ self->priv->validity_type = MM_SMS_VALIDITY_TYPE_UNKNOWN;
}
static void
diff --git a/libmm-glib/mm-sms-properties.h b/libmm-glib/mm-sms-properties.h
index 1012c7f47..82c65595a 100644
--- a/libmm-glib/mm-sms-properties.h
+++ b/libmm-glib/mm-sms-properties.h
@@ -68,7 +68,7 @@ void mm_sms_properties_set_number (MMSmsProperties *self,
const gchar *number);
void mm_sms_properties_set_smsc (MMSmsProperties *self,
const gchar *smsc);
-void mm_sms_properties_set_validity (MMSmsProperties *self,
+void mm_sms_properties_set_validity_relative (MMSmsProperties *self,
guint validity);
void mm_sms_properties_set_class (MMSmsProperties *self,
guint class);
@@ -82,7 +82,8 @@ GByteArray *mm_sms_properties_peek_data_bytearray (MMSmsProperties *se
GByteArray *mm_sms_properties_get_data_bytearray (MMSmsProperties *self);
const gchar *mm_sms_properties_get_number (MMSmsProperties *self);
const gchar *mm_sms_properties_get_smsc (MMSmsProperties *self);
-guint mm_sms_properties_get_validity (MMSmsProperties *self);
+MMSmsValidityType mm_sms_properties_get_validity_type (MMSmsProperties *self);
+guint mm_sms_properties_get_validity_relative (MMSmsProperties *self);
guint mm_sms_properties_get_class (MMSmsProperties *self);
gboolean mm_sms_properties_get_delivery_report_request (MMSmsProperties *self);