diff options
| -rw-r--r-- | network/manager.c | 41 | ||||
| -rw-r--r-- | network/server.c | 45 | ||||
| -rw-r--r-- | network/server.h | 6 | 
3 files changed, 71 insertions, 21 deletions
| diff --git a/network/manager.c b/network/manager.c index 43bc9b71..15209592 100644 --- a/network/manager.c +++ b/network/manager.c @@ -739,18 +739,15 @@ static void parse_stored_connection(char *key, char *value, void *data)  	if (++ptr == NULL)  		return; -	if (strcasecmp("nap", ptr) == 0) { +	if (strcasecmp("nap", ptr) == 0)  		id = BNEP_SVC_NAP; -		snprintf(path, MAX_PATH_LENGTH, -				NETWORK_PATH"/server/nap%d", net_uid++); -	} else if (strcasecmp("gn", ptr) == 0) { +	else if (strcasecmp("gn", ptr) == 0)  		id = BNEP_SVC_GN; -		snprintf(path, MAX_PATH_LENGTH, -				NETWORK_PATH"/server/gn%d", net_uid++); -	} else { -		/* Invalid role */ +	else  		return; -	} + +	snprintf(path, MAX_PATH_LENGTH, +			NETWORK_PATH"/connection%d", net_uid++);  	/* Parsing the value: name and description */  	ptr = strchr(value, ':'); @@ -778,8 +775,10 @@ static void register_stored(void)  {  	char dirname[PATH_MAX + 1];  	char filename[PATH_MAX + 1]; +	char path[MAX_PATH_LENGTH];  	struct dirent *de;  	DIR *dir; +	struct stat s;  	bdaddr_t src;  	snprintf(dirname, PATH_MAX, "%s", STORAGEDIR); @@ -797,17 +796,27 @@ static void register_stored(void)  						de->d_name, "network");  		str2ba(de->d_name, &src); -		textfile_foreach(filename, parse_stored_connection, &src); + + +		if (stat (filename, &s) == 0 && (s.st_mode & __S_IFREG)) +			textfile_foreach(filename, parse_stored_connection, &src);  		/* NAP objects */ -		create_name(filename, PATH_MAX, STORAGEDIR, -						de->d_name, "nap"); -		register_nap_from_file(&src, filename); +		create_name(filename, PATH_MAX, STORAGEDIR, de->d_name, "nap"); + +		if (stat (filename, &s) == 0 && (s.st_mode & __S_IFREG)) { +			snprintf(path, MAX_PATH_LENGTH, +					NETWORK_PATH"/server/nap%d", net_uid++); +			register_nap_from_file(connection, path, &src, filename); +		}  		/* GN objects */ -		create_name(filename, PATH_MAX, STORAGEDIR, -				de->d_name, "gn"); -		register_gn_from_file(&src, filename); +		create_name(filename, PATH_MAX, STORAGEDIR, de->d_name, "gn"); +		if (stat (filename, &s) == 0 && (s.st_mode & __S_IFREG)) { +			snprintf(path, MAX_PATH_LENGTH, +					NETWORK_PATH"/server/gn%d", net_uid++); +			register_gn_from_file(connection, path, &src, filename); +		}  	}  	closedir(dir); diff --git a/network/server.c b/network/server.c index c6215b8a..be6316a1 100644 --- a/network/server.c +++ b/network/server.c @@ -44,6 +44,7 @@  #include "logging.h"  #include "dbus.h"  #include "error.h" +#include "textfile.h"  #define NETWORK_SERVER_INTERFACE "org.bluez.network.Server" @@ -64,6 +65,7 @@ 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 */  	dbus_bool_t		secure;  	uint32_t		record_id;	/* Service record id */ @@ -947,6 +949,9 @@ static void server_free(struct network_server *ns)  	if (ns->name)  		g_free(ns->name); +	if (ns->range) +		g_free(ns->range); +  	if (ns->path)  		g_free(ns->path); @@ -1015,13 +1020,47 @@ fail:  	return -1;  } -int register_nap_from_file(const bdaddr_t *src, const char *filename) +int register_nap_from_file(DBusConnection *conn, const char *path, +				const bdaddr_t *src, const char *filename)  { -	/* FIXME: extract name, description, secure, enabled, address range, routing ...*/ +	struct network_server *ns; +	char *str; + +	ns = g_new0(struct network_server, 1); + +	ns->id = BNEP_SVC_NAP; +	ns->name = textfile_get(filename, "name"); +	if (ns->name) { +		/* Name is mandatory */ +		server_free(ns); +		return -1; +	} +	ns->secure = FALSE; +	str = textfile_get(filename, "secure"); +	if (str) { +		if (strcmp("1", str) == 0) +			ns->secure = TRUE; +		g_free(str); +	} + +	ns->range = textfile_get(filename, "address_range"); +	ns->iface = textfile_get(filename, "routing"); + +	/* Register path */ +	if (!dbus_connection_register_object_path(conn, path, +						&server_table, ns)) { +		error("D-Bus failed to register %s path", path); +		server_free(ns); +		return -1; +	} + +	/* FIXME: Missing enabled the server(if applied) */ +  	return 0;  } -int register_gn_from_file(const bdaddr_t *src, const char *filename) +int register_gn_from_file(DBusConnection *conn, const char *path, +			const bdaddr_t *src, const char *filename)  {  	/* FIXME: extract name, description, secure, enabled, address range ...*/  	return 0; diff --git a/network/server.h b/network/server.h index 23ebe772..d96873b3 100644 --- a/network/server.h +++ b/network/server.h @@ -23,6 +23,8 @@  int server_register(DBusConnection *conn, const char *addr,  				const char *path, uint16_t id); -int register_nap_from_file(const bdaddr_t *src, const char *filename); -int register_gn_from_file(const bdaddr_t *src, const char *filename); +int register_nap_from_file(DBusConnection *conn, const char *path, +			const bdaddr_t *src, const char *filename); +int register_gn_from_file(DBusConnection *conn, const char *path, +			const bdaddr_t *src, const char *filename);  int read_server_uuid(bdaddr_t *src, uint16_t uuid, gboolean *enable); | 
