diff options
Diffstat (limited to 'src/sms.c')
-rw-r--r-- | src/sms.c | 49 |
1 files changed, 6 insertions, 43 deletions
@@ -1053,59 +1053,23 @@ static DBusMessage *sms_get_messages(DBusConnection *conn, DBusMessage *msg, return reply; } -static gboolean uuid_from_message_path(const char *path, - struct ofono_uuid *uuid) -{ - const char *uuidstr; - size_t len; - - len = strlen(path); - - if (len < OFONO_SHA1_UUID_LEN * 2) - return FALSE; - - uuidstr = path + len - OFONO_SHA1_UUID_LEN * 2; - - if (decode_hex_own_buf(uuidstr, -1, NULL, 0, uuid->uuid) == NULL) - return FALSE; - - return TRUE; -} - static gint entry_compare_by_uuid(gconstpointer a, gconstpointer b) { const struct tx_queue_entry *entry = a; - const char *uuid = b; + const struct ofono_uuid *uuid = b; return memcmp(&entry->uuid, uuid, sizeof(entry->uuid)); } -static DBusMessage *sms_cancel_message(DBusConnection *conn, DBusMessage *msg, - void *data) +int __ofono_sms_txq_cancel(struct ofono_sms *sms, const struct ofono_uuid *uuid) { - struct ofono_sms *sms = data; - char *path; - struct ofono_uuid uuid; GList *l; struct tx_queue_entry *entry; - if (sms->pending) - return __ofono_error_busy(msg); - - if (dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path, - DBUS_TYPE_INVALID) == FALSE) - return __ofono_error_invalid_args(msg); - - if (path[0] == '\0') - return __ofono_error_invalid_args(msg); - - if (uuid_from_message_path(path, &uuid) == FALSE) - return __ofono_error_invalid_args(msg); - - l = g_queue_find_custom(sms->txq, uuid.uuid, entry_compare_by_uuid); + l = g_queue_find_custom(sms->txq, uuid, entry_compare_by_uuid); if (l == NULL) - return __ofono_error_not_found(msg); + return -ENOENT; entry = l->data; @@ -1116,7 +1080,7 @@ static DBusMessage *sms_cancel_message(DBusConnection *conn, DBusMessage *msg, */ if (entry->cur_pdu > 0 || sms->tx_state == MESSAGE_STATE_PENDING) - return __ofono_error_failed(msg); + return -EPERM; /* * Make sure we don't call tx_next() if there are no entries @@ -1135,7 +1099,7 @@ static DBusMessage *sms_cancel_message(DBusConnection *conn, DBusMessage *msg, sms->tx_state = MESSAGE_STATE_CANCELLED; sms_tx_queue_remove_entry(sms, l); - return dbus_message_new_method_return(msg); + return 0; } static GDBusMethodTable sms_manager_methods[] = { @@ -1145,7 +1109,6 @@ static GDBusMethodTable sms_manager_methods[] = { G_DBUS_METHOD_FLAG_ASYNC }, { "SendMessage", "ss", "o", sms_send_message, G_DBUS_METHOD_FLAG_ASYNC }, - { "CancelMessage", "o", "", sms_cancel_message }, { "GetMessages", "", "a(oa{sv})", sms_get_messages }, { } }; |