return false;
}
-static bool read_ecdsa_private_key(meshlink_handle_t *mesh) {
+bool read_ecdsa_private_key(meshlink_handle_t *mesh) {
FILE *fp;
char filename[PATH_MAX];
return mesh->invitation_key;
}
-static void load_all_nodes(meshlink_handle_t *mesh) {
+void load_all_nodes(meshlink_handle_t *mesh) {
DIR *dir;
struct dirent *ent;
char dname[PATH_MAX];
if(!check_id(ent->d_name))
continue;
- node_t *n = lookup_node(ent->d_name);
+ node_t *n = lookup_node(mesh, ent->d_name);
if(n)
continue;
n = new_node();
n->name = xstrdup(ent->d_name);
- node_add(n);
+ node_add(mesh, n);
}
closedir(dir);
if(tcp_fd < 0)
continue;
- int udp_fd = setup_vpn_in_socket((sockaddr_t *) aip->ai_addr);
+ int udp_fd = setup_vpn_in_socket(mesh, (sockaddr_t *) aip->ai_addr);
if(tcp_fd < 0) {
close(tcp_fd);
Configure node_t mesh->self and set up the local sockets (listen only)
*/
bool setup_myself(meshlink_handle_t *mesh) {
- char *name, *hostname, *cipher, *digest, *type;
+ char *name;
char *address = NULL;
- bool port_specified = false;
if(!(name = get_name(mesh))) {
- logger(DEBUG_ALWAYS, LOG_ERR, "Name for tinc daemon required!");
+ logger(DEBUG_ALWAYS, LOG_ERR, "Name for MeshLink instance required!");
return false;
}
if(!get_config_string(lookup_config(mesh->config, "Port"), &mesh->myport))
mesh->myport = xstrdup("655");
- else
- port_specified = true;
mesh->self->connection->options = 0;
mesh->self->connection->protocol_major = PROT_MAJOR;
mesh->self->via = mesh->self;
mesh->self->status.reachable = true;
mesh->self->last_state_change = mesh->loop.now.tv_sec;
- node_add(mesh->self);
+ node_add(mesh, mesh->self);
- graph();
+ graph(mesh);
if(autoconnect)
load_all_nodes(mesh);
/* Open sockets */
mesh->listen_sockets = 0;
- int cfgs = 0;
if(!add_listen_address(mesh, address, NULL))
return false;
initialize network
*/
bool setup_network(meshlink_handle_t *mesh) {
- init_connections();
- init_nodes();
- init_edges();
- init_requests();
+ init_connections(mesh);
+ init_nodes(mesh);
+ init_edges(mesh);
+ init_requests(mesh);
mesh->pinginterval = 60;
mesh->pingtimeout = 5;
/*
close all open network connections
*/
-void close_network_connections(void) {
+void close_network_connections(meshlink_handle_t *mesh) {
for(list_node_t *node = mesh->connections->head, *next; node; node = next) {
next = node->next;
connection_t *c = node->data;
c->outgoing = NULL;
- terminate_connection(c, false);
+ terminate_connection(mesh, c, false);
}
if(mesh->outgoings)
list_delete_list(mesh->outgoings);
if(mesh->self && mesh->self->connection) {
- terminate_connection(mesh->self->connection, false);
+ terminate_connection(mesh, mesh->self->connection, false);
free_connection(mesh->self->connection);
}
close(mesh->listen_socket[i].udp.fd);
}
- exit_requests();
- exit_edges();
- exit_nodes();
- exit_connections();
+ exit_requests(mesh);
+ exit_edges(mesh);
+ exit_nodes(mesh);
+ exit_connections(mesh);
if(mesh->myport) free(mesh->myport);