diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-08-20 20:17:53 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-10-25 19:49:54 +0200 |
commit | 86795b928e0cc7945c88103a79d5cf7353319d8f (patch) | |
tree | 642aef0c3dd1c0bb18bd613c2a58072ccff236ed | |
parent | 663017a3d20f3beeff12bd5b56f730c6b43eee32 (diff) |
libmm-glib: allow new 'teleservice-id' and 'service-category' keywords in MMSmsProperties
-rw-r--r-- | docs/reference/libmm-glib/libmm-glib-sections.txt | 4 | ||||
-rw-r--r-- | libmm-glib/mm-common-helpers.c | 44 | ||||
-rw-r--r-- | libmm-glib/mm-common-helpers.h | 4 | ||||
-rw-r--r-- | libmm-glib/mm-sms-properties.c | 120 | ||||
-rw-r--r-- | libmm-glib/mm-sms-properties.h | 6 |
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 */ |