X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fconnection.c;h=36c0fdbc58fd76eed0dc010c666561b20651ad9a;hp=289c233bb9f29803e77e1e28c0e201a4711f2623;hb=8c3105283ac53f8cc9cc4dde25957ec1cf6b53a0;hpb=5dde6461a321ee47b06e33f8203f2acf00a31a51 diff --git a/src/connection.c b/src/connection.c index 289c233b..36c0fdbc 100644 --- a/src/connection.c +++ b/src/connection.c @@ -2,6 +2,7 @@ connection.c -- connection list management Copyright (C) 2000-2009 Guus Sliepen , 2000-2005 Ivo Timmermans + 2008 Max Rijevski This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,17 +39,13 @@ static int connection_compare(const connection_t *a, const connection_t *b) { } void init_connections(void) { - cp(); - connection_tree = avl_alloc_tree((avl_compare_t) connection_compare, (avl_action_t) free_connection); broadcast = new_connection(); - broadcast->name = xstrdup(_("everyone")); - broadcast->hostname = xstrdup(_("BROADCAST")); + broadcast->name = xstrdup("everyone"); + broadcast->hostname = xstrdup("BROADCAST"); } void exit_connections(void) { - cp(); - avl_delete_tree(connection_tree); free_connection(broadcast); } @@ -56,8 +53,6 @@ void exit_connections(void) { connection_t *new_connection(void) { connection_t *c; - cp(); - c = xmalloc_and_zero(sizeof(connection_t)); if(!c) @@ -69,8 +64,6 @@ connection_t *new_connection(void) { } void free_connection(connection_t *c) { - cp(); - if(c->name) free(c->name); @@ -112,14 +105,10 @@ void free_connection(connection_t *c) { } void connection_add(connection_t *c) { - cp(); - avl_insert(connection_tree, c); } void connection_del(connection_t *c) { - cp(); - avl_delete(connection_tree, c); } @@ -127,29 +116,40 @@ void dump_connections(void) { avl_node_t *node; connection_t *c; - cp(); - - logger(LOG_DEBUG, _("Connections:")); + logger(LOG_DEBUG, "Connections:"); for(node = connection_tree->head; node; node = node->next) { c = node->data; - logger(LOG_DEBUG, _(" %s at %s options %lx socket %d status %04x outbuf %d/%d/%d"), + logger(LOG_DEBUG, " %s at %s options %x socket %d status %04x outbuf %d/%d/%d", c->name, c->hostname, c->options, c->socket, bitfield_to_int(&c->status, sizeof c->status), c->outbufsize, c->outbufstart, c->outbuflen); } - logger(LOG_DEBUG, _("End of connections.")); + logger(LOG_DEBUG, "End of connections."); } bool read_connection_config(connection_t *c) { + list_node_t *node, *next; + size_t name_len = strlen(c->name); char *fname; - int x; - - cp(); + bool x; + + for(node = cmdline_conf->tail; node; node = next) { + config_t *cfg = (config_t *)node->data; + next = node->prev; + if (!strncmp(c->name, cfg->variable, name_len) && cfg->variable[name_len] == '.') { + config_t *new_cfg = new_config(); + new_cfg->variable = xstrdup(cfg->variable + name_len + 1); + new_cfg->value = xstrdup(cfg->value); + new_cfg->file = NULL; + new_cfg->line = cfg->line; + config_add(c->config_tree, new_cfg); + } + } xasprintf(&fname, "%s/hosts/%s", confbase, c->name); x = read_config_file(c->config_tree, fname); free(fname); - return x == 0; + return x; }