All pastes #490048 Raw Edit

Stuff

public text v1 · immutable
·published 2007-05-15 20:30 UTC
rendered paste body
Index: connection.c
===================================================================
RCS file: /cvsroot/bluez/utils/network/connection.c,v
retrieving revision 1.35
diff -u -3 -p -u -r1.35 connection.c
--- connection.c        14 May 2007 15:05:20 -0000      1.35
+++ connection.c        15 May 2007 20:29:09 -0000
@@ -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 *con
 
        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 
        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(DBusConn
 
        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;
+}
Index: connection.h
===================================================================
RCS file: /cvsroot/bluez/utils/network/connection.h,v
retrieving revision 1.10
diff -u -3 -p -u -r1.10 connection.h
--- connection.h        20 Apr 2007 15:41:32 -0000      1.10
+++ connection.h        15 May 2007 20:29:09 -0000
@@ -24,6 +24,7 @@
 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_remove_stored(DBusConnection *conn, const char *path);
 int connection_find_data(DBusConnection *conn, const char *path,
                        const char *pattern);
 gboolean connection_has_pending(DBusConnection *conn, const char *path);
Index: manager.c
===================================================================
RCS file: /cvsroot/bluez/utils/network/manager.c,v
retrieving revision 1.57
diff -u -3 -p -u -r1.57 manager.c
--- manager.c   9 May 2007 19:59:18 -0000       1.57
+++ manager.c   15 May 2007 20:29:09 -0000
@@ -161,8 +161,15 @@ static DBusHandlerResult remove_path(DBu
        if (!l)
                return err_does_not_exist(conn, msg, "Path doesn't exist");
 
-       if (*list == connection_paths && connection_has_pending (conn, path))
-               return err_failed(conn, msg, "Connection is Busy");
+       /* Remove references from the storage */
+       if (*list == connection_paths) {
+               if (connection_has_pending (conn, path))
+                       return err_failed(conn, msg, "Connection is Busy");
+
+               connection_remove_stored(conn, path);
+       }
+       else
+               server_remove_stored(conn, path);
 
        g_free(l->data);
        *list = g_slist_remove(*list, l->data);
@@ -171,8 +178,6 @@ static DBusHandlerResult remove_path(DBu
        if (!reply)
                return DBUS_HANDLER_RESULT_NEED_MEMORY;
 
-       /* Remove the nap or gn file from the file system */
-       server_remove_stored(conn, path);
        if (!dbus_connection_destroy_object_path(conn, path))
                error("Network path unregister failed");
 
@@ -644,8 +649,13 @@ static void parse_stored_connection(char
 
        if (connection_register(connection, path, src,
                                &dst, id, name, ptr) == 0) {
-               connection_paths = g_slist_append(connection_paths,
-                                                       g_strdup(path));
+               char *rpath = g_strdup(path);
+               connection_paths = g_slist_append(connection_paths, rpath);
+               dbus_connection_emit_signal(connection, NETWORK_PATH,
+                                               NETWORK_MANAGER_INTERFACE,
+                                               "ConnectionCreated",
+                                               DBUS_TYPE_STRING, &rpath,
+                                               DBUS_TYPE_INVALID);
        }
 
        g_free(name);
@@ -688,9 +698,18 @@ static void register_stored(void)
                                        NETWORK_PATH"/server/nap%d", net_uid++);
 
                        if (server_register_from_file(connection, path,
-                                       &src, BNEP_SVC_NAP, filename) == 0)
+                                       &src, BNEP_SVC_NAP, filename) == 0) {
                                server_paths = g_slist_append(server_paths,
                                                                g_strdup(path));
+
+                               dbus_connection_emit_signal(connection,
+                                                       NETWORK_PATH,
+                                                       NETWORK_MANAGER_INTERFACE,
+                                                       "ServerCreated",
+                                                       DBUS_TYPE_STRING,
+                                                       &path,
+                                                       DBUS_TYPE_INVALID);
+                       }
                }
 
                /* GN objects */
@@ -700,9 +719,18 @@ static void register_stored(void)
                                        NETWORK_PATH"/server/gn%d", net_uid++);
 
                        if (server_register_from_file(connection, path,
-                                       &src, BNEP_SVC_GN, filename) == 0)
+                                       &src, BNEP_SVC_GN, filename) == 0) {
                                server_paths = g_slist_append(server_paths,
                                                                g_strdup(path));
+
+                               dbus_connection_emit_signal(connection,
+                                                       NETWORK_PATH,
+                                                       NETWORK_MANAGER_INTERFACE,
+                                                       "ServerCreated",
+                                                       DBUS_TYPE_STRING,
+                                                       &path,
+                                                       DBUS_TYPE_INVALID);
+                       }
                }
        }