diff options
Diffstat (limited to 'network/manager.c')
-rw-r--r-- | network/manager.c | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/network/manager.c b/network/manager.c index 2bf76e03..6ca36955 100644 --- a/network/manager.c +++ b/network/manager.c @@ -65,14 +65,14 @@ struct pending_reply { uint16_t id; /* Role */ }; +static struct network_conf *conf = NULL;/* Network service configuration */ static GSList *server_paths = NULL; /* Network registered servers paths */ static GSList *connection_paths = NULL; /* Network registered connections paths */ static int default_index = -1; /* Network default connection path index */ +static int net_uid = 0; /* Network objects identifier */ static DBusConnection *connection = NULL; -static int net_uid = 0; /* Network objects identifier */ - static void pending_reply_free(struct pending_reply *pr) { @@ -145,7 +145,7 @@ static const char * last_connection_used(DBusConnection *conn) for (i = g_slist_length (connection_paths) -1; i > -1; i--) { path = g_slist_nth_data (connection_paths, i); - if (connection_is_connected(conn, path)) + if (connection_is_connected(path)) break; } @@ -182,16 +182,16 @@ static DBusHandlerResult remove_path(DBusConnection *conn, /* Remove references from the storage */ if (*list == connection_paths) { - if (connection_has_pending(conn, path)) + if (connection_has_pending(path)) return err_failed(conn, msg, "Connection is Busy"); - connection_remove_stored(conn, path); + connection_remove_stored(path); /* Reset default connection */ if (l == g_slist_nth(*list, default_index)) { const char *dpath; dpath = last_connection_used(conn); - connection_store(conn, dpath, TRUE); + connection_store(dpath, TRUE); } } @@ -274,13 +274,13 @@ static void pan_record_reply(DBusPendingCall *call, void *data) d->unitSize, d->val.str); } - if (connection_register(pr->conn, pr->path, &pr->src, - &pr->dst, pr->id, name, desc) < 0) { + if (connection_register(pr->path, &pr->src, &pr->dst, pr->id, name, + desc) < 0) { err_failed(pr->conn, pr->msg, "D-Bus path registration failed"); goto fail; } - connection_store(pr->conn, pr->path, FALSE); + connection_store(pr->path, FALSE); connection_paths = g_slist_append(connection_paths, g_strdup(pr->path)); create_path(pr->conn, pr->msg, pr->path, "ConnectionCreated"); @@ -463,7 +463,7 @@ static GSList * find_connection_pattern(DBusConnection *conn, for (list = connection_paths; list; list = list->next) { path = (const char *) list->data; - if (connection_find_data(conn, path, pattern) == 0) + if (connection_find_data(path, pattern) == 0) break; } @@ -538,7 +538,7 @@ static DBusHandlerResult create_connection(DBusConnection *conn, /* Checks if the connection was already been made */ for (l = connection_paths; l; l = l->next) { - if (connection_find_data(conn, l->data, key) == 0) { + if (connection_find_data(l->data, key) == 0) { err_already_exists(conn, msg, "Connection Already exists"); return DBUS_HANDLER_RESULT_HANDLED; @@ -616,7 +616,7 @@ static DBusHandlerResult default_connection(DBusConnection *conn, if (path == NULL) { path = last_connection_used(conn); - connection_store(conn, path, TRUE); + connection_store(path, TRUE); } reply = dbus_message_new_method_return(msg); @@ -670,7 +670,7 @@ static DBusHandlerResult change_default_connection(DBusConnection *conn, path = list->data; default_index = g_slist_position (connection_paths, list); - connection_store(connection, path, TRUE); + connection_store(path, TRUE); dbus_connection_emit_signal(connection, NETWORK_PATH, NETWORK_MANAGER_INTERFACE, @@ -760,8 +760,7 @@ static void parse_stored_connection(char *key, char *value, void *data) return; } - if (connection_register(connection, path, src, - &dst, id, name, ptr) == 0) { + if (connection_register(path, src, &dst, id, name, ptr) == 0) { char *rpath = g_strdup(path); connection_paths = g_slist_append(connection_paths, rpath); } @@ -920,15 +919,23 @@ static DBusSignalVTable manager_signals[] = { { NULL, NULL } }; -int network_init(DBusConnection *conn) +int network_init(DBusConnection *conn, struct network_conf *service_conf) { + conf = service_conf; + if (bridge_init() < 0) { error("Can't init bridge module"); return -1; } - if (bridge_create("pan0") < 0) - error("Can't create bridge"); + if (bridge_create(conf->server.panu_iface) < 0) + error("Can't create PANU bridge"); + + if (bridge_create(conf->server.gn_iface) < 0) + error("Can't create GN bridge"); + + if (bridge_create(conf->server.nap_iface) < 0) + error("Can't create NAP bridge"); if (bnep_init()) { error("Can't init bnep module"); @@ -941,9 +948,11 @@ int network_init(DBusConnection *conn) * (setup connection request) contains the destination service * field that defines which service the source is connecting to. */ - if (server_init(conn) < 0) { + if (server_init(conn, conf->iface_prefix, &conf->server) < 0) return -1; - } + + if (connection_init(conn, conf->iface_prefix, &conf->conn) < 0) + return -1; if (!dbus_connection_create_object_path(conn, NETWORK_PATH, NULL, manager_unregister)) { |