summaryrefslogtreecommitdiffstats
path: root/network
diff options
context:
space:
mode:
authorClaudio Takahasi <claudio.takahasi@openbossa.org>2007-04-13 20:21:11 +0000
committerClaudio Takahasi <claudio.takahasi@openbossa.org>2007-04-13 20:21:11 +0000
commit235f0862a242772d8e3e51cd4f4dd8277939bbe5 (patch)
tree8acedbc98a54383537afb67c84cb59c8d4183105 /network
parent4706fa6e70ea2e19c7892ade0323a35d4f0b5a47 (diff)
network: added register_nap_from_file
Diffstat (limited to 'network')
-rw-r--r--network/manager.c41
-rw-r--r--network/server.c45
-rw-r--r--network/server.h6
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);