mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-29 16:52:28 +00:00
[Redbean] Feature / OnError(status, message) hook (#1103)
This commit is contained in:
parent
2ab9e9f7fd
commit
d3ff48c63f
3 changed files with 114 additions and 77 deletions
|
@ -456,6 +456,7 @@ static bool isexitingworker;
|
|||
static bool hasonworkerstart;
|
||||
static bool leakcrashreports;
|
||||
static bool hasonhttprequest;
|
||||
static bool hasonerror;
|
||||
static bool ishandlingrequest;
|
||||
static bool listeningonport443;
|
||||
static bool hasonprocesscreate;
|
||||
|
@ -2532,7 +2533,7 @@ img { vertical-align: middle; }\r\n\
|
|||
return p;
|
||||
}
|
||||
|
||||
static char *ServeErrorImpl(unsigned code, const char *reason,
|
||||
static char *ServeErrorImplDefault(unsigned code, const char *reason,
|
||||
const char *details) {
|
||||
size_t n;
|
||||
char *p, *s;
|
||||
|
@ -2570,6 +2571,28 @@ static char *ServeErrorImpl(unsigned code, const char *reason,
|
|||
}
|
||||
}
|
||||
|
||||
static char *GetLuaResponse(void) {
|
||||
return cpm.luaheaderp ? cpm.luaheaderp : SetStatus(200, "OK");
|
||||
}
|
||||
|
||||
static char *ServeErrorImpl(unsigned code, const char *reason,
|
||||
const char *details) {
|
||||
lua_State *L = GL;
|
||||
if (hasonerror) {
|
||||
lua_getglobal(L, "OnError");
|
||||
lua_pushinteger(L, code);
|
||||
lua_pushstring(L, reason);
|
||||
if (LuaCallWithTrace(L, 2, 0, NULL) == LUA_OK) {
|
||||
return CommitOutput(GetLuaResponse());
|
||||
} else {
|
||||
return ServeErrorImplDefault(code, reason, details);
|
||||
}
|
||||
} else {
|
||||
return ServeErrorImplDefault(code, reason, details);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static char *ServeErrorWithPath(unsigned code, const char *reason,
|
||||
const char *path, size_t pathlen) {
|
||||
ERRORF("(srvr) server error: %d %s %`'.*s", code, reason, pathlen, path);
|
||||
|
@ -3227,10 +3250,6 @@ static char *ServeIndex(const char *path, size_t pathlen) {
|
|||
return p;
|
||||
}
|
||||
|
||||
static char *GetLuaResponse(void) {
|
||||
return cpm.luaheaderp ? cpm.luaheaderp : SetStatus(200, "OK");
|
||||
}
|
||||
|
||||
static bool ShouldServeCrashReportDetails(void) {
|
||||
uint32_t ip;
|
||||
uint16_t port;
|
||||
|
@ -5569,6 +5588,7 @@ static void LuaInit(void) {
|
|||
}
|
||||
if (LuaRunAsset("/.init.lua", true)) {
|
||||
hasonhttprequest = IsHookDefined("OnHttpRequest");
|
||||
hasonerror = IsHookDefined("OnError");
|
||||
hasonclientconnection = IsHookDefined("OnClientConnection");
|
||||
hasonprocesscreate = IsHookDefined("OnProcessCreate");
|
||||
hasonprocessdestroy = IsHookDefined("OnProcessDestroy");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue