]> git.meshlink.io Git - meshlink/blobdiff - src/control.c
Alter debugging levels through control socket
[meshlink] / src / control.c
index 2c5d4be847eba078069795c134f4cce929ff2d64..3e57f5512f4f759b1043ea23d0634232b7c0cdef 100644 (file)
@@ -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;
@@ -103,6 +105,25 @@ static void handle_control_data(struct bufferevent *event, void *data) {
                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;
+       }
+
        logger(LOG_DEBUG, _("Malformed control command received"));
        res.res_errno = EINVAL;