#include "system.h"
-#include "splay_tree.h"
#include "conf.h"
#include "connection.h"
#include "control.h"
memcpy(s4req + 2, &c->address.in.sin_port, 2);
memcpy(s4req + 4, &c->address.in.sin_addr, 4);
if(proxyuser)
- strcpy(s4req + 8, proxyuser);
+ memcpy(s4req + 8, proxyuser, strlen(proxyuser));
s4req[sizeof s4req - 1] = 0;
c->tcplen = 8;
return send_meta(c, s4req, sizeof s4req);
minor = myself->connection->protocol_minor;
}
- if(proxytype)
+ if(proxytype && c->outgoing)
if(!send_proxyrequest(c))
return false;
c->allow_request = CONTROL;
c->last_ping_time = time(NULL) + 3600;
- free(c->name);
- c->name = xstrdup("<control>");
+ free(c->name);
+ c->name = xstrdup("<control>");
return send_request(c, "%d %d %d", ACK, TINC_CTL_VERSION_CURRENT, getpid());
}
if(!c->config_tree) {
init_configuration(&c->config_tree);
- if(!read_connection_config(c)) {
- logger(DEBUG_ALWAYS, LOG_ERR, "Peer %s had unknown identity (%s)", c->hostname,
- c->name);
+ if(!read_host_config(c->config_tree, c->name)) {
+ logger(DEBUG_ALWAYS, LOG_ERR, "Peer %s had unknown identity (%s)", c->hostname, c->name);
return false;
}
if(!cipher_open_blowfish_ofb(&c->outcipher))
return false;
-
+
if(!digest_open_sha1(&c->outdigest, -1))
return false;
cipher_get_nid(&c->outcipher),
digest_get_nid(&c->outdigest), c->outmaclength,
c->outcompression, hexkey);
-
+
c->status.encryptout = true;
return result;
}
get_config_int(lookup_config(c->config_tree, "Weight"), &c->estimated_weight);
- return send_request(c, "%d %s %d %x", ACK, myport, c->estimated_weight, (c->options & 0xffffff) | (PROT_MINOR << 24));
+ return send_request(c, "%d %s %d %x", ACK, myport, c->estimated_weight, (c->options & 0xffffff) | (experimental ? (PROT_MINOR << 24) : 0));
}
static void send_everything(connection_t *c) {
- splay_node_t *node, *node2;
- node_t *n;
- subnet_t *s;
- edge_t *e;
-
/* Send all known subnets and edges */
if(tunnelserver) {
- for(node = myself->subnet_tree->head; node; node = node->next) {
- s = node->data;
+ for splay_each(subnet_t, s, myself->subnet_tree)
send_add_subnet(c, s);
- }
return;
}
- for(node = node_tree->head; node; node = node->next) {
- n = node->data;
-
- for(node2 = n->subnet_tree->head; node2; node2 = node2->next) {
- s = node2->data;
+ for splay_each(node_t, n, node_tree) {
+ for splay_each(subnet_t, s, n->subnet_tree)
send_add_subnet(c, s);
- }
- for(node2 = n->edge_tree->head; node2; node2 = node2->next) {
- e = node2->data;
+ for splay_each(edge_t, e, n->edge_tree)
send_add_edge(c, e);
- }
}
}