diff options
Diffstat (limited to 'network/server.c')
| -rw-r--r-- | network/server.c | 44 | 
1 files changed, 31 insertions, 13 deletions
| diff --git a/network/server.c b/network/server.c index 39cb4067..76be55b3 100644 --- a/network/server.c +++ b/network/server.c @@ -73,22 +73,24 @@ struct setup_session {  /* Main server structure */  struct network_server { -	bdaddr_t		src;		/* Bluetooth Local Address */ -	char			*iface;		/* Routing interface */ -	char			*name;		/* Server service name */ -	char			*range;		/* IP Address range */ -	char			*path;		/* D-Bus path */ -	gboolean		enable;		/* Enable flag*/ -	gboolean		secure;		/* Security flag*/ -	uint32_t		record_id;	/* Service record id */ -	uint16_t		id;		/* Service class identifier */ -	GSList			*clients;	/* Active connections */ +	bdaddr_t	src;		/* Bluetooth Local Address */ +	char		*bridge;	/* Bridge interface */ +	char		*iface;		/* Routing interface */ +	char		*name;		/* Server service name */ +	char		*range;		/* IP Address range */ +	char		*path;		/* D-Bus path */ +	gboolean	enable;		/* Enable flag */ +	gboolean	secure;		/* Security flag */ +	uint32_t	record_id;	/* Service record id */ +	uint16_t	id;		/* Service class identifier */ +	GSList		*clients;	/* Active connections */  }; -static char netdev[16] = "bnep%d"; +static struct server_conf *conf = NULL;  static GIOChannel *bnep_io = NULL;  static DBusConnection *connection = NULL;  static GSList *setup_sessions = NULL; +static const char *prefix = NULL;  static int store_property(bdaddr_t *src, uint16_t id,  			const char *key, const char *value) @@ -327,7 +329,7 @@ static void authorization_callback(DBusPendingCall *pcall, void *data)  	}  	memset(devname, 0, 16); -	strncpy(devname, netdev, 16); +	strncpy(devname, prefix, strlen(prefix));  	if (bnep_connadd(s->nsk, s->dst_role, devname) < 0)  		goto failed; @@ -592,7 +594,8 @@ static gboolean connect_event(GIOChannel *chan,  	return TRUE;  } -int server_init(DBusConnection *conn) +int server_init(DBusConnection *conn, const char *iface_prefix, +		struct server_conf *server_conf)  {  	struct l2cap_options l2o;  	struct sockaddr_l2 l2a; @@ -653,6 +656,8 @@ int server_init(DBusConnection *conn)  	}  	connection = dbus_connection_ref(conn); +	conf = server_conf; +	prefix = iface_prefix;  	bnep_io = g_io_channel_unix_new(sk);  	g_io_channel_set_close_on_unref(bnep_io, FALSE); @@ -682,6 +687,7 @@ void server_exit()  	dbus_connection_unref(connection);  	connection = NULL; +	conf = NULL;  }  static uint32_t add_server_record(struct network_server *ns) @@ -1190,6 +1196,12 @@ int server_register(const char *path, bdaddr_t *src, uint16_t id)  	ns->path = g_strdup(path);  	ns->id = id; +	if (id == BNEP_SVC_NAP) +		ns->bridge = conf->nap_iface; +	else if (id == BNEP_SVC_GN) +		ns->bridge = conf->gn_iface; +	else +		ns->bridge = conf->panu_iface;  	bacpy(&ns->src, src);  	info("Registered server path:%s", path); @@ -1208,6 +1220,12 @@ int server_register_from_file(const char *path, const bdaddr_t *src,  	bacpy(&ns->src, src);  	ns->path = g_strdup(path);  	ns->id = id; +	if (id == BNEP_SVC_NAP) +		ns->bridge = conf->nap_iface; +	else if (id == BNEP_SVC_GN) +		ns->bridge = conf->gn_iface; +	else +		ns->bridge = conf->panu_iface;  	ns->name = textfile_get(filename, "name");  	if (!ns->name) {  		/* Name is mandatory */ | 
