src/server/daemon/srvctrl.c

branch
srvctrl
changeset 167
4be7dd2b75b9
parent 166
c07122f66676
child 173
63b8d52db390
--- a/src/server/daemon/srvctrl.c	Sun Jan 29 09:04:06 2017 +0100
+++ b/src/server/daemon/srvctrl.c	Sun Jan 29 09:40:04 2017 +0100
@@ -29,6 +29,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "log.h"
 #include "webserver.h"
 
 #include "../util/systhr.h"
@@ -140,6 +141,11 @@
 }
 
 void* srvctrl_thread(SrvCtrlClient *client) {
+    LogDup log;
+    log.write = (log_writefunc)srvctrl_log;
+    log.cookie = client;
+    log_add_logdup(&log);
+    
     char buf[64];
     UcxBuffer *line = ucx_buffer_new(NULL, 32, UCX_BUFFER_AUTOEXTEND);
     
@@ -163,6 +169,8 @@
         }
     }
     
+    log_remove_logdup(&log);
+    
     ucx_buffer_free(line);
     close(client->fd);
     free(client);
@@ -172,8 +180,7 @@
 
 int srvctrl_handle_cmd(SrvCtrlClient *client, sstr_t cmd) {
     if(!sstrcmp(cmd, S("reconfig"))) {
-        write(client->fd, "reconfig\n", 9);
-        
+        log_ereport(LOG_INFORM, "reconfigure server");
         if(webserver_reconfig()) {
             log_ereport(LOG_FAILURE, "cannot reload config");
         } else {
@@ -190,3 +197,15 @@
     }
     return 1;
 }
+
+void srvctrl_log(SrvCtrlClient *client, char *msg, size_t len) {
+    size_t pos = 0;
+    ssize_t w = 0;
+    while(pos < len) {
+        w = write(client->fd, msg + pos, len - pos);
+        if(w <= 0) {
+            break;
+        }
+        pos += w;
+    }
+}

mercurial