aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorame <[email protected]>2025-06-13 20:31:24 -0500
committerame <[email protected]>2025-06-13 20:31:24 -0500
commit2efda12fcae7869bc3cc8782dbcaceae65d251f8 (patch)
tree9f380005409549d69eb0b6cf1f2a661dbb38c03d /src
parentc6714b7212548a55de8ed9e22f4b416f312358b0 (diff)
clean net code and made net docs better
Diffstat (limited to 'src')
-rw-r--r--src/net.c150
-rw-r--r--src/net/common.h4
2 files changed, 8 insertions, 146 deletions
diff --git a/src/net.c b/src/net.c
index 698f2c6..3688cf8 100644
--- a/src/net.c
+++ b/src/net.c
@@ -668,10 +668,6 @@ int l_request(lua_State* L){
_Atomic size_t threads = 0;
void* handle_client(void *_arg){
- //printf("--\n");
- //pthread_mutex_lock(&mutex);
-
- //int read_state = 0;
thread_arg_struct* args = (thread_arg_struct*)_arg;
int client_fd = args->fd;
char* buffer;
@@ -679,58 +675,11 @@ void* handle_client(void *_arg){
int header_eof = -1;
lua_State* L = args->L;
luaL_openlibs(L);
- //sleep(1);
- //create state for this thread
-
- /*
- lua_State* L = luaL_newstate();
-
- luaL_openlibs(L);
- pthread_mutex_lock(&mutex);
- int old_top = lua_gettop(args->L);
- lua_getglobal(args->L, "_G");
-
-//time_start(copy)
- luaI_deepcopy(args->L, L, SKIP_GC);
-
-//time_end("copy", copy)
- lua_settop(args->L, old_top);
- pthread_mutex_unlock(&con_mutex);
-
- //l_pprint(L);
- //lua_setglobal(L, "_G");
- lua_set_global_table(L);
- pthread_mutex_unlock(&mutex);
- */
- //printf("start: %f\n",(double)(clock() - begin) / CLOCKS_PER_SEC);
- //read full request
-//time_start(recv)
char* header = NULL;
int64_t bite = recv_header(client_fd, &buffer, &header);
- header_eof = header - buffer;
- /*printf("%x = %p - %p\n", header_eof, header, buffer);
-
- if(bite == -2) net_error(client_fd, 431);
- printf("'");
- for(int i = bite - 20; i != bite; i++){
- putchar(buffer[i]);
- }
- printf("'\n");*/
- /*
-
- return NULL;
- int64_t bytes_received = recv_full_buffer(client_fd, &buffer, &header_eof, &read_state);
-
-
- for(int i = 0; i != header_eof; i++)
- putchar(buffer[i]);
- putchar('\n');
-
- //printf("hi %li:%i\n", bytes_received,header_eof);
- if(bytes_received == -2) net_error(client_fd, 431);
- */
+ header_eof = header - buffer;
if(bite > 0){
parray_t* table;
@@ -759,23 +708,8 @@ void* handle_client(void *_arg){
str* aa = str_init(portc);
str_push(aa, sk->c);
- //parray_t* v = parray_find(paths, aa->c);
larray_t* params = larray_init();
parray_t* v = route_match(paths, aa->c, &params);
-
- /*for(int i = 0; i != params->len; i++){
- int id = larray_geti(params, i);
- parray_t* par = params->arr[id].value;
- printf("%i\n", i);
- for(int x = 0; x != par->len; x++){
- printf("\t%s : %s\n",par->P[x].key->c, (char*)par->P[x].value);
- }
-
- parray_clear(par, STR);
-
- }
-
- larray_clear(params);*/
if(sT != NULL)
rolling_file_parse(L, &files_idx, &body_idx, header + 4, sT, bite - header_eof - 4, file_cont);
@@ -788,7 +722,6 @@ void* handle_client(void *_arg){
int res_idx = lua_gettop(L);
//handle cookies
- //TODO: enable and test with valgrind
if(sC != NULL){
lua_newtable(L);
int lcookie = lua_gettop(L);
@@ -796,7 +729,6 @@ void* handle_client(void *_arg){
parray_t* cookie = parray_init();
gen_parse(sC->c, sC->len, &cookie);
for(int i = 0; i != cookie->len; i++){
- //printf("%s %s\n", cookie->P[i].key->c, ((str*)cookie->P[i].value)->c);
luaI_tsetsl(L, lcookie, cookie->P[i].key->c, ((str*)cookie->P[i].value)->c, ((str*)cookie->P[i].value)->len);
}
luaI_tsetv(L, req_idx, "cookies", lcookie);
@@ -804,26 +736,14 @@ void* handle_client(void *_arg){
parray_remove(table, "Cookie", NONE);
}
- /*
- //handle files
- if(sT != NULL && bytes_received > 0){
- int pf = file_parse(L, buffer + header_eof, sT, bytes_received - header_eof);
-
- if(pf >= 0){
- luaI_tsetv(L, req_idx, "files", pf);
- parray_set(table, "Body", (void*)str_init(""));
- }
- }*/
+
lua_pushlightuserdata(L, file_cont);
int ld = lua_gettop(L);
luaI_tsetv(L, req_idx, "_data", ld);
luaI_tsetv(L, req_idx, "files", files_idx);
- //printf("cookie and file: %f\n",(double)(clock() - begin) / CLOCKS_PER_SEC);
- //parray_set(table, "Body", (void*)str_initl(buffer + header_eof + 4, buffer_len - header_eof - 4));
- //luaI_tsetsl(L, req_idx, "Body", buffer + header_eof + 4, bytes_received - header_eof - 4);
luaI_tsetv(L, req_idx, "Body", body_idx);
- //printf("%s\n",buffer);
+
for(int i = 0; i != table->len; i+=1){
//printf("'%s' :: '%s'\n",table[i]->c, table[i+1]->c);
luaI_tsets(L, req_idx, table->P[i].key->c, ((str*)table->P[i].value)->c);
@@ -838,7 +758,6 @@ void* handle_client(void *_arg){
luaI_tseti(L, req_idx, "_bytes", bite - header_eof - 4);
luaI_tseti(L, req_idx, "client_fd", client_fd);
luaI_tsetcf(L, req_idx, "roll", l_roll);
- //luaI_tsetcf(L, req_idx, "continue", l_continue);
//functions
luaI_tsetcf(L, res_idx, "send", l_send);
@@ -891,7 +810,6 @@ void* handle_client(void *_arg){
int func = lua_gettop(L);
lua_assign_upvalues(L, func);
- //lua_pushvalue(L, func); // push function call
lua_pushvalue(L, res_idx); //push methods related to dealing with the request
lua_pushvalue(L, req_idx); //push info about the request
@@ -924,15 +842,6 @@ net_end:
}
- void* awa;
- /*if((awa = parray_get(file_cont, "_current")) != NULL) str_free(awa);
- if((awa = parray_get(file_cont, "_boundary")) != NULL) str_free(awa);
- if((awa = parray_get(file_cont, "_boundary_id")) != NULL) str_free(awa);
- if((awa = parray_get(file_cont, "_table_idx")) != NULL) free(awa);
- if((awa = parray_get(file_cont, "_status")) != NULL) free(awa);
- if((awa = parray_get(file_cont, "_dash_count")) != NULL) free(awa);
-
- parray_clear(file_cont, NONE);*/
if(file_cont->boundary != NULL) str_free(file_cont->current);
if(file_cont->boundary != NULL) str_free(file_cont->boundary);
if(file_cont->boundary_id != NULL) str_free(file_cont->boundary_id);
@@ -941,19 +850,17 @@ net_end:
}
parray_clear(table, STR);
}
+
if(client_fd != -1){
shutdown(client_fd, 2);
closesocket(client_fd);
}
+
free(args);
free(buffer);
lua_close(L);
- //printf("closed: %f\n",(double)(clock() - begin) / CLOCKS_PER_SEC);
- pthread_mutex_lock(&mutex);
+
threads--;
- pthread_mutex_unlock(&mutex);
- //printf("out\n");
-//time_end("full", full)
return NULL;
}
@@ -994,12 +901,6 @@ int start_serv(lua_State* L, int port){
if(listen(server_fd, max_con) < 0)
p_fatal("failed to listen\n");
- if (pthread_mutex_init(&mutex, NULL) != 0)
- p_fatal("mutex init failed\n");
-
- if (pthread_mutex_init(&con_mutex, NULL) != 0)
- p_fatal("con_mutex init failed\n");
-
for(;;){
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
@@ -1017,7 +918,6 @@ int start_serv(lua_State* L, int port){
continue;
}
- //open a state to call shit, should be somewhat thread safe
thread_arg_struct* args = malloc(sizeof * args);
args->fd = *client_fd;
@@ -1025,36 +925,19 @@ int start_serv(lua_State* L, int port){
args->cli = client_addr;
args->L = luaL_newstate();
- //luaL_openlibs(args->L);
-
- pthread_mutex_lock(&mutex);
int old_top = lua_gettop(L);
lua_getglobal(L, "_G");
- //time_start(copy)
- luaI_copyvars(L, args->L);
-
- //time_end("copy", copy)
+ luaI_copyvars(L, args->L);
lua_settop(L, old_top);
-
- //l_pprint(L);
- //lua_setglobal(L, "_G");
lua_set_global_table(args->L);
- pthread_mutex_unlock(&mutex);
- pthread_mutex_lock(&mutex);
threads++;
- pthread_mutex_unlock(&mutex);
-
- //pthread_mutex_lock(&con_mutex);
//send request to handle_client()
pthread_t thread_id;
pthread_create(&thread_id, NULL, handle_client, (void*)args);
pthread_detach(thread_id);
-
- //double lock, wait for thread to unlock it
- //pthread_mutex_lock(&con_mutex);
//handle_client((void*)args);
free(client_fd);
@@ -1120,16 +1003,6 @@ gen_reqs(TRACE);
gen_reqs(PATCH);
gen_reqs(all); //non standard lol, like expressjs 'use' keyword :3
-int l_lock(lua_State* L){
- pthread_mutex_lock(&lua_mutex);
- return 0;
-}
-
-int l_unlock(lua_State* L){
- pthread_mutex_unlock(&lua_mutex);
- return 0;
-}
-
int l_listen(lua_State* L){
if(lua_gettop(L) != 2) {
@@ -1153,14 +1026,7 @@ int l_listen(lua_State* L){
luaI_tsetcf(L, mt, "TRACE", l_TRACEq);
luaI_tsetcf(L, mt, "PATCH", l_PATCHq);
luaI_tsetcf(L, mt, "all", l_allq);
- lua_pushstring(L, "lock");
- lua_pushcfunction(L, l_lock);
- lua_settable(L, -3);
-
- lua_pushstring(L, "unlock");
- lua_pushcfunction(L, l_unlock);
- lua_settable(L, -3);
-
+
lua_pushstring(L, "port");
lua_pushvalue(L, 2);
lua_settable(L, -3);
diff --git a/src/net/common.h b/src/net/common.h
index 828cb04..fbafb58 100644
--- a/src/net/common.h
+++ b/src/net/common.h
@@ -56,10 +56,6 @@ struct sarray_t {
int len;
};
-static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t con_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t lua_mutex = PTHREAD_MUTEX_INITIALIZER;
-
extern map_t* mime_type;
#endif