summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/main.c19
-rwxr-xr-xsrc/net/net.c22
-rwxr-xr-xsrc/worker.c49
3 files changed, 28 insertions, 62 deletions
diff --git a/src/main.c b/src/main.c
index 916b4cb..ff2b2b2 100755
--- a/src/main.c
+++ b/src/main.c
@@ -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;
}
/*