aboutsummaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authoramelia squires <[email protected]>2024-09-11 00:02:08 -0500
committeramelia squires <[email protected]>2024-09-11 00:02:08 -0500
commitbd405bc6f3104ba7c6d41c42561975d73fd81134 (patch)
tree25f1642859355d7cbe82a8b57549c2d2f52f8dbe /src/net
parenteda53f915dc319cec7a4fe680734db87a113fe5e (diff)
add res:stop
Diffstat (limited to 'src/net')
-rw-r--r--src/net/lua.c10
-rw-r--r--src/net/lua.h1
-rw-r--r--src/net/luai.c6
-rw-r--r--src/net/util.c128
-rw-r--r--src/net/util.h4
5 files changed, 80 insertions, 69 deletions
diff --git a/src/net/lua.c b/src/net/lua.c
index 2995326..dd73db2 100644
--- a/src/net/lua.c
+++ b/src/net/lua.c
@@ -104,6 +104,16 @@ int l_close(lua_State* L){
return 0;
}
+int l_stop(lua_State* L){
+ int res_idx = 1;
+
+ lua_pushstring(L, "_stop");
+ lua_pushboolean(L, 1);
+ lua_settable(L, res_idx);
+
+ return 0;
+}
+
int l_roll(lua_State* L){
int alen;
if(lua_gettop(L) > 2) {
diff --git a/src/net/lua.h b/src/net/lua.h
index 794e45f..19f7262 100644
--- a/src/net/lua.h
+++ b/src/net/lua.h
@@ -3,6 +3,7 @@
int l_write(lua_State* L);
int l_send(lua_State* L);
int l_close(lua_State* L);
+int l_stop(lua_State* L);
int l_roll(lua_State* L);
#define bsize 512
int l_sendfile(lua_State* L);
diff --git a/src/net/luai.c b/src/net/luai.c
index ea93285..1929818 100644
--- a/src/net/luai.c
+++ b/src/net/luai.c
@@ -1,5 +1,6 @@
#include "luai.h"
#include "common.h"
+#include "util.h"
void i_write_header(lua_State* L, int header_top, str** _resp, char* content, size_t len){
str* resp;
@@ -24,9 +25,8 @@ void i_write_header(lua_State* L, int header_top, str** _resp, char* content, si
lua_gettable(L, header_top);
int code = luaL_checkinteger(L, -1);
- char code_det[50] = {0};
- http_code(code, code_det);
- http_build(&resp, code, code_det, header_vs->c, content, len);
+ const char* code_det = http_code(code);
+ http_build(&resp, code, code_det, header_vs->c, content, len);
str_free(header_vs);
*_resp = resp;
diff --git a/src/net/util.c b/src/net/util.c
index 1fec987..2dd9a7f 100644
--- a/src/net/util.c
+++ b/src/net/util.c
@@ -128,7 +128,7 @@ int parse_header(char* buffer, int header_eof, parray_t** _table){
* @brief contructs an http request
*
*/
-void http_build(str** _dest, int code, char* code_det, char* header_vs, char* content, size_t len){
+void http_build(str** _dest, int code, const char* code_det, char* header_vs, char* content, size_t len){
char* dest = malloc(HTTP_BUFFER_SIZE);
memset(dest, 0, HTTP_BUFFER_SIZE);
@@ -147,70 +147,70 @@ void http_build(str** _dest, int code, char* code_det, char* header_vs, char* co
* @brief gets a string representation of a http code
*
*/
-void http_code(int code, char* code_det){
+const char* http_code(int code){
switch(code){
- case 100: sprintf(code_det,"Continue"); break;
- case 101: sprintf(code_det,"Switching Protocols"); break;
- case 102: sprintf(code_det,"Processing"); break;
- case 103: sprintf(code_det,"Early Hints"); break;
- case 200: sprintf(code_det,"OK"); break;
- case 201: sprintf(code_det,"Created"); break;
- case 202: sprintf(code_det,"Accepted"); break;
- case 203: sprintf(code_det,"Non-Authoritative Information"); break;
- case 204: sprintf(code_det,"No Content"); break;
- case 205: sprintf(code_det,"Reset Content"); break;
- case 206: sprintf(code_det,"Partial Content"); break;
- case 207: sprintf(code_det,"Multi-Status"); break;
- case 208: sprintf(code_det,"Already Reported"); break;
- case 226: sprintf(code_det,"IM Used"); break;
- case 300: sprintf(code_det,"Multiple Choices"); break;
- case 301: sprintf(code_det,"Moved Permanently"); break;
- case 302: sprintf(code_det,"Found"); break;
- case 303: sprintf(code_det,"See Other"); break;
- case 304: sprintf(code_det,"Not Modified"); break;
- case 307: sprintf(code_det,"Temporary Redirect"); break;
- case 308: sprintf(code_det,"Permanent Redirect"); break;
- case 400: sprintf(code_det,"Bad Request"); break;
- case 401: sprintf(code_det,"Unauthorized"); break;
- case 402: sprintf(code_det,"Payment Required"); break;
- case 403: sprintf(code_det,"Forbidden"); break;
- case 404: sprintf(code_det,"Not Found"); break;
- case 405: sprintf(code_det,"Method Not Allowed"); break;
- case 406: sprintf(code_det,"Not Acceptable"); break;
- case 407: sprintf(code_det,"Proxy Authentication Required"); break;
- case 408: sprintf(code_det,"Request Timeout"); break;
- case 409: sprintf(code_det,"Conflict"); break;
- case 410: sprintf(code_det,"Gone"); break;
- case 411: sprintf(code_det,"Length Required"); break;
- case 412: sprintf(code_det,"Precondition Failed"); break;
- case 413: sprintf(code_det,"Content Too Large"); break;
- case 414: sprintf(code_det,"URI Too Long"); break;
- case 415: sprintf(code_det,"Unsupported Media Type"); break;
- case 416: sprintf(code_det,"Range Not Satisfiable"); break;
- case 417: sprintf(code_det,"Expectation Failed"); break;
- case 418: sprintf(code_det,"I'm a teapot"); break;
- case 421: sprintf(code_det,"Misdirected Request"); break;
- case 422: sprintf(code_det,"Unprocessable Content"); break;
- case 423: sprintf(code_det,"Locked"); break;
- case 424: sprintf(code_det,"Failed Dependency"); break;
- case 425: sprintf(code_det,"Too Early"); break;
- case 426: sprintf(code_det,"Upgrade Required"); break;
- case 428: sprintf(code_det,"Precondition Required"); break;
- case 429: sprintf(code_det,"Too Many Requests"); break;
- case 431: sprintf(code_det,"Request Header Fields Too Large"); break;
- case 451: sprintf(code_det,"Unavailable For Legal Reasons"); break;
- case 500: sprintf(code_det,"Internal Server Error"); break;
- case 501: sprintf(code_det,"Not Implemented"); break;
- case 502: sprintf(code_det,"Bad Gateway"); break;
- case 503: sprintf(code_det,"Service Unavailable"); break;
- case 504: sprintf(code_det,"Gateway Timeout"); break;
- case 505: sprintf(code_det,"HTTP Version Not Supported"); break;
- case 506: sprintf(code_det,"Variant Also Negotiates"); break;
- case 507: sprintf(code_det,"Insufficient Storage"); break;
- case 508: sprintf(code_det,"Loop Detected"); break;
- case 510: sprintf(code_det,"Not Extended"); break;
- case 511: sprintf(code_det,"Network Authentication Required"); break;
- default: sprintf(code_det,"unknown");
+ case 100: return "Continue"; break;
+ case 101: return "Switching Protocols"; break;
+ case 102: return "Processing"; break;
+ case 103: return "Early Hints"; break;
+ case 200: return "OK"; break;
+ case 201: return "Created"; break;
+ case 202: return "Accepted"; break;
+ case 203: return "Non-Authoritative Information"; break;
+ case 204: return "No Content"; break;
+ case 205: return "Reset Content"; break;
+ case 206: return "Partial Content"; break;
+ case 207: return "Multi-Status"; break;
+ case 208: return "Already Reported"; break;
+ case 226: return "IM Used"; break;
+ case 300: return "Multiple Choices"; break;
+ case 301: return "Moved Permanently"; break;
+ case 302: return "Found"; break;
+ case 303: return "See Other"; break;
+ case 304: return "Not Modified"; break;
+ case 307: return "Temporary Redirect"; break;
+ case 308: return "Permanent Redirect"; break;
+ case 400: return "Bad Request"; break;
+ case 401: return "Unauthorized"; break;
+ case 402: return "Payment Required"; break;
+ case 403: return "Forbidden"; break;
+ case 404: return "Not Found"; break;
+ case 405: return "Method Not Allowed"; break;
+ case 406: return "Not Acceptable"; break;
+ case 407: return "Proxy Authentication Required"; break;
+ case 408: return "Request Timeout"; break;
+ case 409: return "Conflict"; break;
+ case 410: return "Gone"; break;
+ case 411: return "Length Required"; break;
+ case 412: return "Precondition Failed"; break;
+ case 413: return "Content Too Large"; break;
+ case 414: return "URI Too Long"; break;
+ case 415: return "Unsupported Media Type"; break;
+ case 416: return "Range Not Satisfiable"; break;
+ case 417: return "Expectation Failed"; break;
+ case 418: return "I'm a teapot"; break;
+ case 421: return "Misdirected Request"; break;
+ case 422: return "Unprocessable Content"; break;
+ case 423: return "Locked"; break;
+ case 424: return "Failed Dependency"; break;
+ case 425: return "Too Early"; break;
+ case 426: return "Upgrade Required"; break;
+ case 428: return "Precondition Required"; break;
+ case 429: return "Too Many Requests"; break;
+ case 431: return "Request Header Fields Too Large"; break;
+ case 451: return "Unavailable For Legal Reasons"; break;
+ case 500: return "Internal Server Error"; break;
+ case 501: return "Not Implemented"; break;
+ case 502: return "Bad Gateway"; break;
+ case 503: return "Service Unavailable"; break;
+ case 504: return "Gateway Timeout"; break;
+ case 505: return "HTTP Version Not Supported"; break;
+ case 506: return "Variant Also Negotiates"; break;
+ case 507: return "Insufficient Storage"; break;
+ case 508: return "Loop Detected"; break;
+ case 510: return "Not Extended"; break;
+ case 511: return "Network Authentication Required"; break;
+ default: return "unknown";
}
}
diff --git a/src/net/util.h b/src/net/util.h
index 98d4d93..fbe73f8 100644
--- a/src/net/util.h
+++ b/src/net/util.h
@@ -32,7 +32,7 @@ int parse_header(char* buffer, int header_eof, parray_t** _table);
* @param {char*} response content
* @param {size_t} content length
*/
-void http_build(str** _dest, int code, char* code_det, char* header_vs, char* content, size_t len);
+void http_build(str** _dest, int code, const char* code_det, char* header_vs, char* content, size_t len);
/**
* @brief gets a string representation of a http code
@@ -40,7 +40,7 @@ void http_build(str** _dest, int code, char* code_det, char* header_vs, char* co
* @param {int} http response code
* @param {char*} allocated destination string
*/
-void http_code(int code, char* code_det);
+const char* http_code(int code);
void client_fd_errors(int client_fd);