Reuse core host definitions across requests

This commit is contained in:
udo
2026-07-18 00:55:29 +00:00
parent 1ebf94b135
commit 6e4ef8ed7a
8 changed files with 212 additions and 56 deletions
+15 -14
View File
@@ -818,7 +818,8 @@ int uce_wasm_apply_context(const char* buf, size_t len)
uce_host_log(3, error.data(), error.size());
return(1);
}
wasm_request.call = decoded;
wasm_request.call = std::move(decoded);
DValue& applied = wasm_request.call;
auto apply_map = [](DValue* source, StringMap& dest) {
dest.clear();
if(source)
@@ -826,23 +827,23 @@ int uce_wasm_apply_context(const char* buf, size_t len)
dest[key] = item.to_string();
});
};
if(decoded.key("server_config"))
apply_map(decoded.key("server_config"), wasm_server.config);
apply_map(decoded.key("params"), wasm_request.params);
apply_map(decoded.key("get"), wasm_request.get);
apply_map(decoded.key("post"), wasm_request.post);
apply_map(decoded.key("cookies"), wasm_request.cookies);
apply_map(decoded.key("session"), wasm_request.session);
if(DValue* session_id = decoded.key("session_id"))
if(applied.key("server_config"))
apply_map(applied.key("server_config"), wasm_server.config);
apply_map(applied.key("params"), wasm_request.params);
apply_map(applied.key("get"), wasm_request.get);
apply_map(applied.key("post"), wasm_request.post);
apply_map(applied.key("cookies"), wasm_request.cookies);
apply_map(applied.key("session"), wasm_request.session);
if(DValue* session_id = applied.key("session_id"))
wasm_request.session_id = session_id->to_string();
if(DValue* session_name = decoded.key("session_name"))
if(DValue* session_name = applied.key("session_name"))
wasm_request.session_name = session_name->to_string();
if(DValue* session_loaded_hash = decoded.key("session_loaded_hash"))
if(DValue* session_loaded_hash = applied.key("session_loaded_hash"))
wasm_request.session_loaded_hash = session_loaded_hash->to_string();
DValue* entry = decoded.key("entry_unit");
DValue* entry = applied.key("entry_unit");
if(entry)
wasm_request.resources.current_unit_file = entry->to_string();
DValue* raw_in = decoded.key("in");
DValue* raw_in = applied.key("in");
wasm_request.in = raw_in ? raw_in->to_string() : "";
// websocket event context: ws_send()/ws_close() capture into the dispatch
// list (the workspace owns no connections), which collect() carries back to
@@ -851,7 +852,7 @@ int uce_wasm_apply_context(const char* buf, size_t len)
wasm_request.resources.websocket_connection_state_before = DValue();
wasm_request.resources.websocket_dispatch_commands = DValue();
wasm_request.resources.websocket_dispatch_capture = false;
DValue* ws = decoded.key("ws");
DValue* ws = applied.key("ws");
if(ws)
{
wasm_request.resources.websocket_connection_id = (*ws)["connection_id"].to_string();