diff options
| -rw-r--r-- | network/common.h | 2 | ||||
| -rw-r--r-- | network/connection.h | 3 | ||||
| -rw-r--r-- | network/main.c | 22 | ||||
| -rw-r--r-- | network/manager.c | 55 | ||||
| -rw-r--r-- | network/manager.h | 3 | ||||
| -rw-r--r-- | network/server.h | 1 | 
6 files changed, 36 insertions, 50 deletions
diff --git a/network/common.h b/network/common.h index 36bb66b2..820a2b3a 100644 --- a/network/common.h +++ b/network/common.h @@ -20,7 +20,7 @@   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   *   */ -/* BNEP functions */ +  int bnep_init(void);  int bnep_cleanup(void); diff --git a/network/connection.h b/network/connection.h index 70966b2c..08861a72 100644 --- a/network/connection.h +++ b/network/connection.h @@ -20,5 +20,6 @@   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   *   */ +  int connection_register(DBusConnection *conn, const char *path, -			const char *addr, uint16_t id); +						const char *addr, uint16_t id); diff --git a/network/main.c b/network/main.c index 16a173c5..74675184 100644 --- a/network/main.c +++ b/network/main.c @@ -48,6 +48,7 @@ static void sig_term(int sig)  int main(int argc, char *argv[])  { +	DBusConnection *conn;  	struct sigaction sa;  	start_logging("network", "Bluetooth Network daemon"); @@ -64,18 +65,26 @@ int main(int argc, char *argv[])  	enable_debug(); -	/* Create event loop */  	main_loop = g_main_loop_new(NULL, FALSE); -	hal_init(NULL); +	conn = dbus_bus_system_setup_with_main_loop(NULL, NULL, NULL); +	if (!conn) { +		g_main_loop_unref(main_loop); +		exit(1); +	} + +	hal_init(conn);  	hal_create_device(NULL); -	if (network_init() == -1) -		goto fail; +	if (network_init(conn) < 0) { +		dbus_connection_unref(conn); +		g_main_loop_unref(main_loop); +		exit(1); +	}  	if (argc > 1 && !strcmp(argv[1], "-s")) -		internal_service("network"); +		register_external_service(conn, "network", "Network service", "");  	g_main_loop_run(main_loop); @@ -85,7 +94,8 @@ int main(int argc, char *argv[])  	hal_cleanup(); -fail: +	dbus_connection_unref(conn); +  	g_main_loop_unref(main_loop);  	info("Exit"); diff --git a/network/manager.c b/network/manager.c index 915f1a4b..60471429 100644 --- a/network/manager.c +++ b/network/manager.c @@ -341,17 +341,13 @@ int network_dbus_init(void)  	bdaddr_t src;  	int dev_id; -	connection = init_dbus(NULL, NULL, NULL); -	if (!connection) -		return -1; -  	dbus_connection_set_exit_on_disconnect(connection, TRUE);  	mgr = g_new0(struct manager, 1);  	/* Fallback to catch invalid network path */ -	if (!dbus_connection_register_fallback(connection, NETWORK_PATH, -						&manager_table, mgr)) { +	if (dbus_connection_register_fallback(connection, NETWORK_PATH, +						&manager_table, mgr) == FALSE) {  		error("D-Bus failed to register %s path", NETWORK_PATH);  		goto fail;  	} @@ -384,43 +380,12 @@ fail:  void network_dbus_exit(void)  {  	dbus_connection_unregister_object_path(connection, NETWORK_PATH); - -	dbus_connection_unref(connection);  } -void internal_service(const char *identifier) +int network_init(DBusConnection *conn)  { -	DBusMessage *msg, *reply; -	const char *name = "Network service", *desc = ""; - -	info("Registering service"); +	int err; -	msg = dbus_message_new_method_call("org.bluez", "/org/bluez", -				"org.bluez.Database", "RegisterService"); -	if (!msg) { -		error("Can't create service register method"); -		return; -	} - -	dbus_message_append_args(msg, DBUS_TYPE_STRING, &identifier, -				DBUS_TYPE_STRING, &name, -				DBUS_TYPE_STRING, &desc, DBUS_TYPE_INVALID); - -	reply = dbus_connection_send_with_reply_and_block(connection, msg, -1, -							  NULL); -	if (!reply) { -		error("Can't register service"); -		return; -	} - -	dbus_message_unref(msg); -	dbus_message_unref(reply); - -	dbus_connection_flush(connection); -} - -int network_init(void) -{  	if (bridge_init() < 0) {  		error("Can't init bridge module");  		return -1; @@ -436,13 +401,23 @@ int network_init(void)  		return -1;  	} -	return network_dbus_init(); +	connection = dbus_connection_ref(conn); + +	err = network_dbus_init(); +	if (err < 0) +		dbus_connection_unref(connection); + +	return err;  }  void network_exit(void)  {  	network_dbus_exit(); +	dbus_connection_unref(connection); + +	connection = NULL; +  	if (bridge_remove("pan0") < 0)  		error("Can't remove bridge"); diff --git a/network/manager.h b/network/manager.h index 81467c1a..d37ca3cd 100644 --- a/network/manager.h +++ b/network/manager.h @@ -21,6 +21,5 @@   *   */ -int network_init(void); +int network_init(DBusConnection *conn);  void network_exit(void); -void internal_service(const char *identifier); diff --git a/network/server.h b/network/server.h index bb15e4d7..27b38ba6 100644 --- a/network/server.h +++ b/network/server.h @@ -20,4 +20,5 @@   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA   *   */ +  int server_register(DBusConnection *conn, const char *path, uint16_t id);  | 
