aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-09-06 17:33:03 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-09-06 19:58:02 +0200
commit39e819788d9d6751a1b90be4dc1b400b7e6cbcc4 (patch)
treea7351be61f1b2de0ad5154024b5a4c0d59dcf6aa
parent163e16754388f74d2bac28e28573de37e837f9ed (diff)
libmm-common,sms-properties: handle the 'data' property for SMS
-rw-r--r--libmm-common/mm-sms-properties.c92
-rw-r--r--libmm-common/mm-sms-properties.h39
2 files changed, 115 insertions, 16 deletions
diff --git a/libmm-common/mm-sms-properties.c b/libmm-common/mm-sms-properties.c
index ca186a81..3dd29933 100644
--- a/libmm-common/mm-sms-properties.c
+++ b/libmm-common/mm-sms-properties.c
@@ -24,6 +24,7 @@
G_DEFINE_TYPE (MMSmsProperties, mm_sms_properties, G_TYPE_OBJECT);
#define PROPERTY_TEXT "text"
+#define PROPERTY_DATA "data"
#define PROPERTY_NUMBER "number"
#define PROPERTY_SMSC "smsc"
#define PROPERTY_VALIDITY "validity"
@@ -31,6 +32,7 @@ G_DEFINE_TYPE (MMSmsProperties, mm_sms_properties, G_TYPE_OBJECT);
struct _MMSmsPropertiesPrivate {
gchar *text;
+ GByteArray *data;
gchar *number;
gchar *smsc;
gboolean validity_set;
@@ -52,6 +54,36 @@ mm_sms_properties_set_text (MMSmsProperties *self,
}
void
+mm_sms_properties_set_data (MMSmsProperties *self,
+ const guint8 *data,
+ gsize data_length)
+{
+ g_return_if_fail (MM_IS_SMS_PROPERTIES (self));
+
+ if (self->priv->data)
+ g_byte_array_unref (self->priv->data);
+
+ if (data && data_length)
+ self->priv->data = g_byte_array_append (g_byte_array_sized_new (data_length),
+ data,
+ data_length);
+ else
+ self->priv->data = NULL;
+}
+
+void
+mm_sms_properties_set_data_bytearray (MMSmsProperties *self,
+ GByteArray *data)
+{
+ g_return_if_fail (MM_IS_SMS_PROPERTIES (self));
+
+ if (self->priv->data)
+ g_byte_array_unref (self->priv->data);
+
+ self->priv->data = (data ? g_byte_array_ref (data) : NULL);
+}
+
+void
mm_sms_properties_set_number (MMSmsProperties *self,
const gchar *number)
{
@@ -109,6 +141,34 @@ mm_sms_properties_get_number (MMSmsProperties *self)
return self->priv->number;
}
+const guint8 *
+mm_sms_properties_get_data (MMSmsProperties *self,
+ gsize *data_len)
+{
+ g_return_val_if_fail (MM_IS_SMS_PROPERTIES (self), NULL);
+
+ if (self->priv->data && data_len)
+ *data_len = self->priv->data->len;
+
+ return self->priv->data->data;
+}
+
+GByteArray *
+mm_sms_properties_peek_data_bytearray (MMSmsProperties *self)
+{
+ g_return_val_if_fail (MM_IS_SMS_PROPERTIES (self), NULL);
+
+ return self->priv->data;
+}
+
+GByteArray *
+mm_sms_properties_get_data_bytearray (MMSmsProperties *self)
+{
+ g_return_val_if_fail (MM_IS_SMS_PROPERTIES (self), NULL);
+
+ return (self->priv->data ? g_byte_array_ref (self->priv->data) : NULL);
+}
+
const gchar *
mm_sms_properties_get_smsc (MMSmsProperties *self)
{
@@ -154,6 +214,18 @@ mm_sms_properties_get_dictionary (MMSmsProperties *self)
PROPERTY_TEXT,
g_variant_new_string (self->priv->text));
+ if (self->priv->data)
+ g_variant_builder_add (
+ &builder,
+ "{sv}",
+ PROPERTY_DATA,
+ g_variant_new_from_data (G_VARIANT_TYPE ("ay"),
+ self->priv->data->data,
+ self->priv->data->len * sizeof (guint8),
+ TRUE,
+ NULL,
+ NULL));
+
if (self->priv->number)
g_variant_builder_add (&builder,
"{sv}",
@@ -236,6 +308,13 @@ consume_string (MMSmsProperties *self,
}
mm_sms_properties_set_class (self, n);
+ } else if (g_str_equal (key, PROPERTY_DATA)) {
+ g_set_error (error,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_INVALID_ARGS,
+ "Invalid properties string, key '%s' cannot be given in a string",
+ key);
+ return FALSE;
} else {
g_set_error (error,
MM_CORE_ERROR,
@@ -300,7 +379,16 @@ consume_variant (MMSmsProperties *properties,
mm_sms_properties_set_text (
properties,
g_variant_get_string (value, NULL));
- else if (g_str_equal (key, PROPERTY_NUMBER))
+ else if (g_str_equal (key, PROPERTY_DATA)) {
+ const guint8 *data;
+ gsize data_len = 0;
+
+ data = g_variant_get_fixed_array (value, &data_len, sizeof (guint8));
+ mm_sms_properties_set_data (
+ properties,
+ data,
+ data_len);
+ } else if (g_str_equal (key, PROPERTY_NUMBER))
mm_sms_properties_set_number (
properties,
g_variant_get_string (value, NULL));
@@ -417,6 +505,8 @@ finalize (GObject *object)
g_free (self->priv->text);
g_free (self->priv->number);
g_free (self->priv->smsc);
+ if (self->priv->data)
+ g_byte_array_unref (self->priv->data);
G_OBJECT_CLASS (mm_sms_properties_parent_class)->finalize (object);
}
diff --git a/libmm-common/mm-sms-properties.h b/libmm-common/mm-sms-properties.h
index 752abade..7996ee6e 100644
--- a/libmm-common/mm-sms-properties.h
+++ b/libmm-common/mm-sms-properties.h
@@ -51,22 +51,31 @@ MMSmsProperties *mm_sms_properties_new_from_dictionary (GVariant *dictionary,
MMSmsProperties *mm_sms_properties_dup (MMSmsProperties *orig);
-void mm_sms_properties_set_text (MMSmsProperties *properties,
- const gchar *text);
-void mm_sms_properties_set_number (MMSmsProperties *properties,
- const gchar *number);
-void mm_sms_properties_set_smsc (MMSmsProperties *properties,
- const gchar *smsc);
-void mm_sms_properties_set_validity (MMSmsProperties *properties,
- guint validity);
-void mm_sms_properties_set_class (MMSmsProperties *properties,
- guint class);
+void mm_sms_properties_set_text (MMSmsProperties *self,
+ const gchar *text);
+void mm_sms_properties_set_data (MMSmsProperties *self,
+ const guint8 *data,
+ gsize data_length);
+void mm_sms_properties_set_data_bytearray (MMSmsProperties *self,
+ GByteArray *data);
+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,
+ guint validity);
+void mm_sms_properties_set_class (MMSmsProperties *self,
+ guint class);
-const gchar *mm_sms_properties_get_text (MMSmsProperties *properties);
-const gchar *mm_sms_properties_get_number (MMSmsProperties *properties);
-const gchar *mm_sms_properties_get_smsc (MMSmsProperties *properties);
-guint mm_sms_properties_get_validity (MMSmsProperties *properties);
-guint mm_sms_properties_get_class (MMSmsProperties *properties);
+const gchar *mm_sms_properties_get_text (MMSmsProperties *self);
+const guint8 *mm_sms_properties_get_data (MMSmsProperties *self,
+ gsize *data_len);
+GByteArray *mm_sms_properties_peek_data_bytearray (MMSmsProperties *self);
+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);
+guint mm_sms_properties_get_class (MMSmsProperties *self);
GVariant *mm_sms_properties_get_dictionary (MMSmsProperties *self);