diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-06 17:33:03 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-09-06 19:58:02 +0200 |
commit | 39e819788d9d6751a1b90be4dc1b400b7e6cbcc4 (patch) | |
tree | a7351be61f1b2de0ad5154024b5a4c0d59dcf6aa | |
parent | 163e16754388f74d2bac28e28573de37e837f9ed (diff) |
libmm-common,sms-properties: handle the 'data' property for SMS
-rw-r--r-- | libmm-common/mm-sms-properties.c | 92 | ||||
-rw-r--r-- | libmm-common/mm-sms-properties.h | 39 |
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); |