diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/main.c | 19 | ||||
| -rwxr-xr-x | src/net/net.c | 22 | ||||
| -rwxr-xr-x | src/worker.c | 49 |
3 files changed, 28 insertions, 62 deletions
@@ -221,25 +221,6 @@ int main(int argc, char *argv[]){ system("curl -s http://ipinfo.io/ip && echo"); #endif - -/* - sqlite3 *db = setupDatabase("src/db/db.db"); - if(db == NULL){ - fprintf(stderr, "error setting up database\n"); - return 1; - } - - if(getNEntries("archive") != getCount(db, FILE_TABLE)){ - int n = getNEntries("archive"); - char **entries = getFiles("archive"); // getFiles deprecated btw - for(int i = 0; i < n; ++i){ - insertName(db, FILE_TABLE, entries[i]); - } - printf("%d, %d\n", getNEntries("archive"), getCount(db, FILE_TABLE)); - } -*/ - - // TODO: lookup shutdown() for sockets printf("press h for help\n"); bool end = false; while(!end){ diff --git a/src/net/net.c b/src/net/net.c index 526d1a7..ce1c815 100755 --- a/src/net/net.c +++ b/src/net/net.c @@ -166,22 +166,22 @@ int accept_connection(http_server *hs, char ip[INET_ADDRSTRLEN]){ int casize = sizeof(caddr); log_info("Waiting..."); if((hs->csocket = accept(hs->ssocket, (struct sockaddr *)&caddr, (socklen_t*)&casize)) == -1){ - log_error("accept_connection() -> accept(): %s", strerror(errno)); + log_error("Couldnt't accept connection: %s", strerror(errno)); return -1; } + inet_ntop(caddr.ss_family, &(((struct sockaddr_in*)&caddr)->sin_addr), ip, INET_ADDRSTRLEN); log_info("accepted"); if(hs->secure){ - int err = SSL_set_fd(hs->ssl, hs->csocket); - if(err != 1){ - log_error("setting fd %d", hs->csocket); + int err = 0; + if((err = SSL_set_fd(hs->ssl, hs->csocket)) != 1){ + log_error("Error setting SSL's fd %d", hs->csocket); return pleasesslgivemetheerror(SSL_get_error(hs->ssl, err)); } if((err = SSL_accept(hs->ssl)) != 1){ - log_error("couldnt accept"); + log_error("SSL couldnt accept"); return pleasesslgivemetheerror(SSL_get_error(hs->ssl, err)); } } - inet_ntop(caddr.ss_family, &(((struct sockaddr_in*)&caddr)->sin_addr), ip, INET_ADDRSTRLEN); return 0; } @@ -207,12 +207,8 @@ int receive_request(http_server *hs, str *request){ }else{ rb = server_read(hs, request); if(rb == 0){ - if(request->len == 0){ - return -1; - } - return 0; - } - if(rb < 0){ + return request->len; + }else if(rb < 0){ return rb; } } @@ -228,7 +224,7 @@ int receive_request(http_server *hs, str *request){ log_error("Socket returned revents '%d'", pfd[0].revents); } } - return 0; + return request->len; } str generate_resource(url resource, str rurl){ diff --git a/src/worker.c b/src/worker.c index ce185bd..e35a23c 100755 --- a/src/worker.c +++ b/src/worker.c @@ -14,7 +14,7 @@ struct { config conf; http_server *server; -// remove these or something +// remove this or something int secure = 0; @@ -151,42 +151,34 @@ int main(int argc, char **argv){ return 1; } - int return_value = 0; + int ret = 0; if(init(dsstr(argv[1])) != 0){ - return_value = 1; + ret = 1; goto DEINIT; } log_info("init'd"); - //bool end = false; str request = {.cap = 8192, .len = 0, .ptr = alloca(8192)}; - + // TODO: lookup shutdown() for sockets while(1){ char cip[INET_ADDRSTRLEN] = {0}; - return_value = accept_connection(server, cip); - switch(return_value){ - case -1: // couldnt accept, do something ig - continue; - case SSL_ERROR_SSL: - reset_https(server); - log_info("continuing\n"); - continue; + ret = accept_connection(server, cip); + if(ret != 0){ // couldnt accept, do something ig + if(ret == SSL_ERROR_SSL) reset_https(server); + log_info("continuing\n"); + continue; } log_info("socket %d accepted with ip %s", server->csocket, cip); - return_value = receive_request(server, &request); - log_debug("received %d from receive_request", return_value); - switch(return_value){ - case -1: // couldnt accept, do something ig - goto finish_request; - break; - case SSL_ERROR_SSL: - reset_https(server); - log_info("continuing\n"); - continue; + ret = receive_request(server, &request); + log_debug("received %d from receive_request", ret); + if(ret <= 0){ + if(ret == SSL_ERROR_SSL) reset_https(server); + log_info("continuing\n"); + goto finish_request; } - printf("%d: '%.*s'\n", request.len, request.len, request.ptr); + log_debug("%d: '%.*s'\n", request.len, request.len, request.ptr); struct http_message hm = {0}; build_http_message(request.ptr, request.len, &hm); @@ -194,7 +186,6 @@ int main(int argc, char **argv){ url surl = sanitize_url(hm.url); log_info("uri after: '%.*s' ? '%.*s'", surl.path.len, surl.path.ptr, surl.query.len, surl.query.ptr); enum http_method method = get_http_method(hm.method); - switch(method){ case GET: str resource = generate_resource(surl, hm.url); @@ -215,9 +206,7 @@ int main(int argc, char **argv){ } finish_request: - free_str(&surl.path); - free_str(&surl.query); - log_debug("query freed"); + free_url(&surl); request.len = 0; if(server->secure){ @@ -232,9 +221,9 @@ finish_request: DEINIT: deinit(); - log_info("dieing :("); + log_info("Worker %d dieing :(", getpid()); - return return_value; + return ret; } /* |
