aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClayton Craft <clayton@craftyguy.net>2021-04-16 20:42:15 -0700
committerClayton Craft <clayton@craftyguy.net>2021-04-20 15:16:50 -0700
commit43c39d5226484eba99211b2fa1add2ae5b398ebf (patch)
treeeee634fb44c9b3a932930b72e84e58749f35a3b5
parent205e9edf3edddfa73b1a9b8ddaff4e3779a20e61 (diff)
sms-part-3gpp: add flag for indicating PDU is transfer-route message
When the message is a transfer-route MT, there is no SMSC address to parse out. This flag allows indicating when the PDU is one such message.
-rw-r--r--src/mm-broadband-modem-mbim.c1
-rw-r--r--src/mm-broadband-modem-qmi.c5
-rw-r--r--src/mm-sms-part-3gpp.c42
-rw-r--r--src/mm-sms-part-3gpp.h1
4 files changed, 30 insertions, 19 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 241a6dc6..892c727a 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -5470,6 +5470,7 @@ add_sms_part (MMBroadbandModemMbim *self,
pdu->pdu_data,
pdu->pdu_data_size,
self,
+ FALSE,
&error);
if (part) {
mm_obj_dbg (self, "correctly parsed PDU (%d)", pdu->message_index);
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c
index 9ea3665c..b6e15243 100644
--- a/src/mm-broadband-modem-qmi.c
+++ b/src/mm-broadband-modem-qmi.c
@@ -5796,6 +5796,7 @@ add_new_read_sms_part (MMIfaceModemMessaging *self,
guint32 index,
QmiWmsMessageTagType tag,
QmiWmsMessageFormat format,
+ gboolean transfer_route,
GArray *data)
{
MMSmsPart *part = NULL;
@@ -5816,6 +5817,7 @@ add_new_read_sms_part (MMIfaceModemMessaging *self,
(guint8 *)data->data,
data->len,
self,
+ transfer_route,
&error);
break;
case QMI_WMS_MESSAGE_FORMAT_MWI:
@@ -5882,6 +5884,7 @@ wms_raw_read_ready (QmiClientWms *client,
message->memory_index,
tag,
format,
+ FALSE,
data);
}
@@ -6232,6 +6235,7 @@ wms_indication_raw_read_ready (QmiClientWms *client,
ctx->memory_index,
tag,
format,
+ FALSE,
data);
}
@@ -6319,6 +6323,7 @@ messaging_event_report_indication_cb (QmiClientNas *client,
memory_index,
tag,
msg_format,
+ TRUE,
raw_data);
return;
}
diff --git a/src/mm-sms-part-3gpp.c b/src/mm-sms-part-3gpp.c
index fbf8e114..51f2cfeb 100644
--- a/src/mm-sms-part-3gpp.c
+++ b/src/mm-sms-part-3gpp.c
@@ -355,7 +355,7 @@ mm_sms_part_3gpp_new_from_pdu (guint index,
return NULL;
}
- return mm_sms_part_3gpp_new_from_binary_pdu (index, pdu, pdu_len, log_object, error);
+ return mm_sms_part_3gpp_new_from_binary_pdu (index, pdu, pdu_len, log_object, FALSE, error);
}
MMSmsPart *
@@ -363,6 +363,7 @@ mm_sms_part_3gpp_new_from_binary_pdu (guint index,
const guint8 *pdu,
gsize pdu_len,
gpointer log_object,
+ gboolean transfer_route,
GError **error)
{
MMSmsPart *sms_part;
@@ -404,25 +405,28 @@ mm_sms_part_3gpp_new_from_binary_pdu (guint index,
offset = 0;
- /* ---------------------------------------------------------------------- */
- /* SMSC, in address format, precedes the TPDU
- * First byte represents the number of BYTES for the address value */
- PDU_SIZE_CHECK (1, "cannot read SMSC address length");
- smsc_addr_size_bytes = pdu[offset++];
- if (smsc_addr_size_bytes > 0) {
- PDU_SIZE_CHECK (offset + smsc_addr_size_bytes, "cannot read SMSC address");
- /* SMSC may not be given in DELIVER PDUs */
- address = sms_decode_address (&pdu[1], 2 * (smsc_addr_size_bytes - 1), error);
- if (!address) {
- g_prefix_error (error, "Couldn't read SMSC address: ");
- mm_sms_part_free (sms_part);
- return NULL;
- }
- mm_sms_part_take_smsc (sms_part, g_steal_pointer (&address));
- mm_obj_dbg (log_object, " SMSC address parsed: '%s'", mm_sms_part_get_smsc (sms_part));
- offset += smsc_addr_size_bytes;
+ if (!transfer_route) {
+ /* ---------------------------------------------------------------------- */
+ /* SMSC, in address format, precedes the TPDU
+ * First byte represents the number of BYTES for the address value */
+ PDU_SIZE_CHECK (1, "cannot read SMSC address length");
+ smsc_addr_size_bytes = pdu[offset++];
+ if (smsc_addr_size_bytes > 0) {
+ PDU_SIZE_CHECK (offset + smsc_addr_size_bytes, "cannot read SMSC address");
+ /* SMSC may not be given in DELIVER PDUs */
+ address = sms_decode_address (&pdu[1], 2 * (smsc_addr_size_bytes - 1), error);
+ if (!address) {
+ g_prefix_error (error, "Couldn't read SMSC address: ");
+ mm_sms_part_free (sms_part);
+ return NULL;
+ }
+ mm_sms_part_take_smsc (sms_part, g_steal_pointer (&address));
+ mm_obj_dbg (log_object, " SMSC address parsed: '%s'", mm_sms_part_get_smsc (sms_part));
+ offset += smsc_addr_size_bytes;
+ } else
+ mm_obj_dbg (log_object, " no SMSC address given");
} else
- mm_obj_dbg (log_object, " no SMSC address given");
+ mm_obj_dbg (log_object, " This is a transfer-route message");
/* ---------------------------------------------------------------------- */
diff --git a/src/mm-sms-part-3gpp.h b/src/mm-sms-part-3gpp.h
index bef416fa..c6f4cf3f 100644
--- a/src/mm-sms-part-3gpp.h
+++ b/src/mm-sms-part-3gpp.h
@@ -30,6 +30,7 @@ MMSmsPart *mm_sms_part_3gpp_new_from_binary_pdu (guint index,
const guint8 *pdu,
gsize pdu_len,
gpointer log_object,
+ gboolean transfer_route,
GError **error);
guint8 *mm_sms_part_3gpp_get_submit_pdu (MMSmsPart *part,
guint *out_pdulen,