From f8520e10b2418e3812bd8026f3c003f0ec5a426f Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Fri, 10 Jun 2022 03:28:46 -0700 Subject: [PATCH] Add ProgramMaxPayloadSize() API to Redbean This way we don't have to use the flag and can configure it using .init.lua instead. --- tool/net/help.txt | 14 ++++++++++++++ tool/net/redbean.c | 9 ++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/tool/net/help.txt b/tool/net/help.txt index 5aa84ae9d..d31d88b69 100644 --- a/tool/net/help.txt +++ b/tool/net/help.txt @@ -1081,6 +1081,20 @@ FUNCTIONS operating system to choose a port, which may be revealed later on by GetServerAddr or the -z flag to stdout. + ProgramMaxPayloadSize(int64) + Sets the maximum HTTP message payload size in bytes. The + default is very conservatively set to 65536 so this is + something many people will want to increase. This limit is + enforced at the transport layer, before any Lua code is + called, because right now redbean stores and forewards + messages. (Use the UNIX API for raw socket streaming.) Setting + this to a very high value can be useful if you're less + concerned about rogue clients and would rather have your Lua + code be granted more control to bounce unreasonable messages. + If a value less than 1450 is supplied, it'll automatically be + increased to 1450, since that's the size of ethernet frames. + This function can only be called from .init.lua. + ProgramPrivateKey(pem:str) Same as the -K flag if called from .init.lua, e.g. ProgramPrivateKey(LoadAsset("/.sign.key")) for zip loading or diff --git a/tool/net/redbean.c b/tool/net/redbean.c index 80fdf4354..0758d84c4 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -4592,6 +4592,11 @@ static int LuaProgramGid(lua_State *L) { return LuaProgramInt(L, ProgramGid); } +static int LuaProgramMaxPayloadSize(lua_State *L) { + OnlyCallFromInitLua(L, "ProgramMaxPayloadSize"); + return LuaProgramInt(L, ProgramMaxPayloadSize); +} + static int LuaGetClientFd(lua_State *L) { OnlyCallDuringConnection(L, "GetClientFd"); lua_pushinteger(L, client); @@ -4954,17 +4959,18 @@ static const char *const kDontAutoComplete[] = { "HasParam", // "IsClientUsingSsl", // "LaunchBrowser", // + "LuaProgramSslRequired", // TODO "ProgramAddr", // TODO "ProgramBrand", // "ProgramCertificate", // TODO "ProgramGid", // "ProgramLogPath", // TODO + "ProgramMaxPayloadSize", // TODO "ProgramPidPath", // TODO "ProgramPort", // TODO "ProgramPrivateKey", // TODO "ProgramSslCiphersuite", // TODO "ProgramSslClientVerify", // TODO - "LuaProgramSslRequired", // TODO "ProgramSslCompression", // "ProgramSslTicketLifetime", // "ProgramTimeout", // TODO @@ -5095,6 +5101,7 @@ static const luaL_Reg kLuaFuncs[] = { {"ProgramLogBodies", LuaProgramLogBodies}, // {"ProgramLogMessages", LuaProgramLogMessages}, // {"ProgramLogPath", LuaProgramLogPath}, // + {"ProgramMaxPayloadSize", LuaProgramMaxPayloadSize}, // {"ProgramPidPath", LuaProgramPidPath}, // {"ProgramPort", LuaProgramPort}, // {"ProgramRedirect", LuaProgramRedirect}, //