dbus: Add __ofono_error_from_error utility function

This commit is contained in:
Philippe Nunes 2012-05-30 15:53:09 +02:00 committed by Denis Kenzior
parent 21369944ad
commit 07a2e70283
2 changed files with 45 additions and 0 deletions

View File

@ -32,6 +32,21 @@
static DBusConnection *g_connection;
struct error_mapping_entry {
int error;
DBusMessage *(*ofono_error_func)(DBusMessage *);
};
struct error_mapping_entry cme_errors_mapping[] = {
{ 3, __ofono_error_not_allowed },
{ 4, __ofono_error_not_supported },
{ 16, __ofono_error_incorrect_password },
{ 30, __ofono_error_not_registered },
{ 31, __ofono_error_timed_out },
{ 32, __ofono_error_access_denied },
{ 50, __ofono_error_invalid_args },
};
static void append_variant(DBusMessageIter *iter,
int type, void *value)
{
@ -388,6 +403,33 @@ DBusMessage *__ofono_error_not_allowed(DBusMessage *msg)
"Operation is not allowed");
}
DBusMessage *__ofono_error_from_error(const struct ofono_error *error,
DBusMessage *msg)
{
struct error_mapping_entry *e;
int maxentries;
int i;
switch (error->type) {
case OFONO_ERROR_TYPE_CME:
e = cme_errors_mapping;
maxentries = sizeof(cme_errors_mapping) /
sizeof(struct error_mapping_entry);
for (i = 0; i < maxentries; i++)
if (e[i].error == error->error)
return e[i].ofono_error_func(msg);
break;
case OFONO_ERROR_TYPE_CMS:
return __ofono_error_failed(msg);
case OFONO_ERROR_TYPE_CEER:
return __ofono_error_failed(msg);
default:
return __ofono_error_failed(msg);
}
return __ofono_error_failed(msg);
}
void __ofono_dbus_pending_reply(DBusMessage **msg, DBusMessage *reply)
{
DBusConnection *conn = ofono_dbus_get_connection();

View File

@ -66,6 +66,9 @@ DBusMessage *__ofono_error_emergency_active(DBusMessage *msg);
DBusMessage *__ofono_error_incorrect_password(DBusMessage *msg);
DBusMessage *__ofono_error_not_allowed(DBusMessage *msg);
DBusMessage *__ofono_error_from_error(const struct ofono_error *error,
DBusMessage *msg);
void __ofono_dbus_pending_reply(DBusMessage **msg, DBusMessage *reply);
gboolean __ofono_dbus_valid_object_path(const char *path);