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 } |