X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fcontrol.c;h=57e0ce09816061e394cb17b53ec7b857c6898435;hb=d82fcc88f355e3c8144478a860dfae0b299004a9;hp=19ac37a4dd23857200ccd4ca84e91314086afc81;hpb=6eaefb4dbce240334e35f67d9f3db5d4f44e49c9;p=tinc diff --git a/src/control.c b/src/control.c index 19ac37a4..57e0ce09 100644 --- a/src/control.c +++ b/src/control.c @@ -38,6 +38,7 @@ static void handle_control_data(struct bufferevent *event, void *data) { size_t size; tinc_ctl_request_t res; struct evbuffer *res_data = NULL; + void *req_data; if(EVBUFFER_LENGTH(event->input) < sizeof(tinc_ctl_request_t)) return; @@ -47,6 +48,7 @@ static void handle_control_data(struct bufferevent *event, void *data) { if(EVBUFFER_LENGTH(event->input) < req.length) return; + req_data = EVBUFFER_DATA(event->input) + sizeof(tinc_ctl_request_t); if(req.length < sizeof(tinc_ctl_request_t)) goto failure; @@ -97,6 +99,43 @@ static void handle_control_data(struct bufferevent *event, void *data) { goto respond; } + if(req.type == REQ_PURGE) { + logger(LOG_NOTICE, _("Got '%s' command"), "purge"); + purge(); + goto respond; + } + + if(req.type == REQ_SET_DEBUG) { + debug_t new_debug_level; + + logger(LOG_NOTICE, _("Got '%s' command"), "debug"); + if(req.length != sizeof(req) + sizeof debug_level) + res.res_errno = EINVAL; + else { + memcpy(&new_debug_level, req_data, sizeof(debug_t)); + logger(LOG_NOTICE, _("Changing debug level from %d to %d"), + debug_level, new_debug_level); + if(evbuffer_add_printf(res_data, + _("Changing debug level from %d to %d\n"), + debug_level, new_debug_level) == -1) + res.res_errno = errno; + debug_level = new_debug_level; + } + goto respond; + } + + if(req.type == REQ_RETRY) { + logger(LOG_NOTICE, _("Got '%s' command"), "retry"); + retry(); + goto respond; + } + + if(req.type == REQ_RELOAD) { + logger(LOG_NOTICE, _("Got '%s' command"), "reload"); + res.res_errno = reload_configuration(); + goto respond; + } + logger(LOG_DEBUG, _("Malformed control command received")); res.res_errno = EINVAL;