mirror of
https://github.com/sigmasternchen/Serwer
synced 2025-03-15 07:08:54 +00:00
better logging + clearification
This commit is contained in:
parent
7603e2decc
commit
277a00b1fe
6 changed files with 33 additions and 16 deletions
|
@ -60,8 +60,8 @@ srvoptions_t options = {
|
||||||
.loglevel = LOG_DEBUG // the log level for the logfile
|
.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 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", NULL, "8080", stderr, options);
|
webserver_t server = ws_create("server_name", ANY, "8080", stderr, options);
|
||||||
```
|
```
|
||||||
|
|
||||||
Now you can add you handlers.
|
Now you can add you handlers.
|
||||||
|
|
|
@ -42,10 +42,10 @@ int main(int argc, char** argv) {
|
||||||
.mode = LINEAR,
|
.mode = LINEAR,
|
||||||
.timeout = 30,
|
.timeout = 30,
|
||||||
.maxconnections = 5,
|
.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, hello_handle);
|
||||||
ws_handle_add(&server, test_handle);
|
ws_handle_add(&server, test_handle);
|
||||||
|
|
19
serwer.c
19
serwer.c
|
@ -84,6 +84,7 @@ int ws_listen(webserver_t* server) {
|
||||||
int s;
|
int s;
|
||||||
|
|
||||||
memset(&hints, 0, sizeof(struct addrinfo));
|
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_family = AF_UNSPEC;
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
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");
|
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+");
|
stream_t connection = (stream_t) fdopen(connfd, "a+");
|
||||||
|
|
||||||
setbuf(connection, NULL);
|
setbuf(connection, NULL);
|
||||||
|
@ -188,19 +189,25 @@ void ws_send(int connfd, int code, headers_t headers, int pipefd) {
|
||||||
|
|
||||||
if (pipefd == -1) {
|
if (pipefd == -1) {
|
||||||
fclose(connection);
|
fclose(connection);
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char buffer[BUFFER_SIZE];
|
char buffer[BUFFER_SIZE];
|
||||||
int bs = 0;
|
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);
|
write(connfd, buffer, bs);
|
||||||
|
}
|
||||||
|
|
||||||
fclose(connection);
|
fclose(connection);
|
||||||
|
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ws_simple_status(int connfd, int code) {
|
void ws_simple_status(int connfd, int code) {
|
||||||
ws_send(connfd, code, (headers_t) {
|
(void) ws_send(connfd, code, (headers_t) {
|
||||||
.fields = NULL,
|
.fields = NULL,
|
||||||
.nrfields = 0
|
.nrfields = 0
|
||||||
}, -1);
|
}, -1);
|
||||||
|
@ -208,8 +215,12 @@ void ws_simple_status(int connfd, int code) {
|
||||||
|
|
||||||
|
|
||||||
int ws_run(webserver_t* server) {
|
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) {
|
switch(server->options.mode) {
|
||||||
case LINEAR:
|
case LINEAR:
|
||||||
|
ws_log(server, LOG_DEBUG, "starting linear handler");
|
||||||
return ws_run_linear(server);
|
return ws_run_linear(server);
|
||||||
default:
|
default:
|
||||||
errno = EBADRQC;
|
errno = EBADRQC;
|
||||||
|
|
9
serwer.h
9
serwer.h
|
@ -13,6 +13,13 @@
|
||||||
#define WS_VERSION "0.1"
|
#define WS_VERSION "0.1"
|
||||||
#define WS_NAME "Serwer"
|
#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);
|
headers_t ws_headers_create(void);
|
||||||
void ws_headers_add(headers_t*, const char*, const char*);
|
void ws_headers_add(headers_t*, const char*, const char*);
|
||||||
void ws_headers_convert(headers_t*, 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);
|
void ws_handle_add(webserver_t*, handle_t);
|
||||||
handler_t ws_handler_find(webserver_t*, const char*, const char*);
|
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);
|
void ws_simple_status(int, int);
|
||||||
|
|
||||||
webserver_t ws_create(const char*, const char*, const char*, FILE*, srvoptions_t);
|
webserver_t ws_create(const char*, const char*, const char*, FILE*, srvoptions_t);
|
||||||
|
|
|
@ -138,7 +138,7 @@ int ws_run_linear(webserver_t* server) {
|
||||||
|
|
||||||
// send
|
// send
|
||||||
ws_log(server, LOG_TESTING, "sending response");
|
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
|
// cleanup
|
||||||
ws_log(server, LOG_DEBUG, "cleanup");
|
ws_log(server, LOG_DEBUG, "cleanup");
|
||||||
|
@ -148,6 +148,11 @@ int ws_run_linear(webserver_t* server) {
|
||||||
|
|
||||||
ws_log(server, LOG_TESTING, "done");
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,12 +17,6 @@ typedef FILE* stream_t;
|
||||||
|
|
||||||
typedef int loglevel_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
|
#define ANY NULL
|
||||||
|
|
||||||
typedef enum method {
|
typedef enum method {
|
||||||
|
|
Loading…
Reference in a new issue