src/server/daemon/srvctrl.c

branch
srvctrl
changeset 167
4be7dd2b75b9
parent 166
c07122f66676
child 173
63b8d52db390
equal deleted inserted replaced
166:c07122f66676 167:4be7dd2b75b9
27 */ 27 */
28 28
29 #include <stdio.h> 29 #include <stdio.h>
30 #include <stdlib.h> 30 #include <stdlib.h>
31 31
32 #include "log.h"
32 #include "webserver.h" 33 #include "webserver.h"
33 34
34 #include "../util/systhr.h" 35 #include "../util/systhr.h"
35 36
36 #include "../../ucx/utils.h" 37 #include "../../ucx/utils.h"
138 client->fd = fd; 139 client->fd = fd;
139 return client; 140 return client;
140 } 141 }
141 142
142 void* srvctrl_thread(SrvCtrlClient *client) { 143 void* srvctrl_thread(SrvCtrlClient *client) {
144 LogDup log;
145 log.write = (log_writefunc)srvctrl_log;
146 log.cookie = client;
147 log_add_logdup(&log);
148
143 char buf[64]; 149 char buf[64];
144 UcxBuffer *line = ucx_buffer_new(NULL, 32, UCX_BUFFER_AUTOEXTEND); 150 UcxBuffer *line = ucx_buffer_new(NULL, 32, UCX_BUFFER_AUTOEXTEND);
145 151
146 ssize_t r; 152 ssize_t r;
147 WSBool br = FALSE; 153 WSBool br = FALSE;
161 if(br) { 167 if(br) {
162 break; 168 break;
163 } 169 }
164 } 170 }
165 171
172 log_remove_logdup(&log);
173
166 ucx_buffer_free(line); 174 ucx_buffer_free(line);
167 close(client->fd); 175 close(client->fd);
168 free(client); 176 free(client);
169 177
170 return NULL; 178 return NULL;
171 } 179 }
172 180
173 int srvctrl_handle_cmd(SrvCtrlClient *client, sstr_t cmd) { 181 int srvctrl_handle_cmd(SrvCtrlClient *client, sstr_t cmd) {
174 if(!sstrcmp(cmd, S("reconfig"))) { 182 if(!sstrcmp(cmd, S("reconfig"))) {
175 write(client->fd, "reconfig\n", 9); 183 log_ereport(LOG_INFORM, "reconfigure server");
176
177 if(webserver_reconfig()) { 184 if(webserver_reconfig()) {
178 log_ereport(LOG_FAILURE, "cannot reload config"); 185 log_ereport(LOG_FAILURE, "cannot reload config");
179 } else { 186 } else {
180 log_ereport(LOG_INFORM, "reconfig: success"); 187 log_ereport(LOG_INFORM, "reconfig: success");
181 } 188 }
188 (int)cmd.length, 195 (int)cmd.length,
189 cmd.ptr); 196 cmd.ptr);
190 } 197 }
191 return 1; 198 return 1;
192 } 199 }
200
201 void srvctrl_log(SrvCtrlClient *client, char *msg, size_t len) {
202 size_t pos = 0;
203 ssize_t w = 0;
204 while(pos < len) {
205 w = write(client->fd, msg + pos, len - pos);
206 if(w <= 0) {
207 break;
208 }
209 pos += w;
210 }
211 }

mercurial