aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-base-sms.c7
-rw-r--r--src/mm-base-sms.h1
-rw-r--r--src/mm-sms-list.c22
3 files changed, 23 insertions, 7 deletions
diff --git a/src/mm-base-sms.c b/src/mm-base-sms.c
index dfe6c06f..153a6c44 100644
--- a/src/mm-base-sms.c
+++ b/src/mm-base-sms.c
@@ -739,6 +739,12 @@ mm_base_sms_is_multipart (MMBaseSms *self)
}
guint
+mm_base_sms_get_max_parts (MMBaseSms *self)
+{
+ return self->priv->max_parts;
+}
+
+guint
mm_base_sms_get_multipart_reference (MMBaseSms *self)
{
g_return_val_if_fail (self->priv->is_multipart, 0);
@@ -1858,6 +1864,7 @@ mm_base_sms_multipart_new (MMBaseModem *modem,
MM_BASE_SMS_IS_MULTIPART, TRUE,
MM_BASE_SMS_MAX_PARTS, max_parts,
MM_BASE_SMS_MULTIPART_REFERENCE, reference,
+ "number", mm_sms_part_get_number (first_part),
"state", state,
"storage", storage,
"validity", g_variant_new ("(uv)",
diff --git a/src/mm-base-sms.h b/src/mm-base-sms.h
index be8d559c..186cb8e6 100644
--- a/src/mm-base-sms.h
+++ b/src/mm-base-sms.h
@@ -121,6 +121,7 @@ gboolean mm_base_sms_has_part_index (MMBaseSms *self,
GList *mm_base_sms_get_parts (MMBaseSms *self);
gboolean mm_base_sms_is_multipart (MMBaseSms *self);
+guint mm_base_sms_get_max_parts (MMBaseSms *self);
guint mm_base_sms_get_multipart_reference (MMBaseSms *self);
gboolean mm_base_sms_multipart_is_complete (MMBaseSms *self);
gboolean mm_base_sms_multipart_is_assembled (MMBaseSms *self);
diff --git a/src/mm-sms-list.c b/src/mm-sms-list.c
index 1a832216..a242105b 100644
--- a/src/mm-sms-list.c
+++ b/src/mm-sms-list.c
@@ -219,14 +219,23 @@ mm_sms_list_add_sms (MMSmsList *self,
/*****************************************************************************/
-static guint
-cmp_sms_by_concat_reference (MMBaseSms *sms,
- gpointer user_data)
+static gint
+cmp_sms_by_number_reference (MMBaseSms *sms,
+ MMSmsPart *part)
{
if (!mm_base_sms_is_multipart (sms))
return -1;
- return (GPOINTER_TO_UINT (user_data) - mm_base_sms_get_multipart_reference (sms));
+ if (mm_base_sms_get_multipart_reference (sms) != mm_sms_part_get_concat_reference (part))
+ return -1;
+
+ if (g_strcmp0 (mm_gdbus_sms_get_number (MM_GDBUS_SMS (sms)), mm_sms_part_get_number (part)))
+ return -1;
+
+ if (mm_base_sms_get_max_parts (sms) != mm_sms_part_get_concat_max (part))
+ return -1;
+
+ return 0;
}
typedef struct {
@@ -278,9 +287,8 @@ take_multipart (MMSmsList *self,
guint concat_reference;
concat_reference = mm_sms_part_get_concat_reference (part);
- l = g_list_find_custom (self->priv->list,
- GUINT_TO_POINTER (concat_reference),
- (GCompareFunc)cmp_sms_by_concat_reference);
+ l = g_list_find_custom (self->priv->list, part,
+ (GCompareFunc)cmp_sms_by_number_reference);
if (l) {
/* Try to take the part */
mm_obj_dbg (self, "found existing multipart SMS object with reference '%u': adding new part", concat_reference);