summaryrefslogtreecommitdiffstats
path: root/network/connection.c
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2007-05-16 13:13:58 +0000
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2007-05-16 13:13:58 +0000
commit417006053c2c16cd8ae5b947d0a8daae4f151b94 (patch)
tree0373b1b5a2076c1d4ae0d906822dff44525007be /network/connection.c
parentd342f2a2b1457a25c50cb661afb56f10595b925c (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.c38
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;
+}