mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-11-26 13:44:23 +08:00
network: using service class identifier instead of the uuid 128 string for server registration
This commit is contained in:
parent
696c7534ec
commit
ef3649fd9e
@ -60,9 +60,9 @@ static struct {
|
|||||||
const char *uuid128; /* UUID 128 */
|
const char *uuid128; /* UUID 128 */
|
||||||
uint16_t id; /* Service class identifier */
|
uint16_t id; /* Service class identifier */
|
||||||
} __svc[] = {
|
} __svc[] = {
|
||||||
{ "PANU", PANU_UUID, BNEP_SVC_PANU },
|
{ "panu", PANU_UUID, BNEP_SVC_PANU },
|
||||||
{ "GN", GN_UUID, BNEP_SVC_GN },
|
{ "gn", GN_UUID, BNEP_SVC_GN },
|
||||||
{ "NAP", NAP_UUID, BNEP_SVC_NAP },
|
{ "nap", NAP_UUID, BNEP_SVC_NAP },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -101,6 +101,16 @@ const char *bnep_uuid(uint16_t id)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *bnep_name(uint16_t id)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; __svc[i].name; i++)
|
||||||
|
if (__svc[i].id == id)
|
||||||
|
return __svc[i].name;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int bnep_init(void)
|
int bnep_init(void)
|
||||||
{
|
{
|
||||||
ctl = socket(PF_BLUETOOTH, SOCK_RAW, BTPROTO_BNEP);
|
ctl = socket(PF_BLUETOOTH, SOCK_RAW, BTPROTO_BNEP);
|
||||||
|
@ -25,7 +25,8 @@ int bnep_init(void);
|
|||||||
int bnep_cleanup(void);
|
int bnep_cleanup(void);
|
||||||
|
|
||||||
uint16_t bnep_service_id(const char *svc);
|
uint16_t bnep_service_id(const char *svc);
|
||||||
const char *bnep_uuid(uint16_t uuid);
|
const char *bnep_uuid(uint16_t id);
|
||||||
|
const char *bnep_name(uint16_t id);
|
||||||
|
|
||||||
int bnep_kill_connection(const char *addr);
|
int bnep_kill_connection(const char *addr);
|
||||||
int bnep_kill_all_connections(void);
|
int bnep_kill_all_connections(void);
|
||||||
|
@ -139,14 +139,13 @@ static DBusHandlerResult create_server(DBusConnection *conn,
|
|||||||
return err_invalid_args(conn, msg, "Not supported");
|
return err_invalid_args(conn, msg, "Not supported");
|
||||||
|
|
||||||
path = g_new0(char, 32);
|
path = g_new0(char, 32);
|
||||||
snprintf(path, 32, NETWORK_PATH "/server/%X", id);
|
snprintf(path, 32, NETWORK_PATH "/server/%s", bnep_name(id));
|
||||||
|
|
||||||
/* Path already registered */
|
/* Path already registered */
|
||||||
if (g_slist_find_custom(mgr->servers, path, (GCompareFunc) strcmp))
|
if (g_slist_find_custom(mgr->servers, path, (GCompareFunc) strcmp))
|
||||||
return create_path(conn, msg, path, NULL); /* Return already exist error */
|
return create_path(conn, msg, path, NULL); /* Return already exist error */
|
||||||
|
|
||||||
/* FIXME: define which type should be used -- string/uuid str/uui128 */
|
if (server_register(conn, path, id) == -1) {
|
||||||
if (server_register(conn, path, str) == -1) {
|
|
||||||
err_failed(conn, msg, "D-Bus path registration failed");
|
err_failed(conn, msg, "D-Bus path registration failed");
|
||||||
g_free(path);
|
g_free(path);
|
||||||
return DBUS_HANDLER_RESULT_HANDLED;
|
return DBUS_HANDLER_RESULT_HANDLED;
|
||||||
|
@ -37,14 +37,15 @@
|
|||||||
|
|
||||||
#define NETWORK_SERVER_INTERFACE "org.bluez.network.Server"
|
#define NETWORK_SERVER_INTERFACE "org.bluez.network.Server"
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
#include "server.h"
|
#include "server.h"
|
||||||
|
|
||||||
struct network_server {
|
struct network_server {
|
||||||
char *iface; /* Routing interface */
|
char *iface; /* Routing interface */
|
||||||
char *name;
|
char *name;
|
||||||
char *path;
|
char *path;
|
||||||
char *uuid; /* UUID 128 */
|
|
||||||
dbus_bool_t secure;
|
dbus_bool_t secure;
|
||||||
|
uint16_t id; /* Service class identifier */
|
||||||
};
|
};
|
||||||
|
|
||||||
static DBusHandlerResult get_uuid(DBusConnection *conn,
|
static DBusHandlerResult get_uuid(DBusConnection *conn,
|
||||||
@ -52,13 +53,15 @@ static DBusHandlerResult get_uuid(DBusConnection *conn,
|
|||||||
{
|
{
|
||||||
struct network_server *ns = data;
|
struct network_server *ns = data;
|
||||||
DBusMessage *reply;
|
DBusMessage *reply;
|
||||||
|
const char *uuid;
|
||||||
|
|
||||||
reply = dbus_message_new_method_return(msg);
|
reply = dbus_message_new_method_return(msg);
|
||||||
if (!reply)
|
if (!reply)
|
||||||
return DBUS_HANDLER_RESULT_NEED_MEMORY;
|
return DBUS_HANDLER_RESULT_NEED_MEMORY;
|
||||||
|
|
||||||
|
uuid = bnep_uuid(ns->id);
|
||||||
dbus_message_append_args(reply,
|
dbus_message_append_args(reply,
|
||||||
DBUS_TYPE_STRING, &ns->uuid,
|
DBUS_TYPE_STRING, &uuid,
|
||||||
DBUS_TYPE_INVALID);
|
DBUS_TYPE_INVALID);
|
||||||
|
|
||||||
return send_message_and_unref(conn, reply);
|
return send_message_and_unref(conn, reply);
|
||||||
@ -264,9 +267,6 @@ static void server_free(struct network_server *ns)
|
|||||||
if (ns->path)
|
if (ns->path)
|
||||||
g_free(ns->path);
|
g_free(ns->path);
|
||||||
|
|
||||||
if (ns->uuid)
|
|
||||||
g_free(ns->uuid);
|
|
||||||
|
|
||||||
g_free(ns);
|
g_free(ns);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,14 +285,14 @@ static const DBusObjectPathVTable server_table = {
|
|||||||
.unregister_function = server_unregister,
|
.unregister_function = server_unregister,
|
||||||
};
|
};
|
||||||
|
|
||||||
int server_register(DBusConnection *conn, const char *path, const char *uuid)
|
int server_register(DBusConnection *conn, const char *path, uint16_t id)
|
||||||
{
|
{
|
||||||
struct network_server *ns;
|
struct network_server *ns;
|
||||||
|
|
||||||
if (!conn)
|
if (!conn)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!path || !uuid)
|
if (!path)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
ns = g_new0(struct network_server, 1);
|
ns = g_new0(struct network_server, 1);
|
||||||
@ -305,7 +305,7 @@ int server_register(DBusConnection *conn, const char *path, const char *uuid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ns->path = g_strdup(path);
|
ns->path = g_strdup(path);
|
||||||
ns->uuid = g_strdup(uuid);
|
ns->id = id;
|
||||||
info("Registered server path:%s", ns->path);
|
info("Registered server path:%s", ns->path);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -20,4 +20,4 @@
|
|||||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
int server_register(DBusConnection *conn, const char *path, const char *uuid);
|
int server_register(DBusConnection *conn, const char *path, uint16_t id);
|
||||||
|
Loading…
Reference in New Issue
Block a user