diff options
author | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2007-05-16 13:13:58 +0000 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2007-05-16 13:13:58 +0000 |
commit | 417006053c2c16cd8ae5b947d0a8daae4f151b94 (patch) | |
tree | 0373b1b5a2076c1d4ae0d906822dff44525007be /network/connection.c | |
parent | d342f2a2b1457a25c50cb661afb56f10595b925c (diff) |
Fixes storage problems with connections and fix bug of CreateConnection not checking for present connection with the same destination and profile.
Diffstat (limited to 'network/connection.c')
-rw-r--r-- | network/connection.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/network/connection.c b/network/connection.c index 4f57e93a..68c53b7b 100644 --- a/network/connection.c +++ b/network/connection.c @@ -28,7 +28,7 @@ #include <stdio.h> #include <errno.h> #include <unistd.h> - +#include <sys/stat.h> #include <netinet/in.h> #include <bluetooth/bluetooth.h> @@ -702,19 +702,21 @@ int connection_store(DBusConnection *conn, const char *path) ba2str(&nc->src, src_addr); create_name(filename, PATH_MAX, STORAGEDIR, src_addr, "network"); + create_file(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); err = textfile_put(filename, key, value); g_free(value); - return err; + return err; } int connection_find_data(DBusConnection *conn, const char *path, const char *pattern) { struct network_conn *nc; - char addr[18]; + char addr[18], key[32]; + const char *role; if (!dbus_connection_get_object_user_data(conn, path, (void *) &nc)) return -1; @@ -730,6 +732,12 @@ int connection_find_data(DBusConnection *conn, if (strcasecmp(pattern, addr) == 0) return 0; + role = bnep_name(nc->id); + snprintf(key, 32, "%s#%s", addr, role); + + if (strcasecmp(pattern, key) == 0) + return 0; + return -1; } @@ -742,3 +750,27 @@ gboolean connection_has_pending(DBusConnection *conn, const char *path) return (nc->state == CONNECTING); } + +int connection_remove_stored(DBusConnection *conn, const char *path) +{ + struct network_conn *nc; + const char *role; + char key[32]; + char filename[PATH_MAX + 1]; + char src_addr[18], dst_addr[18]; + int err; + + if (!dbus_connection_get_object_user_data(conn, path, (void *) &nc)) + return -ENOENT; + + ba2str(&nc->dst, dst_addr); + role = bnep_name(nc->id); + snprintf(key, 32, "%s#%s", dst_addr, role); + + ba2str(&nc->src, src_addr); + create_name(filename, PATH_MAX, STORAGEDIR, src_addr, "network"); + + err = textfile_del(filename, key); + + return err; +} |