HTTP stuff now uses keyword parser.

This commit is contained in:
2022-07-22 17:07:40 -04:00
parent 28ec61e47c
commit a5ef765524
6 changed files with 135 additions and 101 deletions

View File

@@ -734,50 +734,55 @@ void HttpClientRequest::set_defaults() {
}
}
void HttpClientRequest::set_config(LuaStack &LS0, LuaSlot tab) {
LuaVar key, val;
LuaStack LS(LS0.state(), key, val);
LS.set(key, LuaNil);
while (LS.next(tab, key, val)) {
eng::string kstr;
if (LS.isstring(key)) kstr = LS.ckstring(key);
if (kstr == "method") {
set_method(LS, val);
} else if (kstr == "host") {
set_host(LS, val);
} else if (kstr == "port") {
set_port(LS, val);
} else if (kstr == "path") {
set_path(LS, val);
} else if (kstr == "params") {
set_params(LS, val);
} else if (kstr == "url") {
set_url(LS, val);
} else if (kstr == "verifycertificate") {
set_verify_certificate(LS, val);
} else if (kstr == "mimetype") {
set_mime_type(LS, val);
} else if (kstr == "content") {
set_content(LS, val);
} else if (kstr == "html") {
set_content(LS, val);
set_mime_type("text/html");
} else if (kstr == "text") {
set_content(LS, val);
set_mime_type("text/plain");
} else if (kstr == "json") {
set_content(LS, val);
set_mime_type("application/json");
} else if (kstr == "bytes") {
set_content(LS, val);
set_mime_type("application/octet-stream");
} else if (kstr == "jsonvalue") {
set_jsonvalue(LS, val);
} else if (kstr == "") {
check_fail(util::ss("configuration parameter names must be strings."));
} else {
check_fail(util::ss("unrecognized request configuration parameter: ", kstr));
}
void HttpClientRequest::configure(LuaKeywordParser &kp) {
LuaVar val;
LuaStack LS(kp.state(), val);
if (kp.parse(val, "method")) {
set_method(LS, val);
}
if (kp.parse(val, "host")) {
set_host(LS, val);
}
if (kp.parse(val, "port")) {
set_port(LS, val);
}
if (kp.parse(val, "path")) {
set_path(LS, val);
}
if (kp.parse(val, "params")) {
set_params(LS, val);
}
if (kp.parse(val, "url")) {
set_url(LS, val);
}
if (kp.parse(val, "verifycertificate")) {
set_verify_certificate(LS, val);
}
if (kp.parse(val, "mimetype")) {
set_mime_type(LS, val);
}
if (kp.parse(val, "content")) {
set_content(LS, val);
}
if (kp.parse(val, "html")) {
set_content(LS, val);
set_mime_type("text/html");
}
if (kp.parse(val, "text")) {
set_content(LS, val);
set_mime_type("text/plain");
}
if (kp.parse(val, "json")) {
set_content(LS, val);
set_mime_type("application/json");
}
if (kp.parse(val, "bytes")) {
set_content(LS, val);
set_mime_type("application/octet-stream");
}
if (kp.parse(val, "jsonvalue")) {
set_jsonvalue(LS, val);
}
}
@@ -1025,40 +1030,39 @@ void HttpServerResponse::set_jsonvalue(LuaStack &LS, LuaSlot val) {
set_mime_type("application/json");
}
void HttpServerResponse::set_config(LuaStack &LS0, LuaSlot tab) {
LuaVar key, val;
LuaStack LS(LS0.state(), key, val);
LS.set(key, LuaNil);
while (LS.next(tab, key, val)) {
eng::string kstr;
if (LS.isstring(key)) kstr = LS.ckstring(key);
if (kstr == "status") {
set_status(LS, val);
} else if (kstr == "maxage") {
set_max_age(LS, val);
} else if (kstr == "mimetype") {
set_mime_type(LS, val);
} else if (kstr == "content") {
set_content(LS, val);
} else if (kstr == "html") {
set_content(LS, val);
set_mime_type("text/html");
} else if (kstr == "text") {
set_content(LS, val);
set_mime_type("text/plain");
} else if (kstr == "json") {
set_content(LS, val);
set_mime_type("application/json");
} else if (kstr == "bytes") {
set_content(LS, val);
set_mime_type("application/octet-stream");
} else if (kstr == "jsonvalue") {
set_jsonvalue(LS, val);
} else if (kstr == "") {
check_fail(util::ss("response configuration parameters must be strings."));
} else {
check_fail(util::ss("unrecognized response configuration parameter: ", kstr));
}
void HttpServerResponse::configure(LuaKeywordParser &kp) {
LuaVar val;
LuaStack LS(kp.state(), val);
if (kp.parse(val, "status")) {
set_status(LS, val);
}
if (kp.parse(val, "maxage")) {
set_max_age(LS, val);
}
if (kp.parse(val, "mimetype")) {
set_mime_type(LS, val);
}
if (kp.parse(val, "content")) {
set_content(LS, val);
}
if (kp.parse(val, "html")) {
set_content(LS, val);
set_mime_type("text/html");
}
if (kp.parse(val, "text")) {
set_content(LS, val);
set_mime_type("text/plain");
}
if (kp.parse(val, "json")) {
set_content(LS, val);
set_mime_type("application/json");
}
if (kp.parse(val, "bytes")) {
set_content(LS, val);
set_mime_type("application/octet-stream");
}
if (kp.parse(val, "jsonvalue")) {
set_jsonvalue(LS, val);
}
}
@@ -1712,8 +1716,10 @@ LuaDefine(http_clientrequest, "request",
LuaArg tab;
LuaRet str;
LuaStack LS(L, tab, str);
LuaKeywordParser kp(LS, tab);
HttpClientRequest req;
req.set_config(LS, tab);
req.configure(kp);
kp.final_check_throw();
req.set_defaults();
eng::string error = req.check();
if (!error.empty()) {
@@ -1882,8 +1888,10 @@ LuaDefine(http_serverresponse, "response",
LuaArg tab;
LuaRet str;
LuaStack LS(L, tab, str);
LuaKeywordParser kp(LS, tab);
HttpServerResponse resp;
resp.set_config(LS, tab);
resp.configure(kp);
kp.final_check_throw();
resp.set_defaults();
LS.set(str, resp.debug_string());
return LS.result();
@@ -1915,4 +1923,4 @@ LuaDefine(http_statuscode, "(statusstring)", "Convert a string to a 3-digit stat
LS.set(code, status_code_from_string(sstr));
int iresult = LS.result();
return iresult;
}
}