aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-sms-part.c17
-rw-r--r--src/mm-sms-part.h4
-rw-r--r--src/mm-sms.c4
3 files changed, 23 insertions, 2 deletions
diff --git a/src/mm-sms-part.c b/src/mm-sms-part.c
index 62debf59..f0b36ce4 100644
--- a/src/mm-sms-part.c
+++ b/src/mm-sms-part.c
@@ -269,6 +269,7 @@ struct _MMSmsPart {
guint data_coding_scheme;
guint class;
guint validity;
+ gboolean delivery_report_request;
gboolean should_concat;
guint concat_reference;
@@ -342,6 +343,8 @@ PART_GET_FUNC (guint, class)
PART_SET_FUNC (guint, class)
PART_GET_FUNC (guint, validity)
PART_SET_FUNC (guint, validity)
+PART_GET_FUNC (gboolean, delivery_report_request)
+PART_SET_FUNC (gboolean, delivery_report_request)
PART_GET_FUNC (guint, concat_reference)
@@ -759,8 +762,18 @@ mm_sms_part_get_submit_pdu (MMSmsPart *part,
pdu[offset] |= 0x40; /* UDHI */
}
- /* TODO: Request status only in last part */
- pdu[offset++] |= 0x01; /* TP-MTI = SMS-SUBMIT */
+ /* Delivery report requested in singlepart messages or in the last PDU of
+ * multipart messages */
+ if (part->delivery_report_request &&
+ (!part->concat_sequence ||
+ part->concat_max == part->concat_sequence)) {
+ mm_dbg (" requesting delivery report...");
+ pdu[offset] |= 0x20;
+ }
+
+ /* TP-MTI = SMS-SUBMIT */
+ pdu[offset++] |= 0x01;
+
/* ----------- TP-MR (1 byte) ----------- */
diff --git a/src/mm-sms-part.h b/src/mm-sms-part.h
index 27b73914..7fbbc411 100644
--- a/src/mm-sms-part.h
+++ b/src/mm-sms-part.h
@@ -96,6 +96,10 @@ guint mm_sms_part_get_validity (MMSmsPart *part);
void mm_sms_part_set_validity (MMSmsPart *part,
guint validity);
+gboolean mm_sms_part_get_delivery_report_request (MMSmsPart *part);
+void mm_sms_part_set_delivery_report_request (MMSmsPart *part,
+ gboolean delivery_report_request);
+
guint mm_sms_part_get_concat_reference (MMSmsPart *part);
void mm_sms_part_set_concat_reference (MMSmsPart *part,
guint concat_reference);
diff --git a/src/mm-sms.c b/src/mm-sms.c
index ae7df500..c18f167c 100644
--- a/src/mm-sms.c
+++ b/src/mm-sms.c
@@ -1183,6 +1183,8 @@ assemble_sms (MMSms *self,
"number", mm_sms_part_get_number (sorted_parts[0]),
"timestamp", mm_sms_part_get_timestamp (sorted_parts[0]),
"validity", mm_sms_part_get_validity (sorted_parts[0]),
+ /* delivery report request usually set in the last part only */
+ "delivery-report-request", mm_sms_part_get_delivery_report_request (sorted_parts[self->priv->max_parts - 1]),
NULL);
g_string_free (fulltext, TRUE);
@@ -1397,6 +1399,7 @@ mm_sms_new_from_properties (MMBaseModem *modem,
mm_sms_part_set_smsc (part, mm_sms_properties_get_smsc (properties));
mm_sms_part_set_validity (part, mm_sms_properties_get_validity (properties));
mm_sms_part_set_class (part, mm_sms_properties_get_class (properties));
+ mm_sms_part_set_delivery_report_request (part, mm_sms_properties_get_delivery_report_request (properties));
mm_sms_part_set_concat_reference (part, reference);
mm_sms_part_set_concat_sequence (part, i + 1);
mm_sms_part_set_concat_max (part, n_parts);
@@ -1437,6 +1440,7 @@ mm_sms_new_from_properties (MMBaseModem *modem,
mm_sms_part_set_smsc (part, mm_sms_properties_get_smsc (properties));
mm_sms_part_set_validity (part, mm_sms_properties_get_validity (properties));
mm_sms_part_set_class (part, mm_sms_properties_get_class (properties));
+ mm_sms_part_set_delivery_report_request (part, mm_sms_properties_get_delivery_report_request (properties));
return mm_sms_singlepart_new (modem,
MM_SMS_STATE_UNKNOWN,