aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-08-20 20:17:53 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-10-25 19:49:54 +0200
commit86795b928e0cc7945c88103a79d5cf7353319d8f (patch)
tree642aef0c3dd1c0bb18bd613c2a58072ccff236ed
parent663017a3d20f3beeff12bd5b56f730c6b43eee32 (diff)
libmm-glib: allow new 'teleservice-id' and 'service-category' keywords in MMSmsProperties
-rw-r--r--docs/reference/libmm-glib/libmm-glib-sections.txt4
-rw-r--r--libmm-glib/mm-common-helpers.c44
-rw-r--r--libmm-glib/mm-common-helpers.h4
-rw-r--r--libmm-glib/mm-sms-properties.c120
-rw-r--r--libmm-glib/mm-sms-properties.h6
5 files changed, 176 insertions, 2 deletions
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index ace32ff1..825f98df 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -1103,6 +1103,10 @@ mm_sms_properties_get_class
mm_sms_properties_set_class
mm_sms_properties_get_delivery_report_request
mm_sms_properties_set_delivery_report_request
+mm_sms_properties_get_teleservice_id
+mm_sms_properties_set_teleservice_id
+mm_sms_properties_get_service_category
+mm_sms_properties_set_service_category
<SUBSECTION Private>
mm_sms_properties_get_dictionary
mm_sms_properties_dup
diff --git a/libmm-glib/mm-common-helpers.c b/libmm-glib/mm-common-helpers.c
index 8d1f68ef..088891f3 100644
--- a/libmm-glib/mm-common-helpers.c
+++ b/libmm-glib/mm-common-helpers.c
@@ -957,6 +957,50 @@ mm_common_get_sms_storage_from_string (const gchar *str,
return MM_SMS_STORAGE_UNKNOWN;
}
+MMSmsCdmaTeleserviceId
+mm_common_get_sms_cdma_teleservice_id_from_string (const gchar *str,
+ GError **error)
+{
+ GEnumClass *enum_class;
+ guint i;
+
+ enum_class = G_ENUM_CLASS (g_type_class_ref (MM_TYPE_SMS_CDMA_TELESERVICE_ID));
+
+ for (i = 0; enum_class->values[i].value_nick; i++) {
+ if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick))
+ return enum_class->values[i].value;
+ }
+
+ g_set_error (error,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_INVALID_ARGS,
+ "Couldn't match '%s' with a valid MMSmsCdmaTeleserviceId value",
+ str);
+ return MM_SMS_CDMA_TELESERVICE_ID_UNKNOWN;
+}
+
+MMSmsCdmaServiceCategory
+mm_common_get_sms_cdma_service_category_from_string (const gchar *str,
+ GError **error)
+{
+ GEnumClass *enum_class;
+ guint i;
+
+ enum_class = G_ENUM_CLASS (g_type_class_ref (MM_TYPE_SMS_CDMA_SERVICE_CATEGORY));
+
+ for (i = 0; enum_class->values[i].value_nick; i++) {
+ if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick))
+ return enum_class->values[i].value;
+ }
+
+ g_set_error (error,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_INVALID_ARGS,
+ "Couldn't match '%s' with a valid MMSmsCdmaServiceCategory value",
+ str);
+ return MM_SMS_CDMA_SERVICE_CATEGORY_UNKNOWN;
+}
+
MMOmaFeature
mm_common_get_oma_features_from_string (const gchar *str,
GError **error)
diff --git a/libmm-glib/mm-common-helpers.h b/libmm-glib/mm-common-helpers.h
index e9ef27a9..b05a4a92 100644
--- a/libmm-glib/mm-common-helpers.h
+++ b/libmm-glib/mm-common-helpers.h
@@ -59,6 +59,10 @@ MMBearerAllowedAuth mm_common_get_allowed_auth_from_string (const gchar *str,
GError **error);
MMSmsStorage mm_common_get_sms_storage_from_string (const gchar *str,
GError **error);
+MMSmsCdmaTeleserviceId mm_common_get_sms_cdma_teleservice_id_from_string (const gchar *str,
+ GError **error);
+MMSmsCdmaServiceCategory mm_common_get_sms_cdma_service_category_from_string (const gchar *str,
+ GError **error);
MMOmaFeature mm_common_get_oma_features_from_string (const gchar *str,
GError **error);
MMOmaSessionType mm_common_get_oma_session_type_from_string (const gchar *str,
diff --git a/libmm-glib/mm-sms-properties.c b/libmm-glib/mm-sms-properties.c
index 5294112d..93e8b9b5 100644
--- a/libmm-glib/mm-sms-properties.c
+++ b/libmm-glib/mm-sms-properties.c
@@ -34,7 +34,7 @@
* mm_modem_messaging_create() or mm_modem_messaging_create_sync().
*/
-G_DEFINE_TYPE (MMSmsProperties, mm_sms_properties, G_TYPE_OBJECT);
+G_DEFINE_TYPE (MMSmsProperties, mm_sms_properties, G_TYPE_OBJECT)
#define PROPERTY_TEXT "text"
#define PROPERTY_DATA "data"
@@ -43,6 +43,8 @@ G_DEFINE_TYPE (MMSmsProperties, mm_sms_properties, G_TYPE_OBJECT);
#define PROPERTY_VALIDITY "validity"
#define PROPERTY_CLASS "class"
#define PROPERTY_DELIVERY_REPORT_REQUEST "delivery-report-request"
+#define PROPERTY_TELESERVICE_ID "teleservice-id"
+#define PROPERTY_SERVICE_CATEGORY "service-category"
struct _MMSmsPropertiesPrivate {
gchar *text;
@@ -54,6 +56,8 @@ struct _MMSmsPropertiesPrivate {
gint class;
gboolean delivery_report_request_set;
gboolean delivery_report_request;
+ MMSmsCdmaTeleserviceId teleservice_id;
+ MMSmsCdmaServiceCategory service_category;
};
/*****************************************************************************/
@@ -385,6 +389,74 @@ mm_sms_properties_get_delivery_report_request (MMSmsProperties *self)
/*****************************************************************************/
+/**
+ * mm_sms_properties_set_teleservice_id:
+ * @self: A #MMSmsProperties.
+ * @teleservice_id: The CDMA teleservice ID.
+ *
+ * Sets the CDMA teleservice ID of the SMS.
+ */
+void
+mm_sms_properties_set_teleservice_id (MMSmsProperties *self,
+ MMSmsCdmaTeleserviceId teleservice_id)
+{
+ g_return_if_fail (MM_IS_SMS_PROPERTIES (self));
+
+ self->priv->teleservice_id = teleservice_id;
+}
+
+/**
+ * mm_sms_properties_get_teleservice_id:
+ * @self: A #MMSmsProperties.
+ *
+ * Gets the CDMA teleservice ID of the SMS.
+ *
+ * Returns: the CDMA teleservice ID.
+ */
+MMSmsCdmaTeleserviceId
+mm_sms_properties_get_teleservice_id (MMSmsProperties *self)
+{
+ g_return_val_if_fail (MM_IS_SMS_PROPERTIES (self), MM_SMS_CDMA_TELESERVICE_ID_UNKNOWN);
+
+ return self->priv->teleservice_id;
+}
+
+/*****************************************************************************/
+
+/**
+ * mm_sms_properties_set_service_category:
+ * @self: A #MMSmsProperties.
+ * @service_category: The CDMA service category.
+ *
+ * Sets the CDMA service category of the SMS.
+ */
+void
+mm_sms_properties_set_service_category (MMSmsProperties *self,
+ MMSmsCdmaServiceCategory service_category)
+{
+ g_return_if_fail (MM_IS_SMS_PROPERTIES (self));
+
+ self->priv->service_category = service_category;
+}
+
+/**
+ * mm_sms_properties_get_service_category:
+ * @self: A #MMSmsProperties.
+ *
+ * Gets the CDMA message service category of the SMS.
+ *
+ * Returns: the CDMA service category.
+ */
+MMSmsCdmaServiceCategory
+mm_sms_properties_get_service_category (MMSmsProperties *self)
+{
+ g_return_val_if_fail (MM_IS_SMS_PROPERTIES (self), MM_SMS_CDMA_SERVICE_CATEGORY_UNKNOWN);
+
+ return self->priv->service_category;
+}
+
+/*****************************************************************************/
+
GVariant *
mm_sms_properties_get_dictionary (MMSmsProperties *self)
{
@@ -446,6 +518,18 @@ mm_sms_properties_get_dictionary (MMSmsProperties *self)
PROPERTY_DELIVERY_REPORT_REQUEST,
g_variant_new_boolean (self->priv->delivery_report_request));
+ if (self->priv->teleservice_id != MM_SMS_CDMA_TELESERVICE_ID_UNKNOWN)
+ g_variant_builder_add (&builder,
+ "{sv}",
+ PROPERTY_TELESERVICE_ID,
+ g_variant_new_uint32 (self->priv->teleservice_id));
+
+ if (self->priv->service_category != MM_SMS_CDMA_SERVICE_CATEGORY_UNKNOWN)
+ g_variant_builder_add (&builder,
+ "{sv}",
+ PROPERTY_SERVICE_CATEGORY,
+ g_variant_new_uint32 (self->priv->service_category));
+
return g_variant_ref_sink (g_variant_builder_end (&builder));
}
@@ -539,7 +623,29 @@ consume_string (MMSmsProperties *self,
}
mm_sms_properties_set_delivery_report_request (self, request);
- } else if (g_str_equal (key, PROPERTY_DATA)) {
+ } else if (g_str_equal (key, PROPERTY_TELESERVICE_ID)) {
+ MMSmsCdmaTeleserviceId teleservice_id;
+ GError *inner_error = NULL;
+
+ teleservice_id = mm_common_get_sms_cdma_teleservice_id_from_string (value, &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
+ return FALSE;
+ }
+
+ mm_sms_properties_set_teleservice_id (self, teleservice_id);
+ } else if (g_str_equal (key, PROPERTY_SERVICE_CATEGORY)) {
+ MMSmsCdmaServiceCategory service_category;
+ GError *inner_error = NULL;
+
+ service_category = mm_common_get_sms_cdma_service_category_from_string (value, &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
+ return FALSE;
+ }
+
+ mm_sms_properties_set_service_category (self, service_category);
+ } else if (g_str_equal (key, PROPERTY_DATA)) {
g_set_error (error,
MM_CORE_ERROR,
MM_CORE_ERROR_INVALID_ARGS,
@@ -648,6 +754,14 @@ consume_variant (MMSmsProperties *properties,
mm_sms_properties_set_delivery_report_request (
properties,
g_variant_get_boolean (value));
+ else if (g_str_equal (key, PROPERTY_TELESERVICE_ID))
+ mm_sms_properties_set_teleservice_id (
+ properties,
+ g_variant_get_uint32 (value));
+ else if (g_str_equal (key, PROPERTY_SERVICE_CATEGORY))
+ mm_sms_properties_set_service_category (
+ properties,
+ g_variant_get_uint32 (value));
else {
/* Set error */
g_set_error (error,
@@ -756,6 +870,8 @@ mm_sms_properties_init (MMSmsProperties *self)
MMSmsPropertiesPrivate);
self->priv->validity_type = MM_SMS_VALIDITY_TYPE_UNKNOWN;
self->priv->class = -1;
+ self->priv->teleservice_id = MM_SMS_CDMA_TELESERVICE_ID_UNKNOWN;
+ self->priv->service_category = MM_SMS_CDMA_SERVICE_CATEGORY_UNKNOWN;
}
static void
diff --git a/libmm-glib/mm-sms-properties.h b/libmm-glib/mm-sms-properties.h
index b0c290a0..fb9dbf9e 100644
--- a/libmm-glib/mm-sms-properties.h
+++ b/libmm-glib/mm-sms-properties.h
@@ -74,6 +74,10 @@ void mm_sms_properties_set_class (MMSmsProperties *self,
gint class);
void mm_sms_properties_set_delivery_report_request (MMSmsProperties *self,
gboolean request);
+void mm_sms_properties_set_teleservice_id (MMSmsProperties *self,
+ MMSmsCdmaTeleserviceId teleservice_id);
+void mm_sms_properties_set_service_category (MMSmsProperties *self,
+ MMSmsCdmaServiceCategory service_category);
const gchar *mm_sms_properties_get_text (MMSmsProperties *self);
const guint8 *mm_sms_properties_get_data (MMSmsProperties *self,
@@ -86,6 +90,8 @@ MMSmsValidityType mm_sms_properties_get_validity_type (MMSmsProperties *se
guint mm_sms_properties_get_validity_relative (MMSmsProperties *self);
gint mm_sms_properties_get_class (MMSmsProperties *self);
gboolean mm_sms_properties_get_delivery_report_request (MMSmsProperties *self);
+MMSmsCdmaTeleserviceId mm_sms_properties_get_teleservice_id (MMSmsProperties *self);
+MMSmsCdmaServiceCategory mm_sms_properties_get_service_category (MMSmsProperties *self);
/*****************************************************************************/
/* ModemManager/libmm-glib/mmcli specific methods */