mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 19:43:32 +00:00
cc1920749e
Your redbean can now interoperate with clients that require TLS crypto. This is accomplished using a protocol polyglot that lets us distinguish between HTTP and HTTPS regardless of the port number. Certificates will be generated automatically, if none are supplied by the user. Footprint increases by only a few hundred kb so redbean in MODY=tiny is now 1.0mb - Add lseek() polyfills for ZIP executable - Automatically polyfill /tmp/FOO paths on NT - Fix readdir() / ftw() / nftw() bugs on Windows - Introduce -B flag for slower SSL that's stronger - Remove mbedtls features Cosmopolitan doesn't need - Have base64 decoder support the uri-safe alternative - Remove Truncated HMAC because it's forbidden by the IETF - Add all the mbedtls test suites and make them go 3x faster - Support opendir() / readdir() / closedir() on ZIP executable - Use Everest for ECDHE-ECDSA because it's so good it's so good - Add tinier implementation of sha1 since it's not worth the rom - Add chi-square monte-carlo mean correlation tests for getrandom() - Source entropy on Windows from the proper interface everyone uses We're continuing to outperform NGINX and other servers on raw message throughput. Using SSL means that instead of 1,000,000 qps you can get around 300,000 qps. However redbean isn't as fast as NGINX yet at SSL handshakes, since redbean can do 2,627 per second and NGINX does 4.3k Right now, the SSL UX story works best if you give your redbean a key signing key since that can be easily generated by openssl using a one liner then redbean will do all the things that are impossibly hard to do like signing ecdsa and rsa certificates that'll work in chrome. We should integrate the let's encrypt acme protocol in the future. Live Demo: https://redbean.justine.lol/ Root Cert: https://redbean.justine.lol/redbean1.crt
237 lines
10 KiB
Makefile
237 lines
10 KiB
Makefile
#-*-mode:makefile-gmake;indent-tabs-mode:t;tab-width:8;coding:utf-8-*-┐
|
|
#───vi: set et ft=make ts=8 tw=8 fenc=utf-8 :vi───────────────────────┘
|
|
|
|
PKGS += TOOL_NET
|
|
|
|
TOOL_NET_FILES := $(wildcard tool/net/*)
|
|
TOOL_NET_SRCS = $(filter %.c,$(TOOL_NET_FILES))
|
|
TOOL_NET_HDRS = $(filter %.h,$(TOOL_NET_FILES))
|
|
|
|
TOOL_NET_OBJS = \
|
|
$(TOOL_NET_SRCS:%.c=o/$(MODE)/%.o)
|
|
|
|
TOOL_NET_BINS = \
|
|
$(TOOL_NET_COMS) \
|
|
$(TOOL_NET_COMS:%=%.dbg)
|
|
|
|
TOOL_NET_COMS = \
|
|
o/$(MODE)/tool/net/redbean.com \
|
|
o/$(MODE)/tool/net/redbean-demo.com \
|
|
o/$(MODE)/tool/net/redbean-static.com \
|
|
o/$(MODE)/tool/net/redbean-unsecure.com \
|
|
o/$(MODE)/tool/net/redbean-original.com \
|
|
o/$(MODE)/tool/net/echoserver.com
|
|
|
|
TOOL_NET_DIRECTDEPS = \
|
|
LIBC_ALG \
|
|
LIBC_BITS \
|
|
LIBC_CALLS \
|
|
LIBC_DNS \
|
|
LIBC_FMT \
|
|
LIBC_INTRIN \
|
|
LIBC_LOG \
|
|
LIBC_MEM \
|
|
LIBC_NEXGEN32E \
|
|
LIBC_NT_IPHLPAPI \
|
|
LIBC_NT_KERNEL32 \
|
|
LIBC_RAND \
|
|
LIBC_RUNTIME \
|
|
LIBC_SOCK \
|
|
LIBC_STDIO \
|
|
LIBC_STR \
|
|
LIBC_STUBS \
|
|
LIBC_SYSV \
|
|
LIBC_SYSV_CALLS \
|
|
LIBC_TIME \
|
|
LIBC_TINYMATH \
|
|
LIBC_UNICODE \
|
|
LIBC_X \
|
|
LIBC_ZIPOS \
|
|
NET_HTTP \
|
|
THIRD_PARTY_GDTOA \
|
|
THIRD_PARTY_GETOPT \
|
|
THIRD_PARTY_LUA \
|
|
THIRD_PARTY_MBEDTLS \
|
|
THIRD_PARTY_REGEX \
|
|
THIRD_PARTY_SQLITE3 \
|
|
THIRD_PARTY_ZLIB \
|
|
TOOL_DECODE_LIB
|
|
|
|
TOOL_NET_DEPS := \
|
|
$(call uniq,$(foreach x,$(TOOL_NET_DIRECTDEPS),$($(x))))
|
|
|
|
o/$(MODE)/tool/net/net.pkg: \
|
|
$(TOOL_NET_OBJS) \
|
|
$(foreach x,$(TOOL_NET_DIRECTDEPS),$($(x)_A).pkg)
|
|
|
|
o/$(MODE)/tool/net/%.com.dbg: \
|
|
$(TOOL_NET_DEPS) \
|
|
o/$(MODE)/tool/net/%.o \
|
|
o/$(MODE)/tool/net/net.pkg \
|
|
$(CRT) \
|
|
$(APE)
|
|
@$(APELINK)
|
|
|
|
# REDBEAN.COM
|
|
#
|
|
# The little web server that could!
|
|
|
|
o/$(MODE)/tool/net/redbean.com.dbg: \
|
|
$(TOOL_NET_DEPS) \
|
|
o/$(MODE)/tool/net/redbean.o \
|
|
o/$(MODE)/tool/net/lsqlite3.o \
|
|
o/$(MODE)/tool/net/net.pkg \
|
|
$(CRT) \
|
|
$(APE)
|
|
@$(APELINK)
|
|
|
|
o/$(MODE)/tool/net/redbean.com: \
|
|
o/$(MODE)/tool/net/redbean.com.dbg \
|
|
tool/net/net.mk \
|
|
tool/net/.help.txt \
|
|
tool/net/.init.lua \
|
|
tool/net/favicon.ico \
|
|
tool/net/redbean.png
|
|
@$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@
|
|
@$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.ape bs=64 count=11 conv=notrunc 2>/dev/null
|
|
@$(COMPILE) -AZIP -T$@ zip -qj $@ o/$(MODE)/tool/net/.ape tool/net/.help.txt tool/net/.init.lua tool/net/favicon.ico tool/net/redbean.png
|
|
|
|
# REDBEAN-DEMO.COM
|
|
#
|
|
# This redbean-demo.com program is the same as redbean.com except it
|
|
# bundles a bunch of example code and there's a live of it available
|
|
# online at http://redbean.justine.lol/
|
|
|
|
o/$(MODE)/tool/net/redbean-demo.com.dbg: \
|
|
o/$(MODE)/tool/net/redbean.com.dbg
|
|
@$(COMPILE) -ACP -T$@ cp $< $@
|
|
|
|
o/$(MODE)/tool/net/redbean-demo.com: \
|
|
o/$(MODE)/tool/net/redbean-demo.com.dbg \
|
|
o/$(MODE)/host/third_party/infozip/zip.com \
|
|
tool/net/net.mk \
|
|
tool/net/favicon.ico \
|
|
tool/net/redbean.png \
|
|
tool/net/.help.txt \
|
|
tool/net/demo/.init.lua \
|
|
tool/net/demo/.reload.lua \
|
|
tool/net/demo/.lua/mymodule.lua \
|
|
tool/net/demo/sql.lua \
|
|
tool/net/demo/404.html \
|
|
tool/net/demo/hello.lua \
|
|
tool/net/demo/index.html \
|
|
tool/net/demo/redbean.css \
|
|
tool/net/demo/redbean.lua \
|
|
tool/net/demo/redbean-form.lua \
|
|
tool/net/demo/redbean-xhr.lua \
|
|
tool/net/demo/seekable.txt \
|
|
tool/net/demo/virtualbean.html \
|
|
tool/net/redbean.c \
|
|
net/http/parsehttprequest.c \
|
|
net/http/parseurl.c \
|
|
net/http/encodeurl.c \
|
|
test/net/http/parsehttprequest_test.c \
|
|
test/net/http/parseurl_test.c
|
|
@$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@
|
|
@$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/.redbean-demo
|
|
@$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.redbean-demo/.ape bs=64 count=11 conv=notrunc 2>/dev/null
|
|
@$(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -qj $@ o/$(MODE)/tool/net/.redbean-demo/.ape tool/net/.help.txt tool/net/demo/.init.lua tool/net/demo/.reload.lua
|
|
@$(COMPILE) -ARM -T$@ rm -rf o/$(MODE)/tool/net/.lua
|
|
@$(COMPILE) -ACP -T$@ cp -R tool/net/demo/.lua o/$(MODE)/tool/net/
|
|
@(cd o/$(MODE)/tool/net && ../../host/third_party/infozip/zip.com -qr redbean-demo.com .lua)
|
|
@$(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -qj $@ tool/net/demo/hello.lua tool/net/demo/sql.lua
|
|
@echo "<-- check out this lua server page" | $(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -cqj $@ tool/net/demo/redbean.lua
|
|
@$(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -qj $@ tool/net/demo/404.html tool/net/favicon.ico tool/net/redbean.png tool/net/demo/redbean-form.lua tool/net/demo/redbean-xhr.lua
|
|
@echo Uncompressed for HTTP Range requests | $(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -cqj0 $@ tool/net/demo/seekable.txt
|
|
@$(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -q $@ tool/net/ tool/net/demo/ tool/net/demo/index.html tool/net/demo/redbean.css tool/net/redbean.c net/http/parsehttprequest.c net/http/parseurl.c net/http/encodeurl.c test/net/http/parsehttprequest_test.c test/net/http/parseurl_test.c
|
|
@printf "<p>This is a live instance of <a href=https://justine.lol/redbean/>redbean</a>: a tiny multiplatform webserver that <a href=https://news.ycombinator.com/item?id=26271117>went viral</a> on hacker news a few months ago.\r\nSince then, we've added Lua dynamic serving, which also goes as fast as 1,000,000 requests per second on a core i9 (rather than a cheap virtual machine like this). the text you're reading now is a PKZIP End Of Central Directory comment.\r\n<p>redbean aims to be production worthy across six operating systems, using a single executable file (this demo is hosted on FreeBSD 13). redbean has been enhanced to restore the APE header after startup.\r\nIt automatically generates this listing page based on your O/$(MODE)/THIRD_PARTY/INFOZIP/ZIP.COM contents. If you use redbean as an application server / web development environment,\r\nthen you'll find other new and useful features like function call logging so you can get that sweet sweet microsecond scale latency." | $(COMPILE) -AZIP -T$@ o/$(MODE)/host/third_party/infozip/zip.com -z $@
|
|
@$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/virtualbean.justine.lol/
|
|
@$(COMPILE) -ACP -T$@ cp tool/net/redbean.png o/$(MODE)/tool/net/virtualbean.justine.lol/redbean.png
|
|
@$(COMPILE) -ACP -T$@ cp tool/net/demo/virtualbean.html o/$(MODE)/tool/net/virtualbean.justine.lol/index.html
|
|
@(cd o/$(MODE)/tool/net && ../../host/third_party/infozip/zip.com -q redbean-demo.com virtualbean.justine.lol/)
|
|
@(cd o/$(MODE)/tool/net && echo 'Go to <a href=http://virtualbean.justine.lol>http://virtualbean.justine.lol</a>' | ../../host/third_party/infozip/zip.com -cq redbean-demo.com virtualbean.justine.lol/index.html)
|
|
@(cd o/$(MODE)/tool/net && ../../host/third_party/infozip/zip.com -q redbean-demo.com virtualbean.justine.lol/redbean.png)
|
|
|
|
# REDBEAN-STATIC.COM
|
|
#
|
|
# Passing the -DSTATIC causes Lua and SQLite to be removed. This reduces
|
|
# the binary size from roughly 1500 kb to 500 kb. It still supports SSL.
|
|
|
|
o/$(MODE)/tool/net/redbean-static.com: \
|
|
o/$(MODE)/tool/net/redbean-static.com.dbg \
|
|
tool/net/favicon.ico \
|
|
tool/net/redbean.png
|
|
@$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@
|
|
@$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/.redbean-static
|
|
@$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.redbean-static/.ape bs=64 count=11 conv=notrunc 2>/dev/null
|
|
@$(COMPILE) -AZIP -T$@ zip -qj $@ o/$(MODE)/tool/net/.redbean-static/.ape tool/net/favicon.ico tool/net/redbean.png
|
|
|
|
o/$(MODE)/tool/net/redbean-static.com.dbg: \
|
|
$(TOOL_NET_DEPS) \
|
|
o/$(MODE)/tool/net/redbean-static.o \
|
|
o/$(MODE)/tool/net/net.pkg \
|
|
$(CRT) \
|
|
$(APE)
|
|
@$(APELINK)
|
|
|
|
o/$(MODE)/tool/net/redbean-static.o: tool/net/redbean.c
|
|
@$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -DSTATIC -DREDBEAN=\"redbean-static\" $(OUTPUT_OPTION) $<
|
|
|
|
# REDBEAN-UNSECURE.COM
|
|
#
|
|
# Passing the -DUNSECURE will cause the TLS security code to be removed.
|
|
# That doesn't mean redbean becomes insecure. It just reduces complexity
|
|
# in situations where you'd rather have SSL be handled in an edge proxy.
|
|
|
|
o/$(MODE)/tool/net/redbean-unsecure.com: \
|
|
o/$(MODE)/tool/net/redbean-unsecure.com.dbg \
|
|
tool/net/favicon.ico \
|
|
tool/net/redbean.png
|
|
@$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@
|
|
@$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/.redbean-unsecure
|
|
@$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.redbean-unsecure/.ape bs=64 count=11 conv=notrunc 2>/dev/null
|
|
@$(COMPILE) -AZIP -T$@ zip -qj $@ o/$(MODE)/tool/net/.redbean-unsecure/.ape tool/net/favicon.ico tool/net/redbean.png
|
|
|
|
o/$(MODE)/tool/net/redbean-unsecure.com.dbg: \
|
|
$(TOOL_NET_DEPS) \
|
|
o/$(MODE)/tool/net/redbean-unsecure.o \
|
|
o/$(MODE)/tool/net/lsqlite3.o \
|
|
o/$(MODE)/tool/net/net.pkg \
|
|
$(CRT) \
|
|
$(APE)
|
|
@$(APELINK)
|
|
|
|
o/$(MODE)/tool/net/redbean-unsecure.o: tool/net/redbean.c
|
|
@$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -DUNSECURE -DREDBEAN=\"redbean-unsecure\" $(OUTPUT_OPTION) $<
|
|
|
|
# REDBEAN-ORIGINAL.COM
|
|
#
|
|
# Passing the -DSTATIC and -DUNSECURE flags together w/ MODE=tiny will
|
|
# produce 200kb binary that's very similar to redbean as it existed on
|
|
# Hacker News the day it went viral.
|
|
|
|
o/$(MODE)/tool/net/redbean-original.com: \
|
|
o/$(MODE)/tool/net/redbean-original.com.dbg \
|
|
tool/net/favicon.ico \
|
|
tool/net/redbean.png
|
|
@$(COMPILE) -AOBJCOPY -T$@ $(OBJCOPY) -S -O binary $< $@
|
|
@$(COMPILE) -AMKDIR -T$@ mkdir -p o/$(MODE)/tool/net/.redbean-original
|
|
@$(COMPILE) -ADD -T$@ dd if=$@ of=o/$(MODE)/tool/net/.redbean-original/.ape bs=64 count=11 conv=notrunc 2>/dev/null
|
|
@$(COMPILE) -AZIP -T$@ zip -qj $@ o/$(MODE)/tool/net/.redbean-original/.ape tool/net/favicon.ico tool/net/redbean.png
|
|
|
|
o/$(MODE)/tool/net/redbean-original.com.dbg: \
|
|
$(TOOL_NET_DEPS) \
|
|
o/$(MODE)/tool/net/redbean-original.o \
|
|
o/$(MODE)/tool/net/lsqlite3.o \
|
|
o/$(MODE)/tool/net/net.pkg \
|
|
$(CRT) \
|
|
$(APE)
|
|
@$(APELINK)
|
|
|
|
o/$(MODE)/tool/net/redbean-original.o: tool/net/redbean.c
|
|
@$(COMPILE) -AOBJECTIFY.c $(OBJECTIFY.c) -DSTATIC -DUNSECURE -DREDBEAN=\"redbean-original\" $(OUTPUT_OPTION) $<
|
|
|
|
.PHONY: o/$(MODE)/tool/net
|
|
o/$(MODE)/tool/net: \
|
|
$(TOOL_NET_BINS) \
|
|
$(TOOL_NET_CHECKS)
|