aboutsummaryrefslogtreecommitdiff
path: root/src/mm-sms.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-04-03 16:30:48 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-04-05 17:48:51 +0200
commitf9105bff875ae0e7263718a317e156948957a6d0 (patch)
tree417299f51a7d17d7d5bd30692fd7b5ffd98092de /src/mm-sms.c
parent372a49bbf661c95110852c86df54008a7bad2774 (diff)
api,introspection: update 'Validity' property in the SMS interface
We don't want to support only 'relative' validity, so don't assume that the Validity property will always be a uint32 value. Instead, we define the Validity propery as '(uv)' tuple, where the first value (a MMSmsValidityType) specifies the type of validity, and the second value is a variant formatted accordingly to what the validity type specifies (e.g. a uint32 value if the type is MM_SMS_VALIDITY_TYPE_RELATIVE).
Diffstat (limited to 'src/mm-sms.c')
-rw-r--r--src/mm-sms.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/src/mm-sms.c b/src/mm-sms.c
index c540692e..f0a08e69 100644
--- a/src/mm-sms.c
+++ b/src/mm-sms.c
@@ -73,6 +73,29 @@ struct _MMSmsPrivate {
/*****************************************************************************/
+static guint
+get_validity_relative (GVariant *tuple)
+{
+ guint type;
+ GVariant *value;
+ guint value_integer = 0;
+
+ if (!tuple)
+ return 0;
+
+ g_variant_get (tuple, "(ub)", &type, &value);
+
+ if (type == MM_SMS_VALIDITY_TYPE_RELATIVE)
+ value_integer = g_variant_get_uint32 (value);
+ else
+ /* Currently not supported other than relative */
+ g_warn_if_reached ();
+
+ g_variant_unref (value);
+
+ return value_integer;
+}
+
static gboolean
generate_submit_pdus (MMSms *self,
GError **error)
@@ -172,7 +195,7 @@ generate_submit_pdus (MMSms *self,
mm_sms_part_set_encoding (part, encoding);
mm_sms_part_set_number (part, mm_gdbus_sms_get_number (MM_GDBUS_SMS (self)));
mm_sms_part_set_smsc (part, mm_gdbus_sms_get_smsc (MM_GDBUS_SMS (self)));
- mm_sms_part_set_validity (part, mm_gdbus_sms_get_validity (MM_GDBUS_SMS (self)));
+ mm_sms_part_set_validity_relative (part, get_validity_relative (mm_gdbus_sms_get_validity (MM_GDBUS_SMS (self))));
mm_sms_part_set_class (part, mm_gdbus_sms_get_class (MM_GDBUS_SMS (self)));
mm_sms_part_set_delivery_report_request (part, mm_gdbus_sms_get_delivery_report_request (MM_GDBUS_SMS (self)));
@@ -1376,6 +1399,7 @@ assemble_sms (MMSms *self,
MMSmsPart **sorted_parts;
GString *fulltext;
GByteArray *fulldata;
+ guint validity_relative;
sorted_parts = g_new0 (MMSmsPart *, self->priv->max_parts);
@@ -1463,6 +1487,9 @@ assemble_sms (MMSms *self,
/* If we got all parts, we also have the first one always */
g_assert (sorted_parts[0] != NULL);
+ /* Prepare for validity tuple */
+ validity_relative = mm_sms_part_get_validity_relative (sorted_parts[0]);
+
/* If we got everything, assemble the text! */
g_object_set (self,
"pdu-type", mm_sms_part_get_pdu_type (sorted_parts[0]),
@@ -1476,7 +1503,9 @@ assemble_sms (MMSms *self,
"smsc", mm_sms_part_get_smsc (sorted_parts[0]),
"class", mm_sms_part_get_class (sorted_parts[0]),
"number", mm_sms_part_get_number (sorted_parts[0]),
- "validity", mm_sms_part_get_validity (sorted_parts[0]),
+ "validity", (validity_relative ?
+ g_variant_new ("(uv)", MM_SMS_VALIDITY_TYPE_RELATIVE, g_variant_new_uint32 (validity_relative)) :
+ g_variant_new ("(uv)", MM_SMS_VALIDITY_TYPE_UNKNOWN, g_variant_new_boolean (FALSE))),
"timestamp", mm_sms_part_get_timestamp (sorted_parts[0]),
"discharge-timestamp", mm_sms_part_get_discharge_timestamp (sorted_parts[0]),
"delivery-state", mm_sms_part_get_delivery_state (sorted_parts[0]),