diff options
Diffstat (limited to 'src/mm-iface-modem-messaging.c')
-rw-r--r-- | src/mm-iface-modem-messaging.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/mm-iface-modem-messaging.c b/src/mm-iface-modem-messaging.c index 7a4c1f31..5861b373 100644 --- a/src/mm-iface-modem-messaging.c +++ b/src/mm-iface-modem-messaging.c @@ -31,6 +31,54 @@ static GQuark storage_context_quark; /*****************************************************************************/ +guint8 +mm_iface_modem_messaging_get_local_multipart_reference (MMIfaceModemMessaging *self, + const gchar *number, + GError **error) +{ + MMSmsList *list = NULL; + guint8 reference; + guint8 first; + + /* Start by looking for a random number */ + reference = g_random_int_range (1,255); + + /* Then, look for the given reference in user-created messages */ + g_object_get (self, + MM_IFACE_MODEM_MESSAGING_SMS_LIST, &list, + NULL); + if (!list) + return reference; + + first = reference; + do { + if (!mm_sms_list_has_local_multipart_reference (list, number, reference)) { + g_object_unref (list); + return reference; + } + + if (reference == 255) + reference = 1; + else + reference++; + } + while (reference != first); + + g_object_unref (list); + + /* We were not able to find a new valid multipart reference :/ + * return an error */ + g_set_error (error, + MM_CORE_ERROR, + MM_CORE_ERROR_TOO_MANY, + "Cannot create multipart SMS: No valid multipart reference " + "available for destination number '%s'", + number); + return 0; +} + +/*****************************************************************************/ + void mm_iface_modem_messaging_bind_simple_status (MMIfaceModemMessaging *self, MMSimpleStatus *status) |