better logging + clearification

This commit is contained in:
overflowerror 2017-01-02 23:37:57 +01:00
parent 7603e2decc
commit 277a00b1fe
6 changed files with 33 additions and 16 deletions

View file

@ -60,8 +60,8 @@ srvoptions_t options = {
.loglevel = LOG_DEBUG // the log level for the logfile
};
// webserver_t ws_create(const char* name, const char* host (can be NULL for default), const char* port, FILE* logfile, srvoptions_t options);
webserver_t server = ws_create("server_name", NULL, "8080", stderr, options);
// webserver_t ws_create(const char* name, const char* host (can be ANY for any), const char* port, FILE* logfile, srvoptions_t options);
webserver_t server = ws_create("server_name", ANY, "8080", stderr, options);
```
Now you can add you handlers.

View file

@ -42,10 +42,10 @@ int main(int argc, char** argv) {
.mode = LINEAR,
.timeout = 30,
.maxconnections = 5,
.loglevel = LOG_DEBUG
.loglevel = LOG_WARN
};
webserver_t server = ws_create("test_server", NULL , "8080", stderr, options);
webserver_t server = ws_create("test_server", ANY , "8080", stderr, options);
ws_handle_add(&server, hello_handle);
ws_handle_add(&server, test_handle);

View file

@ -84,6 +84,7 @@ int ws_listen(webserver_t* server) {
int s;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_flags = AI_PASSIVE; // host = NULL => IP wildcard; see getaddrinfo(2)
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
@ -164,7 +165,7 @@ void ws_log(webserver_t* server, loglevel_t loglevel, const char* format, ...) {
fprintf(server->logfile, "\n");
}
void ws_send(int connfd, int code, headers_t headers, int pipefd) {
size_t ws_send(int connfd, int code, headers_t headers, int pipefd) {
stream_t connection = (stream_t) fdopen(connfd, "a+");
setbuf(connection, NULL);
@ -188,19 +189,25 @@ void ws_send(int connfd, int code, headers_t headers, int pipefd) {
if (pipefd == -1) {
fclose(connection);
return;
return 0;
}
char buffer[BUFFER_SIZE];
int bs = 0;
while ((bs = read(pipefd, buffer, BUFFER_SIZE)) > 0)
size_t size = 0;
while ((bs = read(pipefd, buffer, BUFFER_SIZE)) > 0) {
size += bs;
write(connfd, buffer, bs);
}
fclose(connection);
return size;
}
void ws_simple_status(int connfd, int code) {
ws_send(connfd, code, (headers_t) {
(void) ws_send(connfd, code, (headers_t) {
.fields = NULL,
.nrfields = 0
}, -1);
@ -208,8 +215,12 @@ void ws_simple_status(int connfd, int code) {
int ws_run(webserver_t* server) {
ws_log(server, LOG_MESSAGE, "server \"%s\" started on %s:%s", server->name,
server->host == NULL ? "0.0.0.0" : server->host, server->port);
switch(server->options.mode) {
case LINEAR:
ws_log(server, LOG_DEBUG, "starting linear handler");
return ws_run_linear(server);
default:
errno = EBADRQC;

View file

@ -13,6 +13,13 @@
#define WS_VERSION "0.1"
#define WS_NAME "Serwer"
#define LOG_TESTING 11
#define LOG_DEBUG 10
#define LOG_VERBOSE 5
#define LOG_WARN 2
#define LOG_MESSAGE 1
#define LOG_ERROR 0
headers_t ws_headers_create(void);
void ws_headers_add(headers_t*, const char*, const char*);
void ws_headers_convert(headers_t*, char*);
@ -21,7 +28,7 @@ void ws_headers_free(headers_t*);
void ws_handle_add(webserver_t*, handle_t);
handler_t ws_handler_find(webserver_t*, const char*, const char*);
void ws_send(int, int, headers_t, int);
size_t ws_send(int, int, headers_t, int);
void ws_simple_status(int, int);
webserver_t ws_create(const char*, const char*, const char*, FILE*, srvoptions_t);

View file

@ -138,7 +138,7 @@ int ws_run_linear(webserver_t* server) {
// send
ws_log(server, LOG_TESTING, "sending response");
ws_send(connfd, code, responseHeaders, pipefd[0]);
size_t response_size = ws_send(connfd, code, responseHeaders, pipefd[0]);
// cleanup
ws_log(server, LOG_DEBUG, "cleanup");
@ -148,6 +148,11 @@ int ws_run_linear(webserver_t* server) {
ws_log(server, LOG_TESTING, "done");
if (s == 0)
ws_log(server, LOG_MESSAGE, "%s:%s - %s %s @ %s, %i, %i bytes", phost, service, ws_method_string(method), path, host, code, response_size);
else
ws_log(server, LOG_MESSAGE, "-:- - %s %s @ %s, %i, %i bytes", ws_method_string(method), path, host, code, response_size);
break;
}

View file

@ -17,12 +17,6 @@ typedef FILE* stream_t;
typedef int loglevel_t;
#define LOG_TESTING 11
#define LOG_DEBUG 10
#define LOG_VERBOSE 5
#define LOG_WARN 2
#define LOG_ERROR 0
#define ANY NULL
typedef enum method {