summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2007-09-28 13:15:53 +0000
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2007-09-28 13:15:53 +0000
commit2033d8e42102bb6513e5ea71e147a8a7dcce1420 (patch)
tree5fe2c7c8bbc02c38093afcd349a94d641f0e2230
parent2fb6bb97176c9e922c14584da550f3edd49f0986 (diff)
Add support for config file.
-rw-r--r--network/connection.h6
-rw-r--r--network/main.c117
-rw-r--r--network/manager.c2
-rw-r--r--network/manager.h11
-rw-r--r--network/network.conf36
-rw-r--r--network/server.c1
-rw-r--r--network/server.h8
7 files changed, 178 insertions, 3 deletions
diff --git a/network/connection.h b/network/connection.h
index 5561ee32..35726732 100644
--- a/network/connection.h
+++ b/network/connection.h
@@ -21,6 +21,12 @@
*
*/
+struct connection_conf {
+ char *panu_script;
+ char *gn_script;
+ char *nap_script;
+};
+
int connection_register(DBusConnection *conn, const char *path, bdaddr_t *src,
bdaddr_t *dst, uint16_t id, const char *name, const char *desc);
int connection_store(DBusConnection *conn, const char *path,
diff --git a/network/main.c b/network/main.c
index 2d9d44b6..5d1f5013 100644
--- a/network/main.c
+++ b/network/main.c
@@ -41,13 +41,128 @@
#include "manager.h"
#include "hal.h"
+#define IFACE_PREFIX "bnep%d"
+#define PANU_IFACE "pan0"
+#define GN_IFACE "pan1"
+#define NAP_IFACE "pan2"
+
static GMainLoop *main_loop;
+static struct network_conf conf = {
+ .connection_enabled = TRUE,
+ .server_enabled = TRUE,
+ .iface_prefix = NULL,
+ .conn.panu_script = NULL,
+ .conn.gn_script = NULL,
+ .conn.nap_script = NULL,
+ .server.panu_iface = NULL,
+ .server.gn_iface = NULL,
+ .server.nap_iface = NULL,
+ .server.disable_security = FALSE
+};
+
static void sig_term(int sig)
{
g_main_loop_quit(main_loop);
}
+static void read_config(const char *file)
+{
+ GKeyFile *keyfile;
+ GError *err = NULL;
+
+ keyfile = g_key_file_new();
+
+ if (!g_key_file_load_from_file(keyfile, file, 0, &err)) {
+ error("Parsing %s failed: %s", file, err->message);
+ g_error_free(err);
+ g_key_file_free(keyfile);
+ return;
+ }
+
+ conf.iface_prefix = g_key_file_get_string(keyfile, "Connection",
+ "InterfacePrefix", &err);
+ if (!conf.iface_prefix)
+ conf.iface_prefix = g_strdup(IFACE_PREFIX);
+ if (err) {
+ debug("%s: %s", file, err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ conf.conn.panu_script = g_key_file_get_string(keyfile, "Connection",
+ "PANUScript", &err);
+ if (err) {
+ debug("%s: %s", file, err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ conf.conn.gn_script = g_key_file_get_string(keyfile, "Connection",
+ "GNScript", &err);
+ if (err) {
+ debug("%s: %s", file, err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ conf.conn.nap_script = g_key_file_get_string(keyfile, "Connection",
+ "NAPScript", &err);
+ if (err) {
+ debug("%s: %s", file, err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ conf.server.panu_iface = g_key_file_get_string(keyfile, "Server",
+ "PANUInterface", &err);
+ if (!conf.server.panu_iface)
+ conf.server.panu_iface = g_strdup(PANU_IFACE);
+ if (err) {
+ debug("%s: %s", file, err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ conf.server.gn_iface = g_key_file_get_string(keyfile, "Server",
+ "GNInterface", &err);
+ if (!conf.server.gn_iface)
+ conf.server.gn_iface = g_strdup(GN_IFACE);
+ if (err) {
+ debug("%s: %s", file, err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ conf.server.nap_iface = g_key_file_get_string(keyfile, "Server",
+ "NAPInterface", &err);
+ if (!conf.server.nap_iface)
+ conf.server.nap_iface = g_strdup(NAP_IFACE);
+ if (err) {
+ debug("%s: %s", file, err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ conf.server.disable_security = g_key_file_get_boolean(keyfile, "Server",
+ "DisableSecurity", &err);
+ if (err) {
+ debug("%s: %s", file, err->message);
+ g_error_free(err);
+ err = NULL;
+ }
+
+ debug("Config options: InterfacePrefix=%s, PANUScript=%s, GNScript=%s, "
+ "NAPScript=%s, PANUInterface=%s, GNInterface=%s, "
+ "NAPInterface=%s, DisableSecurity=%s", conf.iface_prefix,
+ conf.conn.panu_script, conf.conn.gn_script, conf.conn.nap_script,
+ conf.server.panu_iface, conf.server.gn_iface,
+ conf.server.nap_iface,
+ conf.server.disable_security ? "true" : "false");
+
+ g_key_file_free(keyfile);
+}
+
int main(int argc, char *argv[])
{
DBusConnection *conn;
@@ -67,6 +182,8 @@ int main(int argc, char *argv[])
enable_debug();
+ read_config(CONFIGDIR "/network.conf");
+
main_loop = g_main_loop_new(NULL, FALSE);
conn = dbus_bus_system_setup_with_main_loop(NULL, NULL, NULL);
diff --git a/network/manager.c b/network/manager.c
index 7bc56142..2bf76e03 100644
--- a/network/manager.c
+++ b/network/manager.c
@@ -50,8 +50,6 @@
#include "error.h"
#include "bridge.h"
#include "manager.h"
-#include "server.h"
-#include "connection.h"
#include "common.h"
#define MAX_NAME_SIZE 256
diff --git a/network/manager.h b/network/manager.h
index 9ad1009e..45c7ada4 100644
--- a/network/manager.h
+++ b/network/manager.h
@@ -21,9 +21,20 @@
*
*/
+#include "connection.h"
+#include "server.h"
+
#define MAX_PATH_LENGTH 64 /* D-Bus path */
#define NETWORK_PATH "/org/bluez/network"
+struct network_conf {
+ gboolean connection_enabled;
+ gboolean server_enabled;
+ char *iface_prefix;
+ struct connection_conf conn;
+ struct server_conf server;
+};
+
int network_init(DBusConnection *conn);
void network_exit(void);
diff --git a/network/network.conf b/network/network.conf
index f3c93bad..66136002 100644
--- a/network/network.conf
+++ b/network/network.conf
@@ -1,2 +1,38 @@
# Configuration file for the network service
+# This section contains options which are not specific to any
+# particular interface
+[General]
+
+# If we want to disable support for specific services
+# Defaults to supporting all implemented services
+#Disable=Connection,Server
+
+# Network interface name prefix for connections. default:bnep%d
+# (up to 16 characters)
+InterfacePrefix=bnep%d
+
+[Connection]
+
+# PAN user connection interface up script. default:
+PANUScript=/usr/sbin/avahi-autoipd
+
+# Group Network connection interface up script. default:
+GNScript=/usr/sbin/avahi-autoipd
+
+# Network Access Point connection interface up script. default:
+NAPScript=/sbin/dhclient
+
+[Server]
+
+# Network Interface name for PAN user server. default:pan0
+PANUInterface=pan0
+
+# Network Interface name for Group Network server. default:pan1
+GNInterface=pan1
+
+# Network Interface name for Network Access Point server. default:pan2
+NAPInterface=pan2
+
+# Disable link encryption: default=false
+DisableSecurity=false
diff --git a/network/server.c b/network/server.c
index 5b741edd..39cb4067 100644
--- a/network/server.c
+++ b/network/server.c
@@ -59,7 +59,6 @@
#include "bridge.h"
#include "common.h"
#include "manager.h"
-#include "server.h"
/* Pending Authorization */
struct setup_session {
diff --git a/network/server.h b/network/server.h
index d96b7ecb..2b148081 100644
--- a/network/server.h
+++ b/network/server.h
@@ -20,6 +20,14 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
+
+struct server_conf {
+ char *panu_iface;
+ char *gn_iface;
+ char *nap_iface;
+ gboolean disable_security;
+};
+
int server_init(DBusConnection *conn);
void server_exit();
int server_register(const char *path, bdaddr_t *src, uint16_t id);