libmm-common,sms-properties: handle the 'data' property for SMS

This commit is contained in:
Aleksander Morgado
2012-09-06 19:58:02 +02:00
parent 163e167543
commit 39e819788d
2 changed files with 115 additions and 16 deletions
+91 -1
View File
@@ -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;
@@ -51,6 +53,36 @@ mm_sms_properties_set_text (MMSmsProperties *self,
self->priv->text = g_strdup (text);
}
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);
}
+24 -15
View File
@@ -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);