mirror of git://git.sysmocom.de/ofono
sms: Move CancelMessage(o) method
Move this method to the Message Cancel() method instead and introduce new __ofono_sms_txq_cancel API
This commit is contained in:
parent
458ef95e5d
commit
9a37a672bf
|
@ -26,6 +26,7 @@
|
|||
#include <string.h>
|
||||
#include <gdbus.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "ofono.h"
|
||||
#include "message.h"
|
||||
|
@ -76,8 +77,35 @@ static DBusMessage *message_get_properties(DBusConnection *conn,
|
|||
return reply;
|
||||
}
|
||||
|
||||
static DBusMessage *message_cancel(DBusConnection *conn,
|
||||
DBusMessage *msg, void *data)
|
||||
{
|
||||
struct message *m = data;
|
||||
int res;
|
||||
|
||||
if (dbus_message_get_args(msg, NULL, DBUS_TYPE_INVALID) == FALSE)
|
||||
return __ofono_error_invalid_args(msg);
|
||||
|
||||
if (m->state != MESSAGE_STATE_PENDING)
|
||||
return __ofono_error_not_available(msg);
|
||||
|
||||
res = __ofono_sms_txq_cancel(__ofono_atom_get_data(m->atom), &m->uuid);
|
||||
|
||||
switch (res) {
|
||||
case -ENOENT:
|
||||
return __ofono_error_not_found(msg);
|
||||
case -EPERM:
|
||||
return __ofono_error_access_denied(msg);
|
||||
case 0:
|
||||
return dbus_message_new_method_return(msg);
|
||||
default:
|
||||
return __ofono_error_failed(msg);
|
||||
}
|
||||
}
|
||||
|
||||
static GDBusMethodTable message_methods[] = {
|
||||
{ "GetProperties", "", "a{sv}", message_get_properties },
|
||||
{ "Cancel", "", "", message_cancel },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
|
@ -299,6 +299,9 @@ int __ofono_sms_txq_set_submit_notify(struct ofono_sms *sms,
|
|||
void *data,
|
||||
ofono_destroy_func destroy);
|
||||
|
||||
int __ofono_sms_txq_cancel(struct ofono_sms *sms,
|
||||
const struct ofono_uuid *uuid);
|
||||
|
||||
const char *__ofono_sms_message_path_from_uuid(struct ofono_sms *sms,
|
||||
const struct ofono_uuid *uuid);
|
||||
|
||||
|
|
49
src/sms.c
49
src/sms.c
|
@ -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 },
|
||||
{ }
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue