mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-23 05:42:29 +00:00
Add /statusz page to redbean plus other enhancements
redbean improvements: - Explicitly disable corking - Simulate Python regex API for Lua - Send warmup requests in main process on startup - Add Class-A granular IPv4 network classification - Add /statusz page so you can monitor your redbean's health - Fix regressions on OpenBSD/NetBSD caused by recent changes - Plug Authorization header into Lua GetUser and GetPass APIs - Recognize X-Forwarded-{For,Host} from local reverse proxies - Add many additional functions to redbean Lua server page API - Report resource usage of child processes on `/` listing page - Introduce `-a` flag for logging child process resource usage - Introduce `-t MILLIS` flag and `ProgramTimeout(ms)` init API - Introduce `-H "Header: value"` flag and `ProgramHeader(k,v)` API Cosmopolitan Libc improvements: - Make strerror() simpler - Make inet_pton() not depend on sscanf() - Fix OpenExecutable() which broke .data section earlier - Fix stdio in cases where it overflows kernel tty buffer - Fix bugs in crash reporting w/o .com.dbg binary present - Add polyfills for SO_LINGER, SO_RCVTIMEO, and SO_SNDTIMEO - Polyfill TCP_CORK on BSD and XNU using TCP_NOPUSH magnums New netcat clone in examples/nc.c: While testing some of the failure conditions for redbean, I noticed that BusyBox's `nc` command is pretty busted, if you use it as an interactive tool, rather than having it be part of a pipeline. Unfortunately this'll only work on UNIX since Windows doesn't let us poll on stdio and sockets at the same time because I don't think they want tools like this running on their platform. So if you want forbidden fruit, it's here so enjoy it
This commit is contained in:
parent
4effa23528
commit
b107d2709f
163 changed files with 4425 additions and 2104 deletions
|
@ -22,6 +22,7 @@
|
|||
#include "libc/testlib/ezbench.h"
|
||||
#include "libc/testlib/hyperion.h"
|
||||
#include "libc/testlib/testlib.h"
|
||||
#include "net/http/http.h"
|
||||
#include "net/http/url.h"
|
||||
|
||||
TEST(ParseUrl, testEmpty) {
|
||||
|
@ -160,8 +161,7 @@ TEST(ParseUrl, testUrl) {
|
|||
ASSERT_EQ('b', h.user.p[0]);
|
||||
ASSERT_EQ(1, h.pass.n);
|
||||
ASSERT_EQ('B', h.pass.p[0]);
|
||||
ASSERT_EQ(1, h.host.n);
|
||||
ASSERT_EQ('c', h.host.p[0]);
|
||||
ASSERT_STREQ("c", gc(strndup(h.host.p, h.host.n)));
|
||||
ASSERT_EQ(1, h.port.n);
|
||||
ASSERT_EQ('C', h.port.p[0]);
|
||||
ASSERT_EQ(2, h.path.n);
|
||||
|
@ -380,6 +380,16 @@ TEST(ParseHost, testObviouslyIllegalIpLiteral_getsTreatedAsRegName) {
|
|||
ASSERT_STREQ("//vf.%3A%3A1%00", gc(EncodeUrl(&h, 0)));
|
||||
}
|
||||
|
||||
TEST(ParseHost, testUnclosedIpv6_doesntSetPort) {
|
||||
struct Url h = {0};
|
||||
gc(ParseHost("2001:db8:cafe::17", -1, &h));
|
||||
gc(h.params.p);
|
||||
ASSERT_STREQ("2001:db8:cafe::17", gc(strndup(h.host.p, h.host.n)));
|
||||
ASSERT_EQ(0, h.port.n);
|
||||
ASSERT_EQ(0, h.port.p);
|
||||
ASSERT_STREQ("//2001%3Adb8%3Acafe%3A%3A17", gc(EncodeUrl(&h, 0)));
|
||||
}
|
||||
|
||||
TEST(EncodeUrl, testHostPortPlacedInHostField_ungoodIdea) {
|
||||
struct Url h = {0};
|
||||
h.host.n = strlen("foo.example:80");
|
||||
|
@ -696,6 +706,8 @@ BENCH(ParseUrl, bench) {
|
|||
free(ParseUrl("a://b@c/?zd#f", -1, &h));
|
||||
free(h.params.p);
|
||||
}));
|
||||
EZBENCH2("ParseHost", donothing, free(ParseHost("127.0.0.1:34832", 15, &h)));
|
||||
EZBENCH2("ParseIp", donothing, ParseIp("127.0.0.1", 9));
|
||||
}
|
||||
|
||||
BENCH(EncodeUrl, bench) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue