diff options
-rw-r--r-- | network/connection.c | 39 | ||||
-rw-r--r-- | network/connection.h | 1 | ||||
-rw-r--r-- | network/manager.c | 1 |
3 files changed, 40 insertions, 1 deletions
diff --git a/network/connection.c b/network/connection.c index c7f22f4b..0bd255d2 100644 --- a/network/connection.c +++ b/network/connection.c @@ -39,6 +39,8 @@ #include "logging.h" #include "dbus.h" +#include "textfile.h" + #include "error.h" #include "common.h" #include "connection.h" @@ -60,7 +62,7 @@ struct network_conn { char dev[16]; /* BNEP interface name */ char *name; char *desc; - uint16_t id; /* Service Class Identifier */ + uint16_t id; /* Role: Service Class Identifier */ conn_state state; int sk; }; @@ -593,6 +595,41 @@ int connection_register(DBusConnection *conn, const char *path, bdaddr_t *src, return 0; } +int connection_store(DBusConnection *conn, const char *path) +{ + struct network_conn *nc; + const char *role; + char key[32], *value; + char filename[PATH_MAX + 1]; + char src_addr[18], dst_addr[18]; + int len, err; + + if (!dbus_connection_get_object_path_data(conn, path, (void *) &nc)) + return -ENOENT; + + if (!nc->name || !nc->desc) + return -EINVAL; + + /* FIXME: name and desc validation - remove ':' */ + + ba2str(&nc->dst, dst_addr); + role = bnep_name(nc->id); + snprintf(key, 32, "%s#%s", dst_addr, role); + + len = strlen(nc->name) + strlen(nc->desc) + 2; + value = g_malloc0(len); + snprintf(value, len, "%s:%s", nc->name, nc->desc); + + ba2str(&nc->src, src_addr); + create_name(filename, PATH_MAX, STORAGEDIR, src_addr, "network"); + + err = textfile_put(filename, key, value); + + g_free(value); + + return err; +} + int connection_find_data(DBusConnection *conn, const char *path, const char *pattern) { diff --git a/network/connection.h b/network/connection.h index 1f810060..b03c3caa 100644 --- a/network/connection.h +++ b/network/connection.h @@ -23,5 +23,6 @@ int connection_register(DBusConnection *conn, const char *path, bdaddr_t *src, bdaddr_t *dst, uint16_t id, const char *name, const char *desc); +int connection_store(DBusConnection *conn, const char *path); int connection_find_data(DBusConnection *conn, const char *path, const char *pattern); diff --git a/network/manager.c b/network/manager.c index 86dc26dc..c546ed0c 100644 --- a/network/manager.c +++ b/network/manager.c @@ -250,6 +250,7 @@ static void pan_record_reply(DBusPendingCall *call, void *data) goto fail; } + connection_store(pr->conn, pr->path); connection_paths = g_slist_append(connection_paths, g_strdup(pr->path)); create_path(pr->conn, pr->msg, pr->path, "ConnectionCreated"); |