aboutsummaryrefslogtreecommitdiff
path: root/src/mm-sms-mbim.c
diff options
context:
space:
mode:
authorDan Williams <dan@ioncontrol.co>2025-05-08 20:36:44 -0500
committerDan Williams <dan@ioncontrol.co>2025-05-08 20:36:44 -0500
commit4bb6026e37e74aad4faa50e89f3f4d98bec7368d (patch)
tree63d214f48abebcd33bf3f0f17ddcf8fa28cae3c5 /src/mm-sms-mbim.c
parentefcc960b130356e6b05d05a915ff0f9646b00d5f (diff)
parent1d5cc0addb6576d007183454c0702d8ee3ab586f (diff)
Merge request !1341 from 'mbim-multipart-fix'
sms: always use SMS_PART_INVALID_INDEX unstored parts https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/merge_requests/1341 Closes #979
Diffstat (limited to 'src/mm-sms-mbim.c')
-rw-r--r--src/mm-sms-mbim.c72
1 files changed, 41 insertions, 31 deletions
diff --git a/src/mm-sms-mbim.c b/src/mm-sms-mbim.c
index 0a404aa5..ffb6b466 100644
--- a/src/mm-sms-mbim.c
+++ b/src/mm-sms-mbim.c
@@ -35,25 +35,22 @@
G_DEFINE_TYPE (MMSmsMbim, mm_sms_mbim, MM_TYPE_BASE_SMS)
+struct _MMSmsMbimPrivate {
+ MMBaseModem *modem;
+};
+
/*****************************************************************************/
static gboolean
-peek_device (gpointer self,
- MbimDevice **o_device,
- GAsyncReadyCallback callback,
- gpointer user_data)
+peek_device (MMSmsMbim *self,
+ MbimDevice **o_device,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- MMBaseModem *modem = NULL;
-
- g_object_get (G_OBJECT (self),
- MM_BASE_SMS_MODEM, &modem,
- NULL);
- g_assert (MM_IS_BASE_MODEM (modem));
-
if (o_device) {
MMPortMbim *port;
- port = mm_broadband_modem_mbim_peek_port_mbim (MM_BROADBAND_MODEM_MBIM (modem));
+ port = mm_broadband_modem_mbim_peek_port_mbim (MM_BROADBAND_MODEM_MBIM (self->priv->modem));
if (!port) {
g_task_report_new_error (self,
callback,
@@ -62,14 +59,12 @@ peek_device (gpointer self,
MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"Couldn't peek MBIM port");
- g_object_unref (modem);
return FALSE;
}
*o_device = mm_port_mbim_peek_device (port);
}
- g_object_unref (modem);
return TRUE;
}
@@ -77,7 +72,6 @@ peek_device (gpointer self,
/* Send the SMS */
typedef struct {
- MMBaseModem *modem;
MbimDevice *device;
GList *current;
} SmsSendContext;
@@ -86,7 +80,6 @@ static void
sms_send_context_free (SmsSendContext *ctx)
{
g_object_unref (ctx->device);
- g_object_unref (ctx->modem);
g_slice_free (SmsSendContext, ctx);
}
@@ -193,15 +186,12 @@ sms_send (MMBaseSms *self,
MbimDevice *device;
GTask *task;
- if (!peek_device (self, &device, callback, user_data))
+ if (!peek_device (MM_SMS_MBIM (self), &device, callback, user_data))
return;
/* Setup the context */
ctx = g_slice_new0 (SmsSendContext);
ctx->device = g_object_ref (device);
- g_object_get (self,
- MM_BASE_SMS_MODEM, &ctx->modem,
- NULL);
task = g_task_new (self, NULL, callback, user_data);
g_task_set_task_data (task, ctx, (GDestroyNotify)sms_send_context_free);
@@ -213,7 +203,6 @@ sms_send (MMBaseSms *self,
/*****************************************************************************/
typedef struct {
- MMBaseModem *modem;
MbimDevice *device;
GList *current;
guint n_failed;
@@ -223,7 +212,6 @@ static void
sms_delete_parts_context_free (SmsDeletePartsContext *ctx)
{
g_object_unref (ctx->device);
- g_object_unref (ctx->modem);
g_slice_free (SmsDeletePartsContext, ctx);
}
@@ -322,14 +310,11 @@ sms_delete (MMBaseSms *self,
MbimDevice *device;
GTask *task;
- if (!peek_device (self, &device, callback, user_data))
+ if (!peek_device (MM_SMS_MBIM (self), &device, callback, user_data))
return;
ctx = g_slice_new0 (SmsDeletePartsContext);
ctx->device = g_object_ref (device);
- g_object_get (self,
- MM_BASE_SMS_MODEM, &ctx->modem,
- NULL);
task = g_task_new (self, NULL, callback, user_data);
g_task_set_task_data (task, ctx, (GDestroyNotify)sms_delete_parts_context_free);
@@ -342,24 +327,49 @@ sms_delete (MMBaseSms *self,
/*****************************************************************************/
MMBaseSms *
-mm_sms_mbim_new (MMBaseModem *modem)
+mm_sms_mbim_new (MMBaseModem *modem,
+ gboolean is_3gpp,
+ MMSmsStorage default_storage)
{
- return MM_BASE_SMS (g_object_new (MM_TYPE_SMS_MBIM,
- MM_BASE_SMS_MODEM, modem,
- MM_BIND_TO, G_OBJECT (modem),
- NULL));
+ MMBaseSms *sms;
+
+ g_return_val_if_fail (MM_IS_BROADBAND_MODEM_MBIM (modem), NULL);
+
+ sms = MM_BASE_SMS (g_object_new (MM_TYPE_SMS_MBIM,
+ MM_BIND_TO, G_OBJECT (modem),
+ MM_BASE_SMS_IS_3GPP, is_3gpp,
+ MM_BASE_SMS_DEFAULT_STORAGE, default_storage,
+ NULL));
+ MM_SMS_MBIM (sms)->priv->modem = g_object_ref (modem);
+ return sms;
}
static void
mm_sms_mbim_init (MMSmsMbim *self)
{
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_SMS_MBIM, MMSmsMbimPrivate);
+}
+
+static void
+dispose (GObject *object)
+{
+ MMSmsMbim *self = MM_SMS_MBIM (object);
+
+ g_clear_object (&self->priv->modem);
+
+ G_OBJECT_CLASS (mm_sms_mbim_parent_class)->dispose (object);
}
static void
mm_sms_mbim_class_init (MMSmsMbimClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
MMBaseSmsClass *base_sms_class = MM_BASE_SMS_CLASS (klass);
+ g_type_class_add_private (object_class, sizeof (MMSmsMbimPrivate));
+
+ object_class->dispose = dispose;
+
base_sms_class->store = NULL;
base_sms_class->store_finish = NULL;
base_sms_class->send = sms_send;