ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/conf.C
(Generate patch)

Comparing gvpe/src/conf.C (file contents):
Revision 1.40 by pcg, Mon Mar 28 20:39:18 2005 UTC vs.
Revision 1.49 by pcg, Sun Aug 10 22:18:58 2008 UTC

1/* 1/*
2 conf.c -- configuration code 2 conf.c -- configuration code
3 Copyright (C) 2003-2005 Marc Lehmann <gvpe@schmorp.de> 3 Copyright (C) 2003-2008 Marc Lehmann <gvpe@schmorp.de>
4 4
5 This file is part of GVPE. 5 This file is part of GVPE.
6 6
7 GVPE is free software; you can redistribute it and/or modify 7 GVPE is free software; you can redistribute it and/or modify it
8 it under the terms of the GNU General Public License as published by 8 under the terms of the GNU General Public License as published by the
9 the Free Software Foundation; either version 2 of the License, or 9 Free Software Foundation; either version 3 of the License, or (at your
10 (at your option) any later version. 10 option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful, but
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15 GNU General Public License for more details. 15 Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License along
18 along with gvpe; if not, write to the Free Software 18 with this program; if not, see <http://www.gnu.org/licenses/>.
19 Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19
20 Additional permission under GNU GPL version 3 section 7
21
22 If you modify this Program, or any covered work, by linking or
23 combining it with the OpenSSL project's OpenSSL library (or a modified
24 version of that library), containing parts covered by the terms of the
25 OpenSSL or SSLeay licenses, the licensors of this Program grant you
26 additional permission to convey the resulting work. Corresponding
27 Source for a non-source form of such a combination shall include the
28 source code for the parts of OpenSSL used as well as that of the
29 covered work.
20*/ 30*/
21 31
22#include "config.h" 32#include "config.h"
23 33
24#include <cstdio> 34#include <cstdio>
69 if (protocol & PROT_DNSv4 ) return "dns"; 79 if (protocol & PROT_DNSv4 ) return "dns";
70 80
71 return "<unknown>"; 81 return "<unknown>";
72} 82}
73 83
84static bool
85match_list (const vector<const char *> &list, const char *str)
86{
87 for (vector<const char *>::const_iterator i = list.end (); i-- > list.begin (); )
88 if ((*i)[0] == '*' && !(*i)[1])
89 return true;
90 else if (!strcmp (*i, str))
91 return true;
92
93 return false;
94}
95
96bool
97conf_node::may_direct (struct conf_node *other)
98{
99 if (match_list (allow_direct, other->nodename))
100 return true;
101
102 if (match_list (deny_direct, other->nodename))
103 return false;
104
105 return true;
106}
107
74void 108void
75conf_node::print () 109conf_node::print ()
76{ 110{
77 printf ("%4d fe:fd:80:00:0%1x:%02x %c %-8.8s %-10.10s %s%s%d\n", 111 printf ("%4d fe:fd:80:00:0%1x:%02x %c %-8.8s %-10.10s %s%s%d\n",
78 id, 112 id,
79 id >> 8, id & 0xff, 113 id >> 8, id & 0xff,
80 compress ? 'Y' : 'N', 114 compress ? 'Y' : 'N',
81 connectmode == C_ONDEMAND ? "ondemand" : 115 connectmode == C_ONDEMAND ? "ondemand"
82 connectmode == C_NEVER ? "never" : 116 : connectmode == C_NEVER ? "never"
83 connectmode == C_ALWAYS ? "always" : "", 117 : connectmode == C_ALWAYS ? "always"
118 : connectmode == C_DISABLED ? "disabled"
119 : "",
84 nodename, 120 nodename,
85 hostname ? hostname : "", 121 hostname ? hostname : "",
86 hostname ? ":" : "", 122 hostname ? ":" : "",
87 hostname ? udp_port : 0 123 hostname ? udp_port : 0
88 ); 124 );
123 default_node.tcp_port = DEFAULT_UDPPORT; // ehrm 159 default_node.tcp_port = DEFAULT_UDPPORT; // ehrm
124 default_node.connectmode = conf_node::C_ALWAYS; 160 default_node.connectmode = conf_node::C_ALWAYS;
125 default_node.compress = true; 161 default_node.compress = true;
126 default_node.protocols = 0; 162 default_node.protocols = 0;
127 default_node.max_retry = DEFAULT_MAX_RETRY; 163 default_node.max_retry = DEFAULT_MAX_RETRY;
164 default_node.max_ttl = DEFAULT_MAX_TTL;
165 default_node.max_queue = DEFAULT_MAX_QUEUE;
128 default_node.if_up_data = strdup (""); 166 default_node.if_up_data = strdup ("");
129 167
130#if ENABLE_DNS 168#if ENABLE_DNS
131 default_node.dns_port = 0; // default is 0 == client 169 default_node.dns_port = 0; // default is 0 == client
132 170
432 } 470 }
433 else if (!strcmp (var, "enable-rawip")) 471 else if (!strcmp (var, "enable-rawip"))
434 { 472 {
435 u8 v; parse_bool (v, "enable-rawip", PROT_IPv4, 0); node->protocols = (node->protocols & ~PROT_IPv4 ) | v; 473 u8 v; parse_bool (v, "enable-rawip", PROT_IPv4, 0); node->protocols = (node->protocols & ~PROT_IPv4 ) | v;
436 } 474 }
475 else if (!strcmp (var, "allow-direct"))
476 node->allow_direct.push_back (strdup (val));
477 else if (!strcmp (var, "deny-direct"))
478 node->deny_direct.push_back (strdup (val));
479 else if (!strcmp (var, "max-ttl"))
480 node->max_ttl = atof (val);
481 else if (!strcmp (var, "max-queue"))
482 node->max_queue = atoi (val);
437 483
438 // unknown or misplaced 484 // unknown or misplaced
439 else 485 else
440 return _("unknown configuration directive. (ignored)"); 486 return _("unknown configuration directive. (ignored)");
441 487
442 return 0; 488 return 0;
489}
490
491void conf_node::finalise ()
492{
493 if (max_queue < 1)
494 {
495 slog (L_WARN, _("%s: max-queue value invalid, setting it to 1."), nodename);
496 max_queue = 1;
497 }
498
499 if (routerprio > 1 && (connectmode != C_ALWAYS && connectmode != C_DISABLED))
500 {
501 //slog (L_WARN, _("%s: has non-zero router-priority but either 'never' or 'ondemand' as connectmode, setting it to 'always'."), nodename);
502 connectmode = C_ALWAYS;
503 }
443} 504}
444 505
445void configuration_parser::parse_argv () 506void configuration_parser::parse_argv ()
446{ 507{
447 for (int i = 0; i < argc; ++i) 508 for (int i = 0; i < argc; ++i)
552 slog (L_NOTICE, _("private hostkey and public node key mismatch: is '%s' the correct node?"), ::thisnode); 613 slog (L_NOTICE, _("private hostkey and public node key mismatch: is '%s' the correct node?"), ::thisnode);
553 exit (EXIT_FAILURE); 614 exit (EXIT_FAILURE);
554 } 615 }
555 616
556 free (fname); 617 free (fname);
618
619 for (configuration::node_vector::iterator i = conf.nodes.begin(); i != conf.nodes.end(); ++i)
620 (*i)->finalise ();
557} 621}
558 622
559char *configuration::config_filename (const char *name, const char *dflt) 623char *configuration::config_filename (const char *name, const char *dflt)
560{ 624{
561 char *fname; 625 char *fname;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines