aboutsummaryrefslogtreecommitdiff
path: root/src/mm-broadband-modem-mbim.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-broadband-modem-mbim.c')
-rw-r--r--src/mm-broadband-modem-mbim.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 5d7e37be..9957fe9e 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -5840,6 +5840,7 @@ static gboolean process_pdu_messages (MMBroadbandModemMbim *self,
guint32 messages_count,
MbimSmsPduReadRecordArray *pdu_messages,
guint expected_index,
+ gboolean unstored,
GError **error);
static void
@@ -5864,6 +5865,7 @@ sms_notification_read_flash_sms (MMBroadbandModemMbim *self,
messages_count,
pdu_messages,
SMS_PART_INVALID_INDEX,
+ TRUE,
&error))
mm_obj_dbg (self, "flash SMS message reading failed: %s", error->message);
}
@@ -5943,6 +5945,7 @@ alert_sms_read_query_ready (MbimDevice *device,
messages_count,
pdu_messages,
ctx->expected_index,
+ FALSE,
&error))
mm_obj_dbg (ctx->self, "SMS message reading failed: %s", error->message);
@@ -9024,12 +9027,13 @@ load_initial_sms_parts_finish (MMIfaceModemMessaging *self,
static void
add_sms_part (MMBroadbandModemMbim *self,
const MbimSmsPduReadRecord *pdu,
+ guint part_index,
guint expected_index)
{
MMSmsPart *part;
g_autoptr(GError) error = NULL;
- part = mm_sms_part_3gpp_new_from_binary_pdu (pdu->message_index,
+ part = mm_sms_part_3gpp_new_from_binary_pdu (part_index,
pdu->pdu_data,
pdu->pdu_data_size,
self,
@@ -9071,6 +9075,7 @@ process_pdu_messages (MMBroadbandModemMbim *self,
guint32 messages_count,
MbimSmsPduReadRecordArray *pdu_messages,
guint expected_index,
+ gboolean unstored,
GError **error)
{
guint i;
@@ -9096,11 +9101,26 @@ process_pdu_messages (MMBroadbandModemMbim *self,
mm_obj_dbg (self, "%u SMS PDUs reported", messages_count);
for (i = 0; i < messages_count; i++) {
- if (pdu_messages[i]) {
- mm_obj_dbg (self, "processing SMS PDU %u/%u...", i+1, messages_count);
- add_sms_part (self, pdu_messages[i], expected_index);
- } else
+ guint message_index;
+
+ if (!pdu_messages[i]) {
mm_obj_dbg (self, "ignoring invalid SMS PDU %u/%u...", i+1, messages_count);
+ continue;
+ }
+
+ mm_obj_dbg (self, "processing SMS PDU %u/%u...", i+1, messages_count);
+
+ message_index = pdu_messages[i]->message_index;
+ if (unstored && message_index != 0) {
+ mm_obj_warn (self,
+ "processed unstored PDU with non-zero message index (%u)",
+ message_index);
+ }
+
+ add_sms_part (self,
+ pdu_messages[i],
+ unstored ? SMS_PART_INVALID_INDEX : message_index,
+ expected_index);
}
return TRUE;
@@ -9135,6 +9155,7 @@ sms_read_query_ready (MbimDevice *device,
messages_count,
pdu_messages,
SMS_PART_INVALID_INDEX,
+ FALSE,
&error))
g_task_return_error (task, error);
else