api: new `Sms.DeliveryReportRequest' property
Also allowing the 'delivery-report-request' key in the `Messaging.CreateSms()' method.
This commit is contained in:
@@ -102,6 +102,13 @@
|
|||||||
-->
|
-->
|
||||||
<property name="Class" type="u" access="readwrite" />
|
<property name="Class" type="u" access="readwrite" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
DeliveryReportRequest:
|
||||||
|
|
||||||
|
#TRUE if delivery report request is required, #FALSE otherwise.
|
||||||
|
-->
|
||||||
|
<property name="DeliveryReportRequest" type="b" access="readwrite" />
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Timestamp:
|
Timestamp:
|
||||||
|
|
||||||
|
@@ -23,12 +23,13 @@
|
|||||||
|
|
||||||
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_TEXT "text"
|
||||||
#define PROPERTY_DATA "data"
|
#define PROPERTY_DATA "data"
|
||||||
#define PROPERTY_NUMBER "number"
|
#define PROPERTY_NUMBER "number"
|
||||||
#define PROPERTY_SMSC "smsc"
|
#define PROPERTY_SMSC "smsc"
|
||||||
#define PROPERTY_VALIDITY "validity"
|
#define PROPERTY_VALIDITY "validity"
|
||||||
#define PROPERTY_CLASS "class"
|
#define PROPERTY_CLASS "class"
|
||||||
|
#define PROPERTY_DELIVERY_REPORT_REQUEST "delivery-report-request"
|
||||||
|
|
||||||
struct _MMSmsPropertiesPrivate {
|
struct _MMSmsPropertiesPrivate {
|
||||||
gchar *text;
|
gchar *text;
|
||||||
@@ -39,6 +40,8 @@ struct _MMSmsPropertiesPrivate {
|
|||||||
guint validity;
|
guint validity;
|
||||||
gboolean class_set;
|
gboolean class_set;
|
||||||
guint class;
|
guint class;
|
||||||
|
gboolean delivery_report_request_set;
|
||||||
|
gboolean delivery_report_request;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -123,6 +126,16 @@ mm_sms_properties_set_class (MMSmsProperties *self,
|
|||||||
self->priv->class = class;
|
self->priv->class = class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
mm_sms_properties_set_delivery_report_request (MMSmsProperties *self,
|
||||||
|
gboolean request)
|
||||||
|
{
|
||||||
|
g_return_if_fail (MM_IS_SMS_PROPERTIES (self));
|
||||||
|
|
||||||
|
self->priv->delivery_report_request_set = TRUE;
|
||||||
|
self->priv->delivery_report_request = request;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
const gchar *
|
const gchar *
|
||||||
@@ -193,6 +206,14 @@ mm_sms_properties_get_class (MMSmsProperties *self)
|
|||||||
return self->priv->class;
|
return self->priv->class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
mm_sms_properties_get_delivery_report_request (MMSmsProperties *self)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (MM_IS_SMS_PROPERTIES (self), FALSE);
|
||||||
|
|
||||||
|
return self->priv->delivery_report_request;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
GVariant *
|
GVariant *
|
||||||
@@ -250,6 +271,12 @@ mm_sms_properties_get_dictionary (MMSmsProperties *self)
|
|||||||
PROPERTY_CLASS,
|
PROPERTY_CLASS,
|
||||||
g_variant_new_uint32 (self->priv->class));
|
g_variant_new_uint32 (self->priv->class));
|
||||||
|
|
||||||
|
if (self->priv->delivery_report_request_set)
|
||||||
|
g_variant_builder_add (&builder,
|
||||||
|
"{sv}",
|
||||||
|
PROPERTY_DELIVERY_REPORT_REQUEST,
|
||||||
|
g_variant_new_boolean (self->priv->delivery_report_request));
|
||||||
|
|
||||||
return g_variant_ref_sink (g_variant_builder_end (&builder));
|
return g_variant_ref_sink (g_variant_builder_end (&builder));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,6 +301,28 @@ parse_uint (const gchar *str,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
parse_boolean (const gchar *str,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
if (g_ascii_strcasecmp (str, "yes") == 0 ||
|
||||||
|
g_ascii_strcasecmp (str, "true") == 0 ||
|
||||||
|
g_str_equal (str, "1"))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (g_ascii_strcasecmp (str, "no") == 0 ||
|
||||||
|
g_ascii_strcasecmp (str, "false") == 0 ||
|
||||||
|
g_str_equal (str, "0"))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
g_set_error (error,
|
||||||
|
MM_CORE_ERROR,
|
||||||
|
MM_CORE_ERROR_INVALID_ARGS,
|
||||||
|
"Invalid properties string, cannot parse '%s' as boolean",
|
||||||
|
str);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
consume_string (MMSmsProperties *self,
|
consume_string (MMSmsProperties *self,
|
||||||
const gchar *key,
|
const gchar *key,
|
||||||
@@ -308,7 +357,18 @@ consume_string (MMSmsProperties *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
mm_sms_properties_set_class (self, n);
|
mm_sms_properties_set_class (self, n);
|
||||||
} else if (g_str_equal (key, PROPERTY_DATA)) {
|
} else if (g_str_equal (key, PROPERTY_DELIVERY_REPORT_REQUEST)) {
|
||||||
|
GError *inner_error = NULL;
|
||||||
|
gboolean request;
|
||||||
|
|
||||||
|
request = parse_boolean (value, &inner_error);
|
||||||
|
if (inner_error) {
|
||||||
|
g_propagate_error (error, inner_error);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mm_sms_properties_set_delivery_report_request (self, request);
|
||||||
|
} else if (g_str_equal (key, PROPERTY_DATA)) {
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
MM_CORE_ERROR,
|
MM_CORE_ERROR,
|
||||||
MM_CORE_ERROR_INVALID_ARGS,
|
MM_CORE_ERROR_INVALID_ARGS,
|
||||||
@@ -404,6 +464,10 @@ consume_variant (MMSmsProperties *properties,
|
|||||||
mm_sms_properties_set_class (
|
mm_sms_properties_set_class (
|
||||||
properties,
|
properties,
|
||||||
g_variant_get_uint32 (value));
|
g_variant_get_uint32 (value));
|
||||||
|
else if (g_str_equal (key, PROPERTY_DELIVERY_REPORT_REQUEST))
|
||||||
|
mm_sms_properties_set_delivery_report_request (
|
||||||
|
properties,
|
||||||
|
g_variant_get_boolean (value));
|
||||||
else {
|
else {
|
||||||
/* Set error */
|
/* Set error */
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
|
@@ -51,31 +51,34 @@ MMSmsProperties *mm_sms_properties_new_from_dictionary (GVariant *dictionary,
|
|||||||
|
|
||||||
MMSmsProperties *mm_sms_properties_dup (MMSmsProperties *orig);
|
MMSmsProperties *mm_sms_properties_dup (MMSmsProperties *orig);
|
||||||
|
|
||||||
void mm_sms_properties_set_text (MMSmsProperties *self,
|
void mm_sms_properties_set_text (MMSmsProperties *self,
|
||||||
const gchar *text);
|
const gchar *text);
|
||||||
void mm_sms_properties_set_data (MMSmsProperties *self,
|
void mm_sms_properties_set_data (MMSmsProperties *self,
|
||||||
const guint8 *data,
|
const guint8 *data,
|
||||||
gsize data_length);
|
gsize data_length);
|
||||||
void mm_sms_properties_set_data_bytearray (MMSmsProperties *self,
|
void mm_sms_properties_set_data_bytearray (MMSmsProperties *self,
|
||||||
GByteArray *data);
|
GByteArray *data);
|
||||||
void mm_sms_properties_set_number (MMSmsProperties *self,
|
void mm_sms_properties_set_number (MMSmsProperties *self,
|
||||||
const gchar *number);
|
const gchar *number);
|
||||||
void mm_sms_properties_set_smsc (MMSmsProperties *self,
|
void mm_sms_properties_set_smsc (MMSmsProperties *self,
|
||||||
const gchar *smsc);
|
const gchar *smsc);
|
||||||
void mm_sms_properties_set_validity (MMSmsProperties *self,
|
void mm_sms_properties_set_validity (MMSmsProperties *self,
|
||||||
guint validity);
|
guint validity);
|
||||||
void mm_sms_properties_set_class (MMSmsProperties *self,
|
void mm_sms_properties_set_class (MMSmsProperties *self,
|
||||||
guint class);
|
guint class);
|
||||||
|
void mm_sms_properties_set_delivery_report_request (MMSmsProperties *self,
|
||||||
|
gboolean request);
|
||||||
|
|
||||||
const gchar *mm_sms_properties_get_text (MMSmsProperties *self);
|
const gchar *mm_sms_properties_get_text (MMSmsProperties *self);
|
||||||
const guint8 *mm_sms_properties_get_data (MMSmsProperties *self,
|
const guint8 *mm_sms_properties_get_data (MMSmsProperties *self,
|
||||||
gsize *data_len);
|
gsize *data_len);
|
||||||
GByteArray *mm_sms_properties_peek_data_bytearray (MMSmsProperties *self);
|
GByteArray *mm_sms_properties_peek_data_bytearray (MMSmsProperties *self);
|
||||||
GByteArray *mm_sms_properties_get_data_bytearray (MMSmsProperties *self);
|
GByteArray *mm_sms_properties_get_data_bytearray (MMSmsProperties *self);
|
||||||
const gchar *mm_sms_properties_get_number (MMSmsProperties *self);
|
const gchar *mm_sms_properties_get_number (MMSmsProperties *self);
|
||||||
const gchar *mm_sms_properties_get_smsc (MMSmsProperties *self);
|
const gchar *mm_sms_properties_get_smsc (MMSmsProperties *self);
|
||||||
guint mm_sms_properties_get_validity (MMSmsProperties *self);
|
guint mm_sms_properties_get_validity (MMSmsProperties *self);
|
||||||
guint mm_sms_properties_get_class (MMSmsProperties *self);
|
guint mm_sms_properties_get_class (MMSmsProperties *self);
|
||||||
|
gboolean mm_sms_properties_get_delivery_report_request (MMSmsProperties *self);
|
||||||
|
|
||||||
GVariant *mm_sms_properties_get_dictionary (MMSmsProperties *self);
|
GVariant *mm_sms_properties_get_dictionary (MMSmsProperties *self);
|
||||||
|
|
||||||
|
@@ -269,6 +269,7 @@ struct _MMSmsPart {
|
|||||||
guint data_coding_scheme;
|
guint data_coding_scheme;
|
||||||
guint class;
|
guint class;
|
||||||
guint validity;
|
guint validity;
|
||||||
|
gboolean delivery_report_request;
|
||||||
|
|
||||||
gboolean should_concat;
|
gboolean should_concat;
|
||||||
guint concat_reference;
|
guint concat_reference;
|
||||||
@@ -342,6 +343,8 @@ PART_GET_FUNC (guint, class)
|
|||||||
PART_SET_FUNC (guint, class)
|
PART_SET_FUNC (guint, class)
|
||||||
PART_GET_FUNC (guint, validity)
|
PART_GET_FUNC (guint, validity)
|
||||||
PART_SET_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)
|
PART_GET_FUNC (guint, concat_reference)
|
||||||
|
|
||||||
@@ -759,8 +762,18 @@ mm_sms_part_get_submit_pdu (MMSmsPart *part,
|
|||||||
pdu[offset] |= 0x40; /* UDHI */
|
pdu[offset] |= 0x40; /* UDHI */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Request status only in last part */
|
/* Delivery report requested in singlepart messages or in the last PDU of
|
||||||
pdu[offset++] |= 0x01; /* TP-MTI = SMS-SUBMIT */
|
* 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) ----------- */
|
/* ----------- TP-MR (1 byte) ----------- */
|
||||||
|
|
||||||
|
@@ -96,6 +96,10 @@ guint mm_sms_part_get_validity (MMSmsPart *part);
|
|||||||
void mm_sms_part_set_validity (MMSmsPart *part,
|
void mm_sms_part_set_validity (MMSmsPart *part,
|
||||||
guint validity);
|
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);
|
guint mm_sms_part_get_concat_reference (MMSmsPart *part);
|
||||||
void mm_sms_part_set_concat_reference (MMSmsPart *part,
|
void mm_sms_part_set_concat_reference (MMSmsPart *part,
|
||||||
guint concat_reference);
|
guint concat_reference);
|
||||||
|
@@ -1183,6 +1183,8 @@ assemble_sms (MMSms *self,
|
|||||||
"number", mm_sms_part_get_number (sorted_parts[0]),
|
"number", mm_sms_part_get_number (sorted_parts[0]),
|
||||||
"timestamp", mm_sms_part_get_timestamp (sorted_parts[0]),
|
"timestamp", mm_sms_part_get_timestamp (sorted_parts[0]),
|
||||||
"validity", mm_sms_part_get_validity (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);
|
NULL);
|
||||||
|
|
||||||
g_string_free (fulltext, TRUE);
|
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_smsc (part, mm_sms_properties_get_smsc (properties));
|
||||||
mm_sms_part_set_validity (part, mm_sms_properties_get_validity (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_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_reference (part, reference);
|
||||||
mm_sms_part_set_concat_sequence (part, i + 1);
|
mm_sms_part_set_concat_sequence (part, i + 1);
|
||||||
mm_sms_part_set_concat_max (part, n_parts);
|
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_smsc (part, mm_sms_properties_get_smsc (properties));
|
||||||
mm_sms_part_set_validity (part, mm_sms_properties_get_validity (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_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,
|
return mm_sms_singlepart_new (modem,
|
||||||
MM_SMS_STATE_UNKNOWN,
|
MM_SMS_STATE_UNKNOWN,
|
||||||
|
Reference in New Issue
Block a user