#include "random.h"
#include "compression.h"
#include "proxy.h"
+#include "address_cache.h"
#include "ed25519/sha512.h"
#include "keys.h"
case PROXY_EXEC:
return true;
+ case PROXY_NONE:
default:
logger(DEBUG_ALWAYS, LOG_ERR, "Unknown proxy type");
return false;
int minor = 0;
if(experimental) {
- if(c->outgoing && !read_ecdsa_public_key(&c->ecdsa, &c->config_tree, c->name)) {
+ if(c->outgoing && !ecdsa_active(c->ecdsa) && !(c->ecdsa = read_ecdsa_public_key(&c->config_tree, c->name))) {
minor = 1;
} else {
minor = myself->connection->protocol_minor;
logger(DEBUG_CONNECTIONS, LOG_INFO, "Key successfully received from %s (%s)", c->name, c->hostname);
+ if(!c->node) {
+ c->node = lookup_node(c->name);
+ }
+
+ if(!c->node) {
+ c->node = new_node(c->name);
+ c->node->connection = c;
+ node_add(c->node);
+ }
+
+ if(!c->node->address_cache) {
+ c->node->address_cache = open_address_cache(c->node);
+ }
+
+ add_recent_address(c->node->address_cache, &c->address);
+
// Call invitation-accepted script
environment_t env;
char *address, *port;
return false;
}
- if(experimental) {
- read_ecdsa_public_key(&c->ecdsa, &c->config_tree, c->name);
+ if(experimental && !ecdsa_active(c->ecdsa)) {
+ c->ecdsa = read_ecdsa_public_key(&c->config_tree, c->name);
}
/* Ignore failures if no key known yet */
return false;
}
- if(ecdsa_active(c->ecdsa) || read_ecdsa_public_key(&c->ecdsa, &c->config_tree, c->name)) {
+ if(ecdsa_active(c->ecdsa) || (c->ecdsa = read_ecdsa_public_key(&c->config_tree, c->name))) {
char *knownkey = ecdsa_get_base64_public_key(c->ecdsa);
bool different = strcmp(knownkey, pubkey);
free(knownkey);
n = lookup_node(c->name);
if(!n) {
- n = new_node();
- n->name = xstrdup(c->name);
+ n = new_node(c->name);
node_add(n);
} else {
if(n->connection) {