+ if(!n)
+ {
+ n = new_node();
+ n->name = xstrdup(c->name);
+ n->address = c->address;
+ n->hostname = xstrdup(c->hostname);
+ n->port = port;
+
+ /* FIXME: Also check if no other tinc daemon uses the same IP and port for UDP traffic */
+
+ node_add(n);
+ }
+ else
+ {
+ if(n->connection)
+ {
+ /* Oh dear, we already have a connection to this node. */
+ syslog(LOG_DEBUG, _("Established a second connection with %s (%s), closing old connection"), n->name, n->hostname);
+ terminate_connection(n->connection, 0);
+ }
+
+ /* FIXME: check if information in existing node matches that of the other end of this connection */
+ }
+
+ n->connection = c;
+ c->node = n;
+
+ /* Check some options
+
+ if((cfg = get_config_val(c->config, config_indirectdata)))
+ {
+ if(cfg->data.val == stupid_true)
+ c->options |= OPTION_INDIRECT;
+ }
+
+ if((cfg = get_config_val(c->config, config_tcponly)))
+ {
+ if(cfg->data.val == stupid_true)
+ c->options |= OPTION_TCPONLY;
+ }
+
+ if((myself->options | c->options) & OPTION_INDIRECT)
+ c->via = myself;
+ else
+ c->via = c;
+
+ */
+
+ /* Create an edge_t for this connection */
+
+ c->edge = new_edge();
+
+ c->edge->from = myself;
+ c->edge->to = n;
+ c->edge->weight = (weight + c->estimated_weight) / 2;
+ c->edge->connection = c;
+
+ edge_add(c->edge);
+
+ /* Activate this connection */
+
+ c->allow_request = ALL;
+ c->status.active = 1;
+ c->node->cipher = EVP_bf_cbc();
+ c->node->keylength = c->node->cipher->key_len + c->node->cipher->iv_len;
+
+ if(debug_lvl >= DEBUG_CONNECTIONS)
+ syslog(LOG_NOTICE, _("Connection with %s (%s) activated"), c->name, c->hostname);
+
+cp
+ /* Send him our subnets */