+ proxyhost = xstrdup(proxyhost);
+ proxyport = xstrdup(proxyport);
+
+ if(proxyuser && *proxyuser) {
+ proxyuser = xstrdup(proxyuser);
+ }
+
+ if(proxypass && *proxypass) {
+ proxypass = xstrdup(proxypass);
+ }
+
+ break;
+ }
+
+ free(proxy);
+ }
+
+ bool choice;
+
+ if(get_config_bool(lookup_config(&config_tree, "IndirectData"), &choice) && choice) {
+ myself->options |= OPTION_INDIRECT;
+ }
+
+ if(get_config_bool(lookup_config(&config_tree, "TCPOnly"), &choice) && choice) {
+ myself->options |= OPTION_TCPONLY;
+ }
+
+ if(myself->options & OPTION_TCPONLY) {
+ myself->options |= OPTION_INDIRECT;
+ }
+
+ get_config_bool(lookup_config(&config_tree, "UDPDiscovery"), &udp_discovery);
+ get_config_int(lookup_config(&config_tree, "UDPDiscoveryKeepaliveInterval"), &udp_discovery_keepalive_interval);
+ get_config_int(lookup_config(&config_tree, "UDPDiscoveryInterval"), &udp_discovery_interval);
+ get_config_int(lookup_config(&config_tree, "UDPDiscoveryTimeout"), &udp_discovery_timeout);
+
+ get_config_int(lookup_config(&config_tree, "MTUInfoInterval"), &mtu_info_interval);
+ get_config_int(lookup_config(&config_tree, "UDPInfoInterval"), &udp_info_interval);
+
+ get_config_bool(lookup_config(&config_tree, "DirectOnly"), &directonly);
+ get_config_bool(lookup_config(&config_tree, "LocalDiscovery"), &localdiscovery);
+
+ char *rmode = NULL;
+
+ if(get_config_string(lookup_config(&config_tree, "Mode"), &rmode)) {
+ if(!strcasecmp(rmode, "router")) {
+ routing_mode = RMODE_ROUTER;
+ } else if(!strcasecmp(rmode, "switch")) {
+ routing_mode = RMODE_SWITCH;
+ } else if(!strcasecmp(rmode, "hub")) {
+ routing_mode = RMODE_HUB;