/*
control.c -- Control socket handling.
- Copyright (C) 2012 Guus Sliepen <guus@tinc-vpn.org>
+ Copyright (C) 2013 Guus Sliepen <guus@tinc-vpn.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "graph.h"
#include "logger.h"
#include "meta.h"
+#include "names.h"
#include "net.h"
#include "netutl.h"
#include "protocol.h"
#include "route.h"
-#include "splay_tree.h"
#include "utils.h"
#include "xalloc.h"
char controlcookie[65];
-extern char *pidfilename;
static bool control_return(connection_t *c, int type, int error) {
return send_request(c, "%d %d %d", CONTROL, type, error);
return control_return(c, type, 0);
}
-bool control_h(connection_t *c, char *request) {
+bool control_h(connection_t *c, const char *request) {
int type;
if(!c->status.control || c->allow_request != CONTROL) {
switch (type) {
case REQ_STOP:
- event_loopexit(NULL);
+ event_exit();
return control_ok(c, REQ_STOP);
case REQ_DUMP_NODES:
return dump_nodes(c);
-
+
case REQ_DUMP_EDGES:
return dump_edges(c);
case REQ_DISCONNECT: {
char name[MAX_STRING_SIZE];
- connection_t *other;
- splay_node_t *node, *next;
bool found = false;
if(sscanf(request, "%*d %*d " MAX_STRING, name) != 1)
return control_return(c, REQ_DISCONNECT, -1);
- for(node = connection_tree->head; node; node = next) {
- next = node->next;
- other = node->data;
+ for list_each(connection_t, other, connection_list) {
if(strcmp(other->name, name))
continue;
terminate_connection(other, other->status.active);
// Make sure we have a valid address, and map 0.0.0.0 and :: to 127.0.0.1 and ::1.
- if(getsockname(listen_socket[0].tcp, (struct sockaddr *)&sa, &len)) {
+ if(getsockname(listen_socket[0].tcp.fd, (struct sockaddr *)&sa, &len)) {
xasprintf(&localhost, "127.0.0.1 port %d", myport);
} else {
if(sa.sa.sa_family == AF_INET) {