From 2efda12fcae7869bc3cc8782dbcaceae65d251f8 Mon Sep 17 00:00:00 2001 From: ame Date: Fri, 13 Jun 2025 20:31:24 -0500 Subject: clean net code and made net docs better --- src/net.c | 150 ++++---------------------------------------------------------- 1 file changed, 8 insertions(+), 142 deletions(-) (limited to 'src/net.c') diff --git a/src/net.c b/src/net.c index 698f2c6..3688cf8 100644 --- a/src/net.c +++ b/src/net.c @@ -668,69 +668,18 @@ 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; char dummy[2] = {0, 0}; 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, ¶ms); - - /*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); -- cgit v1.2.3