diff options
Diffstat (limited to 'network/manager.c')
| -rw-r--r-- | network/manager.c | 106 | 
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; | 
