From 94afa982c35d4322999b5591f6d41d5cfc3f19a5 Mon Sep 17 00:00:00 2001 From: Justine Tunney Date: Sat, 27 Feb 2021 18:02:32 -0800 Subject: [PATCH] Fix zip executables on MacOS Here's why we got those `Killed: 11` failures on MacOS after modifying the contentns of the redbean.com executable. If you were inserting a small file, such as a HelloWorld.html file, then InfoZIP might have decreased the size of the executable to less than what the Mach-O section had been expecting. That's because when zipobj.com put things like time zone data in the executable, it aligned each zip file entry on a 64-byte boundary, simply for the sake of readability in binary dumps. But when InfoZIP edited the file it would rewrite every entry using ZIP's usual 2-byte alignment. Thus causing shrinkage. The solution was to reconfigure the linker script so that zip file bits that get put into the executable at link-time, such as timezone data, aren't officially part of the executable image, i.e. we don't want the operating system to load that part. The original decision to put the linked zip files into the .data section was mostly made so that when the executable was run in its .com.dbg form it would still have the zip entries be accessible, even though there was tons of GNU debug data following the central directory. We're not going to be able to do that. The .com executable should be the canonical executable. We have really good tools for automatically attaching and configuring GDB correctly with debug symbols even when the .com is run. We'll have to rely on those in cases where zip embedding is used. See #53 See #54 See #68 --- ape/ape.lds | 11 +- build/bootstrap/zipobj.com | Bin 172032 -> 126976 bytes libc/nexgen32e/zip.S | 4 +- libc/runtime/mman.greg.c | 6 +- test/libc/str/undeflate_test.c | 4 +- tool/build/zipobj.c | 14 +- tool/net/greenbean.c | 1291 -------------------------------- tool/net/redbean.c | 39 +- 8 files changed, 36 insertions(+), 1333 deletions(-) delete mode 100644 tool/net/greenbean.c diff --git a/ape/ape.lds b/ape/ape.lds index 18e60f632..e0d14658c 100644 --- a/ape/ape.lds +++ b/ape/ape.lds @@ -364,6 +364,11 @@ SECTIONS { PROVIDE_HIDDEN(edata = .); } :Ram + .zip : { + KEEP(*(SORT_BY_NAME(.zip.*))) + . = ALIGN(PAGESIZE); + } + .bss . : { KEEP(*(SORT_BY_NAME(.piro.bss.init.*))) *(.piro.bss) @@ -382,7 +387,7 @@ SECTIONS { . = ALIGN(FRAMESIZE); /* for brk()/sbrk() allocation */ HIDDEN(_end = .); PROVIDE_HIDDEN(end = .); - } :Ram + } /*END: nt addressability guarantee */ /*END: bsd addressability guarantee */ @@ -453,7 +458,7 @@ HIDDEN(ape_rom_rva = RVA(ape_rom_vaddr)); HIDDEN(ape_ram_offset = ape_rom_offset + ape_rom_filesz); HIDDEN(ape_ram_vaddr = ADDR(.data)); HIDDEN(ape_ram_paddr = LOADADDR(.data)); -HIDDEN(ape_ram_filesz = LOADADDR(.bss) - LOADADDR(.data)); +HIDDEN(ape_ram_filesz = SIZEOF(.data)); HIDDEN(ape_ram_memsz = ADDR(.bss) + SIZEOF(.bss) - ape_ram_vaddr); HIDDEN(ape_ram_align = PAGESIZE); HIDDEN(ape_ram_rva = RVA(ape_ram_vaddr)); @@ -535,7 +540,7 @@ HIDDEN(v_ape_highsectors = ZIPCONST(v_zip_cdoffset, __zip_start - IMAGE_BASE_VIRTUAL); ZIPCONST(v_zip_cdirsize, __zip_end - __zip_start); ZIPCONST(v_zip_records, v_zip_cdirsize / kZipCdirHdrLinkableSize); -ZIPCONST(v_zip_commentsize, _edata - __zip_end - kZipCdirHdrMinSize); +ZIPCONST(v_zip_commentsize, 0); #if SupportsXnu() /* Generates deterministic ID. */ diff --git a/build/bootstrap/zipobj.com b/build/bootstrap/zipobj.com index f822251ef861efa4b807e36c5984bdbe5b342767..7c31177b534d5471e018265255ec63e2da8034c4 100755 GIT binary patch literal 126976 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

j6m#j7RqA0raVvu$Zv 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�`XAnrls$AI?A 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 AE&u=k literal 172032 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 ++i) { for (p = mm->e820[i].addr, pe = mm->e820[i].addr + mm->e820[i].size; @@ -126,7 +126,7 @@ static noasan texthead void __invert_memory(struct mman *mm, uint64_t *pml4t) { } } -noasan texthead void __setup_mman(struct mman *mm, uint64_t *pml4t) { +noasan textreal void __setup_mman(struct mman *mm, uint64_t *pml4t) { __normalize_e820(mm); __invert_memory(mm, pml4t); } diff --git a/test/libc/str/undeflate_test.c b/test/libc/str/undeflate_test.c index dd1df089c..9f26d593a 100644 --- a/test/libc/str/undeflate_test.c +++ b/test/libc/str/undeflate_test.c @@ -113,7 +113,7 @@ TEST(undeflate, testEmbeddedCompressedZipFile_theHardWay) { ASSERT_TRUE(found); } -//////////////////////////////////////////////////////////////////////////////// +#if 0 /* todo: don't rely on __zip_end */ uint8_t *buf_; size_t bufsize_; @@ -165,3 +165,5 @@ BENCH(undeflate, bench) { EZBENCH(donothing, Inflate()); EZBENCH(donothing, Undeflate()); } + +#endif diff --git a/tool/build/zipobj.c b/tool/build/zipobj.c index 30584bc1d..f80c4e6fd 100644 --- a/tool/build/zipobj.c +++ b/tool/build/zipobj.c @@ -52,8 +52,8 @@ #include "third_party/zlib/zlib.h" #include "tool/build/lib/elfwriter.h" -#define ZIP_LOCALFILE_SECTION ".piro.data.sort.zip.2." -#define ZIP_DIRECTORY_SECTION ".piro.data.sort.zip.4." +#define ZIP_LOCALFILE_SECTION ".zip.2." +#define ZIP_DIRECTORY_SECTION ".zip.4." #define PUT8(P, V) *P++ = V #define PUT16(P, V) P[0] = V & 0xff, P[1] = V >> 010 & 0xff, P += 2 @@ -218,9 +218,8 @@ void EmitZip(struct ElfWriter *elf, const char *name, size_t namesize, /* emit embedded file content w/ pkzip local file header */ elfwriter_align(elf, kZipCdirAlign, 0); - elfwriter_startsection(elf, - gc(xasprintf("%s%s", ZIP_LOCALFILE_SECTION, name)), - SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); + elfwriter_startsection( + elf, gc(xasprintf("%s%s", ZIP_LOCALFILE_SECTION, name)), SHT_PROGBITS, 0); if (method == kZipCompressionDeflate) { CHECK_EQ(Z_OK, deflateInit2(memset(&zs, 0, sizeof(zs)), Z_DEFAULT_COMPRESSION, Z_DEFLATED, -MAX_WBITS, @@ -257,9 +256,8 @@ void EmitZip(struct ElfWriter *elf, const char *name, size_t namesize, /* emit central directory record */ elfwriter_align(elf, kZipCdirAlign, 0); - elfwriter_startsection(elf, - gc(xasprintf("%s%s", ZIP_DIRECTORY_SECTION, name)), - SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); + elfwriter_startsection( + elf, gc(xasprintf("%s%s", ZIP_DIRECTORY_SECTION, name)), SHT_PROGBITS, 0); EmitZipCdirHdr((cfile = elfwriter_reserve(elf, kZipCdirHdrLinkableSize)), name, namesize, crc, era, gflags, method, mtime, mdate, iattrs, dosmode, st->st_mode, compsize, uncompsize, commentsize); diff --git a/tool/net/greenbean.c b/tool/net/greenbean.c deleted file mode 100644 index 90b897ed5..000000000 --- a/tool/net/greenbean.c +++ /dev/null @@ -1,1291 +0,0 @@ -/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│ -│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│ -╞══════════════════════════════════════════════════════════════════════════════╡ -│ Copyright 2020 Justine Alexandra Roberts Tunney │ -│ │ -│ Permission to use, copy, modify, and/or distribute this software for │ -│ any purpose with or without fee is hereby granted, provided that the │ -│ above copyright notice and this permission notice appear in all copies. │ -│ │ -│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │ -│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │ -│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │ -│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │ -│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │ -│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │ -│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │ -│ PERFORMANCE OF THIS SOFTWARE. │ -╚─────────────────────────────────────────────────────────────────────────────*/ -#include "libc/alg/arraylist2.internal.h" -#include "libc/bits/bits.h" -#include "libc/bits/bswap.h" -#include "libc/bits/safemacros.h" -#include "libc/calls/calls.h" -#include "libc/calls/struct/iovec.h" -#include "libc/calls/struct/itimerval.h" -#include "libc/calls/struct/stat.h" -#include "libc/calls/weirdtypes.h" -#include "libc/fmt/conv.h" -#include "libc/fmt/fmt.h" -#include "libc/fmt/itoa.h" -#include "libc/log/check.h" -#include "libc/log/log.h" -#include "libc/macros.h" -#include "libc/math.h" -#include "libc/mem/mem.h" -#include "libc/nexgen32e/crc32.h" -#include "libc/rand/rand.h" -#include "libc/runtime/gc.h" -#include "libc/runtime/runtime.h" -#include "libc/sock/epoll.h" -#include "libc/sock/sock.h" -#include "libc/stdio/stdio.h" -#include "libc/str/str.h" -#include "libc/str/undeflate.h" -#include "libc/sysv/consts/af.h" -#include "libc/sysv/consts/auxv.h" -#include "libc/sysv/consts/clock.h" -#include "libc/sysv/consts/epoll.h" -#include "libc/sysv/consts/ex.h" -#include "libc/sysv/consts/exit.h" -#include "libc/sysv/consts/f.h" -#include "libc/sysv/consts/fd.h" -#include "libc/sysv/consts/inaddr.h" -#include "libc/sysv/consts/ipproto.h" -#include "libc/sysv/consts/itimer.h" -#include "libc/sysv/consts/map.h" -#include "libc/sysv/consts/o.h" -#include "libc/sysv/consts/prot.h" -#include "libc/sysv/consts/sa.h" -#include "libc/sysv/consts/shut.h" -#include "libc/sysv/consts/sig.h" -#include "libc/sysv/consts/so.h" -#include "libc/sysv/consts/sock.h" -#include "libc/sysv/consts/sol.h" -#include "libc/sysv/consts/tcp.h" -#include "libc/sysv/errfuns.h" -#include "libc/time/struct/tm.h" -#include "libc/time/time.h" -#include "libc/x/x.h" -#include "libc/zip.h" -#include "libc/zipos/zipos.internal.h" -#include "net/http/http.h" -#include "third_party/getopt/getopt.h" -#include "third_party/zlib/zlib.h" - -/** - * @fileoverview redbean.c modified for epoll tutorial - * This'll work on Linux and Windows but BSD is TODO - * TODO(jart): fix memory bug - */ - -#define USAGE \ - " [-hvdsm] [-p PORT]\n\ -\n\ -DESCRIPTION\n\ -\n\ - greenbean distributable static web server\n\ -\n\ -FLAGS\n\ -\n\ - -h help\n\ - -v verbosity\n\ - -d daemonize\n\ - -s uniprocess\n\ - -m log messages\n\ - -c INT cache seconds\n\ - -r /X=/Y redirect X to Y\n\ - -l ADDR listen ip [default 0.0.0.0]\n\ - -p PORT listen port [default 8080]\n\ - -L PATH log file location\n\ - -P PATH pid file location\n\ - -U INT daemon set user id\n\ - -G INT daemon set group id\n\ - -B STR changes server header\n\ -\n\ -FEATURES\n\ -\n\ - - HTTP v1.1\n\ - - Content-Encoding\n\ - - Range / Content-Range\n\ - - Last-Modified / If-Modified-Since\n\ -\n\ -USAGE\n\ -\n\ - This executable is also a ZIP file that contains static assets.\n\ -\n\ - unzip -vl greenbean.com # shows listing of zip contents\n\ -\n\ - Audio video content should not be compressed in your ZIP files.\n\ - Uncompressed assets enable browsers to send Range HTTP request.\n\ - On the other hand compressed assets are best for gzip encoding.\n\ -\n\ - zip greenbean.com index.html # adds file\n\ - zip -0 greenbean.com video.mp4 # adds without compression\n\ -\n\ - Each connection uses a point in time snapshot of your ZIP file.\n\ - If your ZIP is deleted then serving continues. If it's replaced\n\ - then issuing SIGUSR1 (or SIGHUP if daemon) will reindex the zip\n\ - for subsequent connections without interrupting active ones. If\n\ - SIGINT or SIGTERM is issued then a graceful shutdown is started\n\ - but if it's issued a second time, active connections are reset.\n\ -\n" - -#define HASH_LOAD_FACTOR /* 1. / */ 4 -#define DEFAULT_PORT 8080 -#define DEFAULT_SERVER "greenbean/0.1" -#define DEFAULT_CONTENT_TYPE "application/octet-stream" -#define DEFAULT_PATH "/tool/net/redbean.html" -#define FAVICON "tool/net/redbean.ico" - -#define STPCPY(p, s) mempcpy(p, s, strlen(s)) -#define AppendHeaderName(p, s) STPCPY(STPCPY(p, s), ": ") - -struct Client { - uint32_t poison; - struct Client *prev; - struct Client *next; - int fd; - int iovlen; - bool closeit; - uint32_t insize; - uint32_t addrsize; - uint8_t gzip_footer[8]; - struct sockaddr_in addr; - long double startrequest; - long double startconnection; - struct HttpRequest req; - struct iovec iov[8]; - char addrstr[32]; - char outbuf[1500]; - char inbuf[2048]; -}; - -static const struct itimerval kHeartbeat = { - {0, 500000}, - {0, 500000}, -}; - -static const uint8_t kGzipHeader[] = { - 0x1F, // MAGNUM - 0x8B, // MAGNUM - 0x08, // CM: DEFLATE - 0x00, // FLG: NONE - 0x00, // MTIME: NONE - 0x00, // - 0x00, // - 0x00, // - 0x00, // XFL - kZipOsUnix, // OS -}; - -static const struct ContentTypeExtension { - unsigned char ext[8]; - const char *mime; -} kContentTypeExtension[] = { - {"S", "text/plain"}, // - {"bmp", "image/x-ms-bmp"}, // - {"c", "text/plain"}, // - {"cc", "text/plain"}, // - {"css", "text/css"}, // - {"csv", "text/csv"}, // - {"gif", "image/gif"}, // - {"h", "text/plain"}, // - {"html", "text/html"}, // - {"i", "text/plain"}, // - {"ico", "image/vnd.microsoft.icon"}, // - {"jpeg", "image/jpeg"}, // - {"jpg", "image/jpeg"}, // - {"js", "application/javascript"}, // - {"json", "application/json"}, // - {"m4a", "audio/mpeg"}, // - {"mp2", "audio/mpeg"}, // - {"mp3", "audio/mpeg"}, // - {"mp4", "video/mp4"}, // - {"mpg", "video/mpeg"}, // - {"otf", "font/otf"}, // - {"pdf", "application/pdf"}, // - {"png", "image/png"}, // - {"png", "image/png"}, // - {"png", "image/png"}, // - {"png", "image/png"}, // - {"s", "text/plain"}, // - {"svg", "image/svg+xml"}, // - {"tiff", "image/tiff"}, // - {"ttf", "font/ttf"}, // - {"txt", "text/plain"}, // - {"wav", "audio/x-wav"}, // - {"woff", "font/woff"}, // - {"woff2", "font/woff2"}, // - {"xml", "application/xml"}, // - {"zip", "application/zip"}, // -}; - -static struct Redirects { - size_t i, n; - struct Redirect { - const char *path; - size_t pathlen; - const char *dest; - } * p; -} redirects; - -static struct Assets { - uint32_t n; - struct Asset { - uint32_t hash; - uint32_t cf; - int64_t lastmodified; - char *lastmodifiedstr; - } * p; -} assets; - -static bool killed; -static bool notimer; -static bool heartbeat; -static bool daemonize; -static bool terminated; -static bool uniprocess; -static bool legacyhttp; -static bool invalidated; -static bool logmessages; - -static int epfd; -static int gmtoff; -static int server; -static int daemonuid; -static int daemongid; -static int cacheseconds; - -static void *zmap; -static uint8_t *zbase; -static uint8_t *zcdir; -static size_t zmapsize; -static const char *pidpath; -static const char *logpath; -static int64_t programtime; -static struct Client *clients; -static const char *programfile; -static const char *serverheader; - -static long double nowish; -static struct sockaddr_in serveraddr; - -static char currentdate[32]; -static char serveraddrstr[32]; - -static void OnHup(void) { - invalidated = true; -} - -static void OnAlarm(void) { - heartbeat = true; -} - -static void OnTerminate(void) { - if (terminated) { - killed = true; - } else { - terminated = true; - } -} - -static void AddRedirect(const char *arg) { - const char *p; - struct Redirect r; - CHECK_NOTNULL((p = strchr(arg, '='))); - CHECK_GT(p - arg, 0); - r.path = arg; - r.pathlen = p - arg; - r.dest = strdup(p + 1); - APPEND(&redirects.p, &redirects.i, &redirects.n, &r); -} - -static int CompareRedirects(const struct Redirect *a, - const struct Redirect *b) { - return strcmp(a->path, b->path); -} - -static void SortRedirects(void) { - qsort(redirects.p, redirects.i, sizeof(struct Redirect), - (void *)CompareRedirects); -} - -static const char *LookupRedirect(const char *path, size_t n) { - int c, m, l, r, z; - l = 0; - r = redirects.i - 1; - while (l <= r) { - m = (l + r) >> 1; - c = memcmp(redirects.p[m].path, path, MIN(redirects.p[m].pathlen, n)); - if (c < 0) { - l = m + 1; - } else if (c > 0) { - r = m - 1; - } else if (redirects.p[m].pathlen < n) { - l = m + 1; - } else if (redirects.p[m].pathlen > n) { - r = m - 1; - } else { - return redirects.p[m].dest; - } - } - return NULL; -} - -static int CompareInts(const uint64_t x, uint64_t y) { - return x > y ? 1 : x < y ? -1 : 0; -} - -static const char *LookupContentType(uint64_t ext) { - int c, m, l, r; - l = 0; - r = ARRAYLEN(kContentTypeExtension) - 1; - while (l <= r) { - m = (l + r) >> 1; - c = CompareInts(READ64BE(kContentTypeExtension[m].ext), ext); - if (c < 0) { - l = m + 1; - } else if (c > 0) { - r = m - 1; - } else { - return kContentTypeExtension[m].mime; - } - } - return DEFAULT_CONTENT_TYPE; -} - -static const char *GetContentType(const char *path, size_t n) { - size_t i; - uint64_t x; - const char *p; - if ((p = memrchr(path, '.', n))) { - for (x = 0, i = n; i-- > p + 1 - path;) { - x <<= 8; - x |= path[i] & 0xFF; - } - return LookupContentType(bswap_64(x)); - } else { - return DEFAULT_CONTENT_TYPE; - } -} - -static wontreturn void PrintUsage(FILE *f, int rc) { - fprintf(f, "SYNOPSIS\n\n %s%s", program_invocation_name, USAGE); - exit(rc); -} - -static void DescribeAddress(char buf[32], const struct sockaddr_in *addr) { - char *p = buf; - const uint8_t *ip4 = (const uint8_t *)&addr->sin_addr.s_addr; - p += uint64toarray_radix10(ip4[0], p), *p++ = '.'; - p += uint64toarray_radix10(ip4[1], p), *p++ = '.'; - p += uint64toarray_radix10(ip4[2], p), *p++ = '.'; - p += uint64toarray_radix10(ip4[3], p), *p++ = ':'; - p += uint64toarray_radix10(ntohs(addr->sin_port), p); - *p = '\0'; -} - -void GetOpts(int argc, char *argv[]) { - int opt; - serveraddr.sin_family = AF_INET; - serveraddr.sin_port = htons(DEFAULT_PORT); - serveraddr.sin_addr.s_addr = INADDR_ANY; - while ((opt = getopt(argc, argv, "hduvml:p:w:r:c:L:P:U:G:B:")) != -1) { - switch (opt) { - case 'v': - g_loglevel++; - break; - case 'd': - daemonize = true; - break; - case 'u': - uniprocess = true; - break; - case 'm': - logmessages = true; - break; - case 'r': - AddRedirect(optarg); - break; - case 'c': - cacheseconds = atoi(optarg); - break; - case 'p': - CHECK_NE(0xFFFF, (serveraddr.sin_port = htons(parseport(optarg)))); - break; - case 'l': - CHECK_EQ(1, inet_pton(AF_INET, optarg, &serveraddr.sin_addr)); - break; - case 'B': - serverheader = optarg; - break; - case 'L': - logpath = optarg; - break; - case 'P': - pidpath = optarg; - break; - case 'U': - daemonuid = atoi(optarg); - break; - case 'G': - daemonuid = atoi(optarg); - break; - case 'h': - PrintUsage(stdout, EXIT_SUCCESS); - default: - PrintUsage(stderr, EX_USAGE); - } - } - SortRedirects(); - if (logpath) { - CHECK_NOTNULL(freopen(logpath, "a", stderr)); - } -} - -static void Daemonize(void) { - char ibuf[21]; - int i, fd, pid; - for (i = 0; i < 128; ++i) close(i); - xsigaction(SIGHUP, OnHup, 0, 0, 0); - CHECK_NE(-1, (pid = fork())); - if (pid > 0) exit(0); - if (pid == -1) return; - CHECK_NE(-1, setsid()); - CHECK_NE(-1, (pid = fork())); - if (pid > 0) _exit(0); - LOGIFNEG1(umask(0)); - if (pidpath) { - CHECK_NE(-1, (fd = open(pidpath, O_CREAT | O_EXCL | O_WRONLY, 0644))); - CHECK_NE(-1, write(fd, ibuf, uint64toarray_radix10(getpid(), ibuf))); - LOGIFNEG1(close(fd)); - } - if (!logpath) logpath = "/dev/null"; - CHECK_NOTNULL(freopen("/dev/null", "r", stdin)); - CHECK_NOTNULL(freopen(logpath, "a", stdout)); - CHECK_NOTNULL(freopen(logpath, "a", stderr)); -} - -static int CompareHeaderValue(struct Client *c, int h, const char *s) { - return strncmp(s, c->inbuf + c->req.headers[h].a, - c->req.headers[h].b - c->req.headers[h].a); -} - -static size_t GetIovSize(struct iovec *iov, int iovlen) { - int i; - size_t size; - for (size = i = 0; i < iovlen; ++i) { - DCHECK_NOTNULL(iov[i].iov_base); - size += iov[i].iov_len; - } - return size; -} - -static ssize_t WriteSome(int fd, struct iovec *iov, int iovlen) { - ssize_t rc; - size_t wrote, n; - if ((rc = writev(fd, iov, iovlen)) != -1) { - wrote = n = rc; - do { - if (n >= iov->iov_len) { - iov->iov_len = 0; - n -= iov->iov_len; - ++iov; - --iovlen; - } else { - iov->iov_base = (char *)iov->iov_base + n; - iov->iov_len -= n; - n = 0; - } - } while (n); - return wrote; - } else if (errno == EINTR) { - return 0; - } else { - return -1; - } -} - -static uint32_t Hash(const void *data, size_t size) { - uint32_t h; - h = crc32c(0, data, size); - if (!h) h = 1; - return h; -} - -static bool HasHeader(struct Client *c, int h) { - return c->req.headers[h].b > c->req.headers[h].a; -} - -int64_t GetGmtOffset(void) { - int64_t t; - struct tm tm; - t = nowl(); - localtime_r(&t, &tm); - return tm.tm_gmtoff; -} - -static int64_t LocoTimeToZulu(int64_t x) { - return x - gmtoff; -} - -static int64_t GetLastModifiedZip(uint8_t *cfile) { - uint8_t *p, *pe; - for (p = ZIP_CFILE_EXTRA(cfile), pe = p + ZIP_CFILE_EXTRASIZE(cfile); p < pe; - p += ZIP_EXTRA_SIZE(p)) { - if (ZIP_EXTRA_HEADERID(p) == kZipExtraNtfs) { - return LocoTimeToZulu(READ64LE(ZIP_EXTRA_CONTENT(p) + 8) / - HECTONANOSECONDS - - MODERNITYSECONDS); - } else if (ZIP_EXTRA_HEADERID(p) == kZipExtraExtendedTimestamp) { - return READ32LE(ZIP_EXTRA_CONTENT(p) + 1); - } - } - return LocoTimeToZulu(DosDateTimeToUnix(ZIP_CFILE_LASTMODIFIEDDATE(cfile), - ZIP_CFILE_LASTMODIFIEDTIME(cfile))); -} - -static bool IsCompressed(struct Asset *a) { - return ZIP_CFILE_COMPRESSIONMETHOD(zbase + a->cf) == kZipCompressionDeflate; -} - -static int GetHttpVersion(struct Client *c) { - return ParseHttpVersion(c->inbuf + c->req.version.a, - c->req.version.b - c->req.version.a); -} - -static bool IsNotModified(struct Client *c, struct Asset *a) { - if (!HasHeader(c, kHttpIfModifiedSince)) return false; - return a->lastmodified >= - ParseHttpDateTime(c->inbuf + c->req.headers[kHttpIfModifiedSince].a, - c->req.headers[kHttpIfModifiedSince].b - - c->req.headers[kHttpIfModifiedSince].a); -} - -static char *FormatUnixHttpDateTime(char *s, int64_t t) { - struct tm tm; - gmtime_r(&t, &tm); - FormatHttpDateTime(s, &tm); - return s; -} - -static void FreeAssetsIndex(struct Asset *p, size_t n) { - int i; - if (p) { - for (i = 0; i < n; ++i) { - free(p[i].lastmodifiedstr); - } - free(p); - } -} - -static bool IndexAssets(const uint8_t *base, const uint8_t *cdir) { - bool ok; - int64_t lm; - struct Asset *p; - uint32_t i, n, m, cf, step, hash; - DCHECK_GE(HASH_LOAD_FACTOR, 2); - n = ZIP_CDIR_RECORDS(cdir); - m = roundup2pow(MAX(1, n) * HASH_LOAD_FACTOR); - p = calloc(m, sizeof(struct Asset)); - ok = ZIP_CDIR_MAGIC(cdir) == kZipCdirHdrMagic; - if (p && ok) { - for (cf = ZIP_CDIR_OFFSET(cdir); n--; cf += ZIP_CFILE_HDRSIZE(base + cf)) { - if (ZIP_CFILE_MAGIC(base + cf) == kZipCfileHdrMagic) { - hash = Hash(ZIP_CFILE_NAME(base + cf), ZIP_CFILE_NAMESIZE(base + cf)); - step = 0; - do { - i = (hash + (step * (step + 1)) >> 1) & (m - 1); - ++step; - } while (p[i].hash); - lm = GetLastModifiedZip(base + cf); - p[i].hash = hash; - p[i].cf = cf; - p[i].lastmodified = lm; - p[i].lastmodifiedstr = FormatUnixHttpDateTime(xmalloc(30), lm); - } else { - WARNF("corrupt zip central directory entry"); - ok = false; - break; - } - } - } else { - WARNF("corrupt zip central directory"); - } - if (ok) { - FreeAssetsIndex(assets.p, assets.n); - assets.p = p; - assets.n = m; - } else { - FreeAssetsIndex(p, m); - } - return ok; -} - -static bool OpenZip(const char *path) { - int fd; - bool ok; - void *map; - struct stat st; - const uint8_t *cdir; - if (zmap) { - LOGIFNEG1(munmap(zmap, zmapsize)); - } - if (!zmap && ZIP_CDIR_MAGIC(__zip_end) == kZipCdirHdrMagic) { - if (IndexAssets(_base, __zip_end)) { - ok = true; - zbase = _base; - zcdir = __zip_end; - } else { - ok = false; - } - } else { - fd = -1; - map = MAP_FAILED; - if ((fd = open(path, O_RDONLY)) != -1 && fstat(fd, &st) != -1 && - st.st_size && - (map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0)) && - (cdir = zipfindcentraldir(zmap, zmapsize)) && IndexAssets(map, cdir)) { - ok = true; - zmap = map; - zbase = map; - zcdir = cdir; - map = MAP_FAILED; - zmapsize = st.st_size; - } else { - ok = false; - } - if (map != MAP_FAILED) LOGIFNEG1(munmap(map, st.st_size)); - if (fd != -1) LOGIFNEG1(close(fd)); - } - return ok; -} - -static struct Asset *FindAsset(const char *path, size_t pathlen) { - uint32_t i, step, hash; - if (pathlen && path[0] == '/') ++path, --pathlen; - hash = Hash(path, pathlen); - for (step = 0;; ++step) { - i = (hash + (step * (step + 1)) >> 1) & (assets.n - 1); - if (!assets.p[i].hash) return NULL; - if (hash == assets.p[i].hash && - pathlen == ZIP_CFILE_NAMESIZE(zbase + assets.p[i].cf) && - memcmp(path, ZIP_CFILE_NAME(zbase + assets.p[i].cf), pathlen) == 0) { - return &assets.p[i]; - } - } -} - -static struct Asset *FindFile(const char *path, size_t pathlen) { - char *p, *buf; - struct Asset *asset; - if ((asset = FindAsset(path, pathlen))) return asset; - if (pathlen == 12 && memcmp(path, "/favicon.ico", 12) == 0) { - return FindAsset(FAVICON, strlen(FAVICON)); - } else { - return NULL; - } -} - -static void *AddRange(char *content, long start, long length) { - intptr_t mend, mstart; - if (!__builtin_add_overflow((intptr_t)content, start, &mstart) || - !__builtin_add_overflow(mstart, length, &mend) || - ((intptr_t)zbase <= mstart && mstart <= (intptr_t)zbase + zmapsize) || - ((intptr_t)zbase <= mend && mend <= (intptr_t)zbase + zmapsize)) { - return (void *)mstart; - } else { - abort(); - } -} - -static bool IsConnectionClose(struct Client *c) { - int n; - char *p; - p = c->inbuf + c->req.headers[kHttpConnection].a; - n = c->req.headers[kHttpConnection].b - c->req.headers[kHttpConnection].a; - return n == 5 && memcmp(p, "close", 5) == 0; -} - -static char *AppendCrlf(char *p) { - return STPCPY(p, "\r\n"); -} - -#define AppendStatus(p, c, s) AppendStatus(p, c, s, sizeof(s) - 1) -static char *(AppendStatus)(char *p, int c, const char *s, size_t n) { - if (legacyhttp) { - p = STPCPY(p, "HTTP/1.0 "); - } else { - p = STPCPY(p, "HTTP/1.1 "); - } - p += uint64toarray_radix10(c, p); - *p++ = ' '; - p = mempcpy(p, s, n); - return AppendCrlf(p); -} - -static void UpdateCurrentDate(long double now) { - int64_t t; - struct tm tm; - t = nowish = now; - gmtime_r(&t, &tm); - FormatHttpDateTime(currentdate, &tm); -} - -static char *AppendDate(char *p) { - p = AppendHeaderName(p, "Date"); - p = mempcpy(p, currentdate, 29); - return AppendCrlf(p); -} - -static char *AppendLastModified(char *p, const char *s) { - p = AppendHeaderName(p, "Last-Modified"); - p = mempcpy(p, s, 29); - return AppendCrlf(p); -} - -static char *AppendServer(char *p) { - const char *s; - if (*(s = firstnonnull(serverheader, DEFAULT_SERVER))) { - p = AppendHeaderName(p, "Server"); - p = stpcpy(p, s); - p = AppendCrlf(p); - } - return p; -} - -static char *AppendConnectionClose(char *p) { - p = AppendHeaderName(p, "Connection"); - p = STPCPY(p, "close"); - return AppendCrlf(p); -} - -static char *AppendAcceptRangesBytes(char *p) { - p = AppendHeaderName(p, "Accept-Ranges"); - p = STPCPY(p, "bytes"); - return AppendCrlf(p); -} - -static char *AppendNosniff(char *p) { - p = AppendHeaderName(p, "X-Content-Type-Options"); - p = STPCPY(p, "nosniff"); - return AppendCrlf(p); -} - -static char *AppendContentType(char *p, const char *ct) { - p = AppendHeaderName(p, "Content-Type"); - p = stpcpy(p, ct); - if (startswith(ct, "text/")) { - p = STPCPY(p, "; charset=utf-8"); - } - return AppendCrlf(p); -} - -static char *AppendContentTypeTextPlain(char *p) { - return AppendContentType(p, "text/plain"); -} - -static char *AppendExpires(char *p, int64_t t) { - struct tm tm; - gmtime_r(&t, &tm); - p = AppendHeaderName(p, "Expires"); - p = FormatHttpDateTime(p, &tm); - return AppendCrlf(p); -} - -static char *AppendVaryContentEncoding(char *p) { - p = AppendHeaderName(p, "Vary"); - p = STPCPY(p, "Accept-Encoding"); - return AppendCrlf(p); -} - -static char *AppendCache(char *p) { - int x; - x = cacheseconds; - if (!x) return p; - x = MAX(0, x); - p = AppendHeaderName(p, "Cache-Control"); - p = STPCPY(p, "max-age="); - p += uint64toarray_radix10(x, p); - if (x) p = STPCPY(p, ", public"); - p = AppendCrlf(p); - return AppendExpires(p, nowish + cacheseconds); -} - -static char *AppendContentLength(char *p, size_t n) { - p = AppendHeaderName(p, "Content-Length"); - p += uint64toarray_radix10(n, p); - return AppendCrlf(p); -} - -static char *AppendContentRange(char *p, long rangestart, long rangelength, - long contentlength) { - long endrange; - CHECK_GE(rangestart + rangelength, rangestart); - CHECK_LE(rangestart + rangelength, contentlength); - if (__builtin_add_overflow(rangestart, rangelength, &endrange)) abort(); - p = AppendHeaderName(p, "Content-Range"); - p = STPCPY(p, "bytes "); - p += uint64toarray_radix10(rangestart, p); - *p++ = '-'; - p += uint64toarray_radix10(endrange, p); - *p++ = '/'; - p += uint64toarray_radix10(contentlength, p); - return AppendCrlf(p); -} - -static char *AppendContentEncodingGzip(char *p) { - p = AppendHeaderName(p, "Content-Encoding"); - p = STPCPY(p, "gzip"); - return AppendCrlf(p); -} - -static char *AppendRedirect(struct Client *c, char *p, const char *s) { - VERBOSEF("%s %s %.*s redirect %s", c->addrstr, kHttpMethod[c->req.method], - c->req.uri.b - c->req.uri.a, c->inbuf + c->req.uri.a, s); - p = AppendStatus(p, 302, "Temporary Redirect"); - p = AppendHeaderName(p, "Location"); - p = STPCPY(p, s); - return AppendCrlf(p); -} - -static bool InflateTiny(uint8_t *outbuf, size_t outsize, const uint8_t *inbuf, - size_t insize) { - struct DeflateState ds; - return undeflate(outbuf, outsize, inbuf, insize, &ds) != -1; -} - -static bool InflateZlib(uint8_t *outbuf, size_t outsize, const uint8_t *inbuf, - size_t insize) { - bool ok; - z_stream zs; - ok = false; - zs.next_in = inbuf; - zs.avail_in = insize; - zs.total_in = insize; - zs.next_out = outbuf; - zs.avail_out = outsize; - zs.total_out = outsize; - zs.zfree = Z_NULL; - zs.zalloc = Z_NULL; - if (inflateInit2(&zs, -MAX_WBITS) == Z_OK) { - switch (inflate(&zs, Z_NO_FLUSH)) { - case Z_STREAM_END: - ok = true; - break; - case Z_MEM_ERROR: - WARNF("Z_MEM_ERROR"); - break; - case Z_DATA_ERROR: - WARNF("Z_DATA_ERROR"); - break; - case Z_NEED_DICT: - WARNF("Z_NEED_DICT"); - break; - default: - abort(); - } - inflateEnd(&zs); - } - return ok; -} - -static bool Inflate(uint8_t *outbuf, size_t outsize, const uint8_t *inbuf, - size_t insize) { - if (IsTiny()) { - return InflateTiny(outbuf, outsize, inbuf, insize); - } else { - return InflateZlib(outbuf, outsize, inbuf, insize); - } -} - -static void LogRequestLatency(struct Client *c) { - long double now = nowl(); - LOGF("%s latency req %,16ldns conn %,16ldns", c->addrstr, - (long)((now - c->startrequest) * 1e9), - (long)((now - c->startconnection) * 1e9)); -} - -bool HandleRequest(struct Client *c) { - char *p; - int msgsize; - bool gzipped; - void *content; - size_t pathlen; - struct Asset *a; - unsigned version; - const char *path, *location; - long lf, contentlength, actualcontentlength, rangestart, rangelength; - p = c->outbuf; - content = ""; - gzipped = false; - contentlength = -1; - c->closeit = false; - if ((msgsize = ParseHttpRequest(&c->req, c->inbuf, c->insize)) != -1) { - if (!msgsize) return false; - if (logmessages) { - LOGF("%s received %,d byte message\n%.*s", c->addrstr, c->req.length, - c->req.length - 4, c->inbuf); - } - version = GetHttpVersion(c); - if (version < 101) c->closeit = true, legacyhttp = true; - if (version <= 101) { - if (IsConnectionClose(c)) c->closeit = true; - path = c->inbuf + c->req.uri.a; - pathlen = c->req.uri.b - c->req.uri.a; - if (c->req.method == kHttpGet || c->req.method == kHttpHead) { - if (ParseContentLength(&c->req, c->inbuf)) c->closeit = true; - VERBOSEF( - "%s %s %.*s referer %.*s", c->addrstr, kHttpMethod[c->req.method], - pathlen, path, - c->req.headers[kHttpReferer].b - c->req.headers[kHttpReferer].a, - c->inbuf + c->req.headers[kHttpReferer].a); - if ((location = LookupRedirect(path, pathlen))) { - p = AppendRedirect(c, p, DEFAULT_PATH); - } else if ((a = FindFile(path, pathlen))) { - if (IsNotModified(c, a)) { - VERBOSEF("%s %s %.*s not modified", c->addrstr, - kHttpMethod[c->req.method], pathlen, path); - p = AppendStatus(p, 304, "Not Modified"); - } else { - lf = ZIP_CFILE_OFFSET(zbase + a->cf); - content = ZIP_LFILE_CONTENT(zbase + lf); - contentlength = ZIP_CFILE_COMPRESSEDSIZE(zbase + a->cf); - if (IsCompressed(a)) { - if (memmem(c->inbuf + c->req.headers[kHttpAcceptEncoding].a, - c->req.headers[kHttpAcceptEncoding].b - - c->req.headers[kHttpAcceptEncoding].a, - "gzip", 4)) { - gzipped = true; - memcpy(c->gzip_footer + 0, zbase + a->cf + kZipCfileOffsetCrc32, - 4); - memcpy(c->gzip_footer + 4, - zbase + a->cf + kZipCfileOffsetUncompressedsize, 4); - p = AppendStatus(p, 200, "OK"); - p = AppendContentEncodingGzip(p); - } else if (Inflate( - (content = gc(xmalloc( - ZIP_CFILE_UNCOMPRESSEDSIZE(zbase + a->cf)))), - (contentlength = - ZIP_CFILE_UNCOMPRESSEDSIZE(zbase + a->cf)), - ZIP_LFILE_CONTENT(zbase + lf), - ZIP_CFILE_COMPRESSEDSIZE(zbase + a->cf))) { - p = AppendStatus(p, 200, "OK"); - } else { - WARNF("%s %s %.*s internal server error", c->addrstr, - kHttpMethod[c->req.method], pathlen, path); - p = AppendStatus(p, 500, "Internal Server Error"); - content = "Internal Server Error\r\n"; - contentlength = -1; - } - } else if (HasHeader(c, kHttpRange)) { - if (ParseHttpRange(c->inbuf + c->req.headers[kHttpRange].a, - c->req.headers[kHttpRange].b - - c->req.headers[kHttpRange].a, - contentlength, &rangestart, &rangelength)) { - p = AppendStatus(p, 206, "Partial Content"); - p = AppendContentRange(p, rangestart, rangelength, - contentlength); - content = AddRange(content, rangestart, rangelength); - contentlength = rangelength; - } else { - WARNF( - "%s %s %.*s bad range %`'.*s", c->addrstr, - kHttpMethod[c->req.method], pathlen, path, - c->req.headers[kHttpRange].b - c->req.headers[kHttpRange].a, - c->inbuf + c->req.headers[kHttpRange].a); - p = AppendStatus(p, 416, "Range Not Satisfiable"); - p = AppendContentRange(p, rangestart, rangelength, - contentlength); - content = ""; - contentlength = 0; - } - } else { - p = AppendStatus(p, 200, "OK"); - } - } - p = AppendLastModified(p, a->lastmodifiedstr); - p = AppendContentType(p, GetContentType(path, pathlen)); - p = AppendCache(p); - if (!IsCompressed(a)) { - p = AppendAcceptRangesBytes(p); - } else { - p = AppendVaryContentEncoding(p); - } - } else { - WARNF("%s %s %.*s not found", c->addrstr, kHttpMethod[c->req.method], - pathlen, path); - p = AppendStatus(p, 404, "Not Found"); - p = AppendContentTypeTextPlain(p); - content = "Not Found\r\n"; - } - } else { - WARNF("%s %s %.*s method not allowed", c->addrstr, - kHttpMethod[c->req.method], pathlen, path); - p = AppendStatus(p, 405, "method not allowed"); - p = AppendContentTypeTextPlain(p); - content = "Method Not Allowed\r\n"; - c->closeit = true; - } - } else { - WARNF("%s http version not supported %`'.*s", c->addrstr, - c->req.version.b - c->req.version.a, c->inbuf + c->req.version.a); - p = AppendStatus(p, 505, "HTTP Version Not Supported"); - p = AppendContentTypeTextPlain(p); - content = "HTTP Version Not Supported\r\n"; - c->closeit = true; - } - } else { - WARNF("%s parse error %s", c->addrstr, strerror(errno)); - p = AppendStatus(p, 400, "Bad Request"); - p = AppendContentTypeTextPlain(p); - content = "Bad Request\r\n"; - c->closeit = true; - } - p = AppendDate(p); - p = AppendNosniff(p); - p = AppendServer(p); - if (c->closeit) p = AppendConnectionClose(p); - if (contentlength == -1) contentlength = strlen(content); - actualcontentlength = contentlength; - if (gzipped) { - actualcontentlength += sizeof(kGzipHeader) + sizeof(c->gzip_footer); - } - p = AppendContentLength(p, actualcontentlength); - p = AppendCrlf(p); - if (logmessages) { - LOGF("%s sending %,d byte message\n%.*s", c->addrstr, p - c->outbuf, - p - c->outbuf - 4, c->outbuf); - } - CHECK_LT(p, c->outbuf + sizeof(c->outbuf)); - c->iovlen = 0; - c->iov[c->iovlen].iov_base = c->outbuf; - c->iov[c->iovlen].iov_len = p - c->outbuf; - ++c->iovlen; - if (c->req.method != kHttpHead) { - if (gzipped) { - c->iov[c->iovlen].iov_base = kGzipHeader; - c->iov[c->iovlen].iov_len = sizeof(kGzipHeader); - ++c->iovlen; - } - c->iov[c->iovlen].iov_base = content; - c->iov[c->iovlen].iov_len = contentlength; - ++c->iovlen; - if (gzipped) { - c->iov[c->iovlen].iov_base = c->gzip_footer; - c->iov[c->iovlen].iov_len = sizeof(c->gzip_footer); - ++c->iovlen; - } - } - /* LogRequestLatency(); */ - if (WriteSome(c->fd, c->iov, c->iovlen) == -1) { - VERBOSEF("%s send error %s", c->addrstr, strerror(errno)); - c->closeit = true; - c->insize = 0; - c->iovlen = 0; - } - if (!c->closeit) { - memcpy(c->inbuf, c->inbuf + msgsize, c->insize - msgsize); - c->insize -= msgsize; - } - return true; -} - -static void DeleteClient(struct Client *c) { - DEBUGF("%s close", c->addrstr); - CHECK_NE(-1, epoll_ctl(epfd, EPOLL_CTL_DEL, c->fd, NULL)); - LOGIFNEG1(close(c->fd)); - if (c->next) { - c->next->prev = c->prev; - } - if (c->prev) { - c->prev->next = c->next; - } else { - clients = c->next; - } - memset(c, 0, sizeof(*c)); - free(c); -} - -static void ProcessInbuf(struct Client *c) { - long double now; - for (;;) { - c->startrequest = now = nowl(); - if (now - nowish > 1) UpdateCurrentDate(now); - if (HandleRequest(c)) { - if (GetIovSize(c->iov, c->iovlen)) { - CHECK_NE(-1, epoll_ctl(epfd, EPOLL_CTL_MOD, c->fd, - &(struct epoll_event){EPOLLOUT, {c}})); - } else { - if (c->closeit && !c->insize) { - DeleteClient(c); - } else if (c->insize) { - continue; - } - } - } else if (c->insize == sizeof(c->inbuf)) { - WARNF("%s http message too big", c->addrstr); - DeleteClient(c); - } - break; - } -} - -static void ProcessRead(struct Client *c) { - char *p; - ssize_t rc; - rc = read(c->fd, c->inbuf + c->insize, sizeof(c->inbuf) - c->insize); - if (rc != -1) { - if (rc) { - c->insize += (size_t)rc; - ProcessInbuf(c); - } else { - DeleteClient(c); - } - } else if (errno != EINTR) { - if (errno == ECONNRESET) { - DEBUGF("%s reset", c->addrstr); - } else { - WARNF("%s recv error %s", c->addrstr, strerror(errno)); - } - DeleteClient(c); - } -} - -static void ProcessWrite(struct Client *c) { - if (WriteSome(c->fd, c->iov, c->iovlen) != -1) { - if (!GetIovSize(c->iov, c->iovlen)) { - if (!c->closeit) { - CHECK_NE(-1, epoll_ctl(epfd, EPOLL_CTL_MOD, c->fd, - &(struct epoll_event){EPOLLIN, {c}})); - ProcessInbuf(c); - } else { - DeleteClient(c); - } - } - } else { - VERBOSEF("%s send error %s", c->addrstr, strerror(errno)); - DeleteClient(c); - } -} - -static void ProcessConnect(void) { - int fd; - struct Client *c; - c = xmalloc(sizeof(struct Client)); - c->addrsize = sizeof(c->addr); - if ((fd = accept(server, &c->addr, &c->addrsize)) != -1) { - c->fd = fd; - c->prev = NULL; - c->next = clients; - c->insize = 0; - c->iovlen = 0; - c->closeit = false; - c->startconnection = nowl(); - c->startrequest = c->startconnection; - DescribeAddress(c->addrstr, &c->addr); - CHECK_NE(-1, epoll_ctl(epfd, EPOLL_CTL_ADD, c->fd, - &(struct epoll_event){EPOLLIN, {c}})); - if (clients) clients->prev = c; - clients = c; - DEBUGF("%s accept", c->addrstr); - } else if (errno != EINTR) { - FATALF("%s accept error %s", serveraddrstr, strerror(errno)); - free(c); - } -} - -static void HandleSignals(void) { - if (invalidated) { - if (OpenZip(programfile)) { - LOGF("%s reindexed zip", serveraddrstr); - } else { - WARNF("%s reindexing failed", serveraddrstr); - } - invalidated = false; - } - if (heartbeat | notimer) { - UpdateCurrentDate(nowl()); - heartbeat = false; - } -} - -static void ProcessEvents(void) { - int i, j, n; - struct epoll_event events[16]; - for (;;) { - if (terminated) { - while (clients) { - if (!clients->insize) { - DeleteClient(clients); - } else { - break; - } - } - if (!clients) break; - } - if ((n = epoll_wait(epfd, events, ARRAYLEN(events), 200)) != -1) { - for (i = 0; i < n; ++i) { - if (!events[i].data.ptr) { - CHECK(events[i].events & EPOLLIN); - ProcessConnect(); - } else if (events[i].events & (EPOLLIN | EPOLLERR | EPOLLHUP)) { - ProcessRead(events[i].data.ptr); - } else if (events[i].events & EPOLLOUT) { - ProcessWrite(events[i].data.ptr); - } - HandleSignals(); - } - } else { - CHECK_EQ(EINTR, errno); - HandleSignals(); - } - } -} - -static void TuneServerSocket(void) { - int yes = 1; - LOGIFNEG1(setsockopt(server, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes))); - LOGIFNEG1(setsockopt(server, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes))); - LOGIFNEG1(setsockopt(server, IPPROTO_TCP, TCP_NODELAY, &yes, sizeof(yes))); - LOGIFNEG1(setsockopt(server, IPPROTO_TCP, TCP_FASTOPEN, &yes, sizeof(yes))); - LOGIFNEG1(setsockopt(server, IPPROTO_TCP, TCP_QUICKACK, &yes, sizeof(yes))); -} - -void GreenBean(void) { - gmtoff = GetGmtOffset(); - programfile = (const char *)getauxval(AT_EXECFN); - CHECK(OpenZip(programfile)); - xsigaction(SIGINT, OnTerminate, 0, 0, 0); - xsigaction(SIGHUP, OnTerminate, 0, 0, 0); - xsigaction(SIGTERM, OnTerminate, 0, 0, 0); - xsigaction(SIGCHLD, SIG_IGN, 0, 0, 0); - xsigaction(SIGPIPE, SIG_IGN, 0, 0, 0); - xsigaction(SIGUSR1, OnHup, 0, 0, 0); - xsigaction(SIGALRM, OnAlarm, 0, 0, 0); - if (setitimer(ITIMER_REAL, &kHeartbeat, NULL) == -1) notimer = true; - CHECK_NE(-1, (epfd = epoll_create1(0))); - CHECK_NE(-1, (server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))); - TuneServerSocket(); - CHECK_NE(-1, bind(server, &serveraddr, sizeof(serveraddr))); - CHECK_NE(-1, listen(server, 10)); - CHECK_NE(-1, epoll_ctl(epfd, EPOLL_CTL_ADD, server, - &(struct epoll_event){EPOLLIN})); - DescribeAddress(serveraddrstr, &serveraddr); - if (daemonize) Daemonize(); - VERBOSEF("%s listen", serveraddrstr); - heartbeat = true; - ProcessEvents(); - CHECK_NE(-1, epoll_ctl(epfd, EPOLL_CTL_DEL, server, NULL)); - VERBOSEF("%s terminated", serveraddrstr); - LOGIFNEG1(close(server)); - LOGIFNEG1(close(epfd)); -} - -int main(int argc, char *argv[]) { - showcrashreports(); - GetOpts(argc, argv); - GreenBean(); - return 0; -} diff --git a/tool/net/redbean.c b/tool/net/redbean.c index dfb3cb50e..376e1fddb 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -634,33 +634,22 @@ static bool OpenZip(const char *path) { if (zmap) { LOGIFNEG1(munmap(zmap, zmapsize)); } - if (!zmap && ZIP_CDIR_MAGIC(__zip_end) == kZipCdirHdrMagic) { - if (IndexAssets(_base, __zip_end)) { - ok = true; - zbase = _base; - zcdir = __zip_end; - } else { - ok = false; - } - } else { - fd = -1; + fd = -1; + map = MAP_FAILED; + if ((fd = open(path, O_RDONLY)) != -1 && fstat(fd, &st) != -1 && st.st_size && + (map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0)) && + (cdir = zipfindcentraldir(map, st.st_size)) && IndexAssets(map, cdir)) { + ok = true; + zmap = map; + zbase = map; + zcdir = cdir; map = MAP_FAILED; - if ((fd = open(path, O_RDONLY)) != -1 && fstat(fd, &st) != -1 && - st.st_size && - (map = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0)) && - (cdir = zipfindcentraldir(map, st.st_size)) && IndexAssets(map, cdir)) { - ok = true; - zmap = map; - zbase = map; - zcdir = cdir; - map = MAP_FAILED; - zmapsize = st.st_size; - } else { - ok = false; - } - if (map != MAP_FAILED) LOGIFNEG1(munmap(map, st.st_size)); - if (fd != -1) LOGIFNEG1(close(fd)); + zmapsize = st.st_size; + } else { + ok = false; } + if (map != MAP_FAILED) LOGIFNEG1(munmap(map, st.st_size)); + if (fd != -1) LOGIFNEG1(close(fd)); return ok; }