|
Packit Service |
8264ee |
/*
|
|
Packit Service |
8264ee |
*
|
|
Packit Service |
8264ee |
* BlueZ - Bluetooth protocol stack for Linux
|
|
Packit Service |
8264ee |
*
|
|
Packit Service |
8264ee |
* Copyright (C) 2018-2019 Intel Corporation. All rights reserved.
|
|
Packit Service |
8264ee |
*
|
|
Packit Service |
8264ee |
*
|
|
Packit Service |
8264ee |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
8264ee |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
8264ee |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
8264ee |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
8264ee |
*
|
|
Packit Service |
8264ee |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
8264ee |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
8264ee |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
8264ee |
* Lesser General Public License for more details.
|
|
Packit Service |
8264ee |
*
|
|
Packit Service |
8264ee |
*/
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
8264ee |
#include <config.h>
|
|
Packit Service |
8264ee |
#endif
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
#include <ell/ell.h>
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
#include "mesh/mesh-defs.h"
|
|
Packit Service |
8264ee |
#include "mesh/node.h"
|
|
Packit Service |
8264ee |
#include "mesh/manager.h"
|
|
Packit Service |
8264ee |
#include "mesh/mesh.h"
|
|
Packit Service |
8264ee |
#include "mesh/error.h"
|
|
Packit Service |
8264ee |
#include "mesh/dbus.h"
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
static struct l_dbus *dbus;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
struct error_entry {
|
|
Packit Service |
8264ee |
const char *dbus_err;
|
|
Packit Service |
8264ee |
const char *default_desc;
|
|
Packit Service |
8264ee |
};
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
/*
|
|
Packit Service |
8264ee |
* Important: The entries in this table follow the order of
|
|
Packit Service |
8264ee |
* enumerated values in mesh_error (file error.h)
|
|
Packit Service |
8264ee |
*/
|
|
Packit Service |
8264ee |
static struct error_entry const error_table[] =
|
|
Packit Service |
8264ee |
{
|
|
Packit Service |
8264ee |
{ NULL, NULL },
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".Failed", "Operation failed" },
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".NotAuthorized", "Permission denied"},
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".NotFound", "Object not found"},
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".InvalidArgs", "Invalid arguments"},
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".InProgress", "Already in progress"},
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".AlreadyExists", "Already exists"},
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".DoesNotExist", "Does not exist"},
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".Canceled", "Operation canceled"},
|
|
Packit Service |
8264ee |
{ ERROR_INTERFACE ".NotImplemented", "Not implemented"},
|
|
Packit Service |
8264ee |
};
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
struct l_dbus_message *dbus_error(struct l_dbus_message *msg, int err,
|
|
Packit Service |
8264ee |
const char *description)
|
|
Packit Service |
8264ee |
{
|
|
Packit Service |
8264ee |
int array_len = L_ARRAY_SIZE(error_table);
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
/* Default to ".Failed" */
|
|
Packit Service |
8264ee |
if (!err || err >= array_len)
|
|
Packit Service |
8264ee |
err = MESH_ERROR_FAILED;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
if (description)
|
|
Packit Service |
8264ee |
return l_dbus_message_new_error(msg,
|
|
Packit Service |
8264ee |
error_table[err].dbus_err,
|
|
Packit Service |
8264ee |
"%s", description);
|
|
Packit Service |
8264ee |
else
|
|
Packit Service |
8264ee |
return l_dbus_message_new_error(msg,
|
|
Packit Service |
8264ee |
error_table[err].dbus_err,
|
|
Packit Service |
8264ee |
"%s", error_table[err].default_desc);
|
|
Packit Service |
8264ee |
}
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
struct l_dbus *dbus_get_bus(void)
|
|
Packit Service |
8264ee |
{
|
|
Packit Service |
8264ee |
return dbus;
|
|
Packit Service |
8264ee |
}
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
bool dbus_init(struct l_dbus *bus)
|
|
Packit Service |
8264ee |
{
|
|
Packit Service |
8264ee |
/* Network interface */
|
|
Packit Service |
8264ee |
if (!mesh_dbus_init(bus))
|
|
Packit Service |
8264ee |
return false;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
/* Node interface */
|
|
Packit Service |
8264ee |
if (!node_dbus_init(bus))
|
|
Packit Service |
8264ee |
return false;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
/* Management interface */
|
|
Packit Service |
8264ee |
if (!manager_dbus_init(bus))
|
|
Packit Service |
8264ee |
return false;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
dbus = bus;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
return true;
|
|
Packit Service |
8264ee |
}
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
bool dbus_match_interface(struct l_dbus_message_iter *interfaces,
|
|
Packit Service |
8264ee |
const char *match)
|
|
Packit Service |
8264ee |
{
|
|
Packit Service |
8264ee |
const char *interface;
|
|
Packit Service |
8264ee |
struct l_dbus_message_iter properties;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
while (l_dbus_message_iter_next_entry(interfaces, &interface,
|
|
Packit Service |
8264ee |
&properties)) {
|
|
Packit Service |
8264ee |
if (!strcmp(match, interface))
|
|
Packit Service |
8264ee |
return true;
|
|
Packit Service |
8264ee |
}
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
return false;
|
|
Packit Service |
8264ee |
}
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
void dbus_append_byte_array(struct l_dbus_message_builder *builder,
|
|
Packit Service |
8264ee |
const uint8_t *data, int len)
|
|
Packit Service |
8264ee |
{
|
|
Packit Service |
8264ee |
int i;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
if (!builder)
|
|
Packit Service |
8264ee |
return;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
l_dbus_message_builder_enter_array(builder, "y");
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
for (i = 0; i < len; i++)
|
|
Packit Service |
8264ee |
l_dbus_message_builder_append_basic(builder, 'y', data + i);
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
l_dbus_message_builder_leave_array(builder);
|
|
Packit Service |
8264ee |
}
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
void dbus_append_dict_entry_basic(struct l_dbus_message_builder *builder,
|
|
Packit Service |
8264ee |
const char *key, const char *signature,
|
|
Packit Service |
8264ee |
const void *data)
|
|
Packit Service |
8264ee |
{
|
|
Packit Service |
8264ee |
if (!builder)
|
|
Packit Service |
8264ee |
return;
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
l_dbus_message_builder_enter_dict(builder, "sv");
|
|
Packit Service |
8264ee |
l_dbus_message_builder_append_basic(builder, 's', key);
|
|
Packit Service |
8264ee |
l_dbus_message_builder_enter_variant(builder, signature);
|
|
Packit Service |
8264ee |
l_dbus_message_builder_append_basic(builder, signature[0], data);
|
|
Packit Service |
8264ee |
l_dbus_message_builder_leave_variant(builder);
|
|
Packit Service |
8264ee |
l_dbus_message_builder_leave_dict(builder);
|
|
Packit Service |
8264ee |
}
|