aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-sms.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksandermj@chromium.org>2024-04-04 07:46:23 +0000
committerAleksander Morgado <aleksander@aleksander.es>2024-04-10 08:41:31 +0000
commitb855dca7f73fcef4bc63def2b8e57707176752ed (patch)
tree98ee1bf0248b278b4aa25cc70474d5c369996d5e /src/mm-base-sms.c
parentd3a2aebf16ac4a5cd3c57ee6077e68d1f9e552bd (diff)
base-sms: refactor send/store/delete implementations
No functional change.
Diffstat (limited to 'src/mm-base-sms.c')
-rw-r--r--src/mm-base-sms.c210
1 files changed, 99 insertions, 111 deletions
diff --git a/src/mm-base-sms.c b/src/mm-base-sms.c
index c8e84c21..fdf725ae 100644
--- a/src/mm-base-sms.c
+++ b/src/mm-base-sms.c
@@ -803,10 +803,10 @@ sms_get_store_or_send_command (MMBaseSms *self,
mm_sms_part_get_number (part));
*out_msg_data = g_strdup_printf ("%s\x1a", mm_sms_part_get_text (part));
} else {
- guint8 *pdu;
- guint pdulen = 0;
- guint msgstart = 0;
- gchar *hex;
+ g_autofree gchar *hex = NULL;
+ g_autofree guint8 *pdu = NULL;
+ guint pdulen = 0;
+ guint msgstart = 0;
/* AT+CMGW=<length>[, <stat>]<CR> PDU can be entered. <CTRL-Z>/<ESC> */
@@ -817,8 +817,6 @@ sms_get_store_or_send_command (MMBaseSms *self,
/* Convert PDU to hex */
hex = mm_utils_bin2hexstr (pdu, pdulen);
- g_free (pdu);
-
if (!hex) {
g_set_error (error,
MM_CORE_ERROR,
@@ -832,7 +830,6 @@ sms_get_store_or_send_command (MMBaseSms *self,
store_or_send ? 'S' : 'W',
pdulen - msgstart);
*out_msg_data = g_strdup_printf ("%s\x1a", hex);
- g_free (hex);
}
return TRUE;
@@ -842,12 +839,12 @@ sms_get_store_or_send_command (MMBaseSms *self,
/* Store the SMS */
typedef struct {
- MMBaseModem *modem;
- MMSmsStorage storage;
- gboolean need_unlock;
- gboolean use_pdu_mode;
- GList *current;
- gchar *msg_data;
+ MMBaseModem *modem;
+ MMSmsStorage storage;
+ gboolean need_unlock;
+ gboolean use_pdu_mode;
+ GList *current;
+ gchar *msg_data;
} SmsStoreContext;
static void
@@ -858,13 +855,13 @@ sms_store_context_free (SmsStoreContext *ctx)
mm_broadband_modem_unlock_sms_storages (MM_BROADBAND_MODEM (ctx->modem), FALSE, TRUE);
g_object_unref (ctx->modem);
g_free (ctx->msg_data);
- g_free (ctx);
+ g_slice_free (SmsStoreContext, ctx);
}
static gboolean
-sms_store_finish (MMBaseSms *self,
- GAsyncResult *res,
- GError **error)
+sms_store_finish (MMBaseSms *self,
+ GAsyncResult *res,
+ GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -872,15 +869,15 @@ sms_store_finish (MMBaseSms *self,
static void sms_store_next_part (GTask *task);
static void
-store_msg_data_ready (MMBaseModem *modem,
+store_msg_data_ready (MMBaseModem *modem,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
SmsStoreContext *ctx;
- const gchar *response;
- GError *error = NULL;
- gint rv;
- gint idx;
+ const gchar *response;
+ GError *error = NULL;
+ gint rv;
+ gint idx;
response = mm_base_modem_at_command_finish (modem, res, &error);
if (error) {
@@ -912,12 +909,12 @@ store_msg_data_ready (MMBaseModem *modem,
}
static void
-store_ready (MMBaseModem *modem,
+store_ready (MMBaseModem *modem,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
SmsStoreContext *ctx;
- GError *error = NULL;
+ GError *error = NULL;
mm_base_modem_at_command_finish (modem, res, &error);
if (error) {
@@ -944,10 +941,10 @@ store_ready (MMBaseModem *modem,
static void
sms_store_next_part (GTask *task)
{
- MMBaseSms *self;
- SmsStoreContext *ctx;
- gchar *cmd;
- GError *error = NULL;
+ MMBaseSms *self;
+ SmsStoreContext *ctx;
+ GError *error = NULL;
+ g_autofree gchar *cmd = NULL;
self = g_task_get_source_object (task);
ctx = g_task_get_task_data (task);
@@ -982,17 +979,16 @@ sms_store_next_part (GTask *task)
FALSE,
(GAsyncReadyCallback)store_ready,
task);
- g_free (cmd);
}
static void
store_lock_sms_storages_ready (MMBroadbandModem *modem,
- GAsyncResult *res,
- GTask *task)
+ GAsyncResult *res,
+ GTask *task)
{
- MMBaseSms *self;
+ MMBaseSms *self;
SmsStoreContext *ctx;
- GError *error = NULL;
+ GError *error = NULL;
if (!mm_broadband_modem_lock_sms_storages_finish (modem, res, &error)) {
g_task_return_error (task, error);
@@ -1013,16 +1009,16 @@ store_lock_sms_storages_ready (MMBroadbandModem *modem,
}
static void
-sms_store (MMBaseSms *self,
- MMSmsStorage storage,
- GAsyncReadyCallback callback,
- gpointer user_data)
+sms_store (MMBaseSms *self,
+ MMSmsStorage storage,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
SmsStoreContext *ctx;
- GTask *task;
+ GTask *task;
/* Setup the context */
- ctx = g_new0 (SmsStoreContext, 1);
+ ctx = g_slice_new0 (SmsStoreContext);
ctx->modem = g_object_ref (self->priv->modem);
ctx->storage = storage;
@@ -1049,11 +1045,11 @@ sms_store (MMBaseSms *self,
typedef struct {
MMBaseModem *modem;
- gboolean need_unlock;
- gboolean from_storage;
- gboolean use_pdu_mode;
- GList *current;
- gchar *msg_data;
+ gboolean need_unlock;
+ gboolean from_storage;
+ gboolean use_pdu_mode;
+ GList *current;
+ gchar *msg_data;
} SmsSendContext;
static void
@@ -1064,13 +1060,13 @@ sms_send_context_free (SmsSendContext *ctx)
mm_broadband_modem_unlock_sms_storages (MM_BROADBAND_MODEM (ctx->modem), FALSE, TRUE);
g_object_unref (ctx->modem);
g_free (ctx->msg_data);
- g_free (ctx);
+ g_slice_free (SmsSendContext, ctx);
}
static gboolean
-sms_send_finish (MMBaseSms *self,
- GAsyncResult *res,
- GError **error)
+sms_send_finish (MMBaseSms *self,
+ GAsyncResult *res,
+ GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -1078,8 +1074,8 @@ sms_send_finish (MMBaseSms *self,
static void sms_send_next_part (GTask *task);
static gint
-read_message_reference_from_reply (const gchar *response,
- GError **error)
+read_message_reference_from_reply (const gchar *response,
+ GError **error)
{
gint rv = 0;
gint idx = -1;
@@ -1103,14 +1099,14 @@ read_message_reference_from_reply (const gchar *response,
}
static void
-send_generic_msg_data_ready (MMBaseModem *modem,
+send_generic_msg_data_ready (MMBaseModem *modem,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
SmsSendContext *ctx;
- GError *error = NULL;
- const gchar *response;
- gint message_reference;
+ GError *error = NULL;
+ const gchar *response;
+ gint message_reference;
response = mm_base_modem_at_command_finish (modem, res, &error);
if (error) {
@@ -1136,12 +1132,12 @@ send_generic_msg_data_ready (MMBaseModem *modem,
}
static void
-send_generic_ready (MMBaseModem *modem,
+send_generic_ready (MMBaseModem *modem,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
SmsSendContext *ctx;
- GError *error = NULL;
+ GError *error = NULL;
mm_base_modem_at_command_finish (modem, res, &error);
if (error) {
@@ -1166,15 +1162,15 @@ send_generic_ready (MMBaseModem *modem,
}
static void
-send_from_storage_ready (MMBaseModem *modem,
+send_from_storage_ready (MMBaseModem *modem,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
- MMBaseSms *self;
+ MMBaseSms *self;
SmsSendContext *ctx;
- GError *error = NULL;
- const gchar *response;
- gint message_reference;
+ GError *error = NULL;
+ const gchar *response;
+ gint message_reference;
self = g_task_get_source_object (task);
ctx = g_task_get_task_data (task);
@@ -1212,10 +1208,10 @@ send_from_storage_ready (MMBaseModem *modem,
static void
sms_send_next_part (GTask *task)
{
- MMBaseSms *self;
- SmsSendContext *ctx;
- GError *error = NULL;
- gchar *cmd;
+ MMBaseSms *self;
+ SmsSendContext *ctx;
+ GError *error = NULL;
+ g_autofree gchar *cmd = NULL;
self = g_task_get_source_object (task);
ctx = g_task_get_task_data (task);
@@ -1229,15 +1225,13 @@ sms_send_next_part (GTask *task)
/* Send from storage */
if (ctx->from_storage) {
- cmd = g_strdup_printf ("+CMSS=%d",
- mm_sms_part_get_index ((MMSmsPart *)ctx->current->data));
+ cmd = g_strdup_printf ("+CMSS=%d", mm_sms_part_get_index ((MMSmsPart *)ctx->current->data));
mm_base_modem_at_command (ctx->modem,
cmd,
MM_BASE_SMS_DEFAULT_SEND_TIMEOUT,
FALSE,
(GAsyncReadyCallback)send_from_storage_ready,
task);
- g_free (cmd);
return;
}
@@ -1267,17 +1261,16 @@ sms_send_next_part (GTask *task)
FALSE,
(GAsyncReadyCallback)send_generic_ready,
task);
- g_free (cmd);
}
static void
send_lock_sms_storages_ready (MMBroadbandModem *modem,
- GAsyncResult *res,
- GTask *task)
+ GAsyncResult *res,
+ GTask *task)
{
- MMBaseSms *self;
+ MMBaseSms *self;
SmsSendContext *ctx;
- GError *error = NULL;
+ GError *error = NULL;
if (!mm_broadband_modem_lock_sms_storages_finish (modem, res, &error)) {
g_task_return_error (task, error);
@@ -1298,15 +1291,15 @@ send_lock_sms_storages_ready (MMBroadbandModem *modem,
}
static void
-sms_send (MMBaseSms *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
+sms_send (MMBaseSms *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
SmsSendContext *ctx;
- GTask *task;
+ GTask *task;
/* Setup the context */
- ctx = g_new0 (SmsSendContext, 1);
+ ctx = g_slice_new0 (SmsSendContext);
ctx->modem = g_object_ref (self->priv->modem);
task = g_task_new (self, NULL, callback, user_data);
@@ -1338,9 +1331,9 @@ sms_send (MMBaseSms *self,
typedef struct {
MMBaseModem *modem;
- gboolean need_unlock;
- GList *current;
- guint n_failed;
+ gboolean need_unlock;
+ GList *current;
+ guint n_failed;
} SmsDeletePartsContext;
static void
@@ -1350,13 +1343,13 @@ sms_delete_parts_context_free (SmsDeletePartsContext *ctx)
if (ctx->need_unlock)
mm_broadband_modem_unlock_sms_storages (MM_BROADBAND_MODEM (ctx->modem), TRUE, FALSE);
g_object_unref (ctx->modem);
- g_free (ctx);
+ g_slice_free (SmsDeletePartsContext, ctx);
}
static gboolean
-sms_delete_finish (MMBaseSms *self,
- GAsyncResult *res,
- GError **error)
+sms_delete_finish (MMBaseSms *self,
+ GAsyncResult *res,
+ GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -1364,13 +1357,13 @@ sms_delete_finish (MMBaseSms *self,
static void delete_next_part (GTask *task);
static void
-delete_part_ready (MMBaseModem *modem,
+delete_part_ready (MMBaseModem *modem,
GAsyncResult *res,
- GTask *task)
+ GTask *task)
{
- MMBaseSms *self;
+ MMBaseSms *self;
SmsDeletePartsContext *ctx;
- GError *error = NULL;
+ g_autoptr(GError) error = NULL;
self = g_task_get_source_object (task);
ctx = g_task_get_task_data (task);
@@ -1381,7 +1374,6 @@ delete_part_ready (MMBaseModem *modem,
mm_obj_dbg (self, "couldn't delete SMS part with index %u: %s",
mm_sms_part_get_index ((MMSmsPart *)ctx->current->data),
error->message);
- g_error_free (error);
}
/* We reset the index, as there is no longer that part */
@@ -1395,13 +1387,12 @@ static void
delete_next_part (GTask *task)
{
SmsDeletePartsContext *ctx;
- gchar *cmd;
+ g_autofree gchar *cmd = NULL;
ctx = g_task_get_task_data (task);
/* Skip non-stored parts */
- while (ctx->current &&
- mm_sms_part_get_index ((MMSmsPart *)ctx->current->data) == SMS_PART_INVALID_INDEX)
+ while (ctx->current && (mm_sms_part_get_index ((MMSmsPart *)ctx->current->data) == SMS_PART_INVALID_INDEX))
ctx->current = g_list_next (ctx->current);
/* If all removed, we're done */
@@ -1414,30 +1405,27 @@ delete_next_part (GTask *task)
ctx->n_failed);
else
g_task_return_boolean (task, TRUE);
-
g_object_unref (task);
return;
}
- cmd = g_strdup_printf ("+CMGD=%d",
- mm_sms_part_get_index ((MMSmsPart *)ctx->current->data));
+ cmd = g_strdup_printf ("+CMGD=%d", mm_sms_part_get_index ((MMSmsPart *)ctx->current->data));
mm_base_modem_at_command (ctx->modem,
cmd,
10,
FALSE,
(GAsyncReadyCallback)delete_part_ready,
task);
- g_free (cmd);
}
static void
delete_lock_sms_storages_ready (MMBroadbandModem *modem,
- GAsyncResult *res,
- GTask *task)
+ GAsyncResult *res,
+ GTask *task)
{
- MMBaseSms *self;
+ MMBaseSms *self;
SmsDeletePartsContext *ctx;
- GError *error = NULL;
+ GError *error = NULL;
if (!mm_broadband_modem_lock_sms_storages_finish (modem, res, &error)) {
g_task_return_error (task, error);
@@ -1458,14 +1446,14 @@ delete_lock_sms_storages_ready (MMBroadbandModem *modem,
}
static void
-sms_delete (MMBaseSms *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
+sms_delete (MMBaseSms *self,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
SmsDeletePartsContext *ctx;
- GTask *task;
+ GTask *task;
- ctx = g_new0 (SmsDeletePartsContext, 1);
+ ctx = g_slice_new0 (SmsDeletePartsContext);
ctx->modem = g_object_ref (self->priv->modem);
task = g_task_new (self, NULL, callback, user_data);