summaryrefslogtreecommitdiffstats
path: root/network/manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'network/manager.c')
-rw-r--r--network/manager.c106
1 files changed, 81 insertions, 25 deletions
diff --git a/network/manager.c b/network/manager.c
index c0af5d34..371820cc 100644
--- a/network/manager.c
+++ b/network/manager.c
@@ -57,29 +57,11 @@
static struct network_conf *conf = NULL;/* Network service configuration */
-static DBusConnection *connection = NULL;
-
-static void register_server(uint16_t id)
-{
- char path[MAX_PATH_LENGTH];
- bdaddr_t src;
- int dev_id;
-
- if (!conf->server_enabled)
- return;
-
- snprintf(path, MAX_PATH_LENGTH, NETWORK_PATH "/%s", bnep_name(id));
+static struct btd_adapter_driver network_panu_server_driver;
+static struct btd_adapter_driver network_gn_server_driver;
+static struct btd_adapter_driver network_nap_server_driver;
- bacpy(&src, BDADDR_ANY);
- dev_id = hci_get_route(&src);
- if (dev_id < 0 || hci_devba(dev_id, &src))
- return;
-
- if (server_register(path, &src, id) < 0)
- return;
-
- server_store(path);
-}
+static DBusConnection *connection = NULL;
static int network_probe(struct btd_device_driver *driver,
struct btd_device *device, GSList *records)
@@ -113,6 +95,62 @@ static void network_remove(struct btd_device_driver *driver,
connection_unregister(path, id);
}
+static int network_server_probe(struct adapter *adapter, uint16_t id)
+{
+ const gchar *path = adapter_get_path(adapter);
+ const char *source;
+ bdaddr_t src;
+
+ DBG("path %s", path);
+
+ if (!conf->server_enabled)
+ return 0;
+
+ source = adapter_get_address(adapter);
+ str2ba(source, &src);
+
+ return server_register(path, &src, id);
+}
+
+static void network_server_remove(struct adapter *adapter, uint16_t id)
+{
+ const gchar *path = adapter_get_path(adapter);
+
+ DBG("path %s", path);
+
+ server_unregister(path, id);
+}
+
+static int network_panu_server_probe(struct adapter *adapter)
+{
+ return network_server_probe(adapter, BNEP_SVC_PANU);
+}
+
+static int network_gn_server_probe(struct adapter *adapter)
+{
+ return network_server_probe(adapter, BNEP_SVC_GN);
+}
+
+static int network_nap_server_probe(struct adapter *adapter)
+{
+ return network_server_probe(adapter, BNEP_SVC_NAP);
+}
+
+static void network_panu_server_remove(struct adapter *adapter)
+{
+ network_server_remove(adapter, BNEP_SVC_PANU);
+}
+
+static void network_gn_server_remove(struct adapter *adapter)
+{
+ network_server_remove(adapter, BNEP_SVC_GN);
+}
+
+static void network_nap_server_remove(struct adapter *adapter)
+{
+ network_server_remove(adapter, BNEP_SVC_NAP);
+}
+
static struct btd_device_driver network_panu_driver = {
.name = "network-panu",
.uuids = BTD_UUIDS(PANU_UUID),
@@ -134,6 +172,24 @@ static struct btd_device_driver network_nap_driver = {
.remove = network_remove,
};
+static struct btd_adapter_driver network_panu_server_driver = {
+ .name = "network-panu-server",
+ .probe = network_panu_server_probe,
+ .remove = network_panu_server_remove,
+};
+
+static struct btd_adapter_driver network_gn_server_driver = {
+ .name = "network-gn-server",
+ .probe = network_gn_server_probe,
+ .remove = network_gn_server_remove,
+};
+
+static struct btd_adapter_driver network_nap_server_driver = {
+ .name = "network-nap-server",
+ .probe = network_nap_server_probe,
+ .remove = network_nap_server_remove,
+};
+
int network_manager_init(DBusConnection *conn, struct network_conf *service_conf)
{
conf = service_conf;
@@ -159,9 +215,9 @@ int network_manager_init(DBusConnection *conn, struct network_conf *service_conf
/* Register PANU, GN and NAP servers if they don't exist */
/* FIXME: server should be registered as adapter driver */
- register_server(BNEP_SVC_PANU);
- register_server(BNEP_SVC_GN);
- register_server(BNEP_SVC_NAP);
+ btd_register_adapter_driver(&network_panu_server_driver);
+ btd_register_adapter_driver(&network_gn_server_driver);
+ btd_register_adapter_driver(&network_nap_server_driver);
if (connection_init(conn, conf->iface_prefix) < 0)
return -1;