From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 25082 invoked from network); 10 Jan 2021 19:02:55 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 10 Jan 2021 19:02:55 -0000 Received: from mail-wr1-f41.google.com ([209.85.221.41]) by 1ess; Sun Jan 10 13:32:18 -0500 2021 Received: by mail-wr1-f41.google.com with SMTP id c5so14146605wrp.6 for <9front@9front.org>; Sun, 10 Jan 2021 10:32:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:message-id:to:subject:date:mime-version :content-transfer-encoding; bh=HGFAlEV0P4epyu57LkMUJAYpFksVItP3lyJA+24u+d4=; b=gLEZ1vnwJ5a4P/g0pdbV/us+eqKfpi1jHLhv8k5cfKUTR5zyc7yPUup9a8IQBElSzC qeK0uUE2T1WxQXBSjvOyMQZZtrVHhH8EV9xcr2lpMLeqdKgMnBNOeKXEdg+f56z0K3r9 1bvbsyvcOvG+NTSWcDwKzTIVpP9l2+9uz/S0IcjP2+hz8NUFn4FigfOn+L8Od7N4Iuqw oqnyDEPf46c94k1ICrpYxlk+opKCRJcviwsmMJ3DYkfBJYmwD+pWtY9IQdMZuNuCEYPi 5mlSt9jHx5lNYBgEI4/arZ/9klfZgr8IYm44FnU7NjJyrYKCCceRiZPn0guWmeHtNtLr J7nA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:message-id:to:subject:date:mime-version :content-transfer-encoding; bh=HGFAlEV0P4epyu57LkMUJAYpFksVItP3lyJA+24u+d4=; b=V8lgnuEJ62DXlWiTfhD4psG1KWD3Ko2rlHkfNe+cH/S0Tw06X/yzY9pK9Cew4VxtGN MDZ2PMBfeJYUV7IIfKOg9+bSQF1J7f8y9OJwDhwOfTaFY1GTX4ir25iM9UVOwmEnSLxD Kw0xdBQQACJrhLS0itWcIkBK2tKyMk2r096xW6PZ79LHSa7RAQynWdpmPVoo+IqdIq2k nSWrRRH9B5bwk+Kv/DPXAoDTVcgBxrhKI0C9w/CTES9ZGBuSxk/N60PdFJdkFDYfJY+5 xRwHsMxlgw1TyvGNEjRBSluqduqjOtXDeP4ytJBq1UexKkNaYvNiJmocO6PoX7DV8COC 86Zw== X-Gm-Message-State: AOAM533pEOPPP632xUcoe8W7EkEtS4q6ZTWspppCCulOp/5EUuLcHKSL 8eENMIYEctDxwnDSLh5e2UKmRfcDHhI= X-Google-Smtp-Source: ABdhPJycY46ClJC1g8NnCOsxeLaTfGaobka38hShei8vJM2h7v5PhPhAX2z9AQlXLm8A6rfYhjN3Kw== X-Received: by 2002:adf:c145:: with SMTP id w5mr13253007wre.400.1610303527767; Sun, 10 Jan 2021 10:32:07 -0800 (PST) Return-Path: Received: from hades (lfbn-idf1-1-101-190.w82-124.abo.wanadoo.fr. [82.124.189.190]) by smtp.gmail.com with ESMTPSA id q1sm21499923wrj.8.2021.01.10.10.32.07 for <9front@9front.org> (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Sun, 10 Jan 2021 10:32:07 -0800 (PST) From: telephil9@gmail.com X-Google-Original-From: pme@gmail.com Message-ID: <92666EC50A56FDFFA061325E323A4FE3@gmail.com> To: 9front@9front.org Date: Sun, 10 Jan 2021 19:32:06 +0100 MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: strategy extension XML over XMPP element full-stack controller Subject: [9front] [PATCH] webfs: add 'headers' file Reply-To: 9front@9front.org Precedence: bulk Hi, Following patch adds a 'headers' file containing the full list of response headers along with their values (each line is Header: value). I need this for netsurf which expects response headers prior to processing a request, and the current webfs mechanism is not really convenient to work with in this case. === diff -r f020e57da8d6 sys/src/cmd/webfs/fs.c --- a/sys/src/cmd/webfs/fs.c Thu Dec 17 20:26:38 2020 -0800 +++ b/sys/src/cmd/webfs/fs.c Sun Jan 10 19:24:24 2021 +0100 @@ -42,6 +42,7 @@ Qctl, Qbody, Qpost, + Qheaders, Qparsed, Qurl, Qurlschm, @@ -63,6 +64,7 @@ "ctl", "body", "postbody", + "headers", "parsed", "url", "scheme", @@ -293,6 +295,14 @@ } } else { for(i=f->level+1; i < nelem(nametab); i++){ + if(i == Qheaders && f->client && f->client->qbody){ + Key *k; + + for(k = f->client->qbody->hdr; k; k = k->next){ + f->key = addkey(f->key, k->key, k->val); + } + break; + } if(nametab[i]){ if(strcmp(name, nametab[i]) == 0) break; @@ -479,8 +489,10 @@ static void fsread(Req *r) { - char buf[1024]; + char buf[2048]; Webfid *f; + Key *k; + int n; f = r->fid->aux; switch(f->level){ @@ -505,6 +517,17 @@ case Qctl: snprint(buf, sizeof(buf), "%d\n", CLIENTID(f->client)); goto String; + case Qheaders: + n = 0; + for(k = f->key; k != nil; k = k->next){ + n += snprint(buf+n, sizeof(buf)-n, "%s: %s\n", k->key, k->val); + if(n >= sizeof(buf)){ + n = sizeof(buf)-1; + break; + } + } + buf[n] = 0; + goto String; case Qheader: snprint(buf, sizeof(buf), "%s", f->key->val); goto String; @@ -703,6 +726,7 @@ fsdestroyfid(Fid *fid) { Webfid *f; + Key *k, *d; if(f = fid->aux){ fid->aux = nil; @@ -714,8 +738,13 @@ } bufree(f->buq); } - if(f->key) - free(f->key); + if(f->key){ + for(k = f->key; k != nil;){ + d = k; + k = k->next; + free(d); + } + } freeclient(f->client); free(f); } === Man page: === diff -r f020e57da8d6 sys/man/4/webfs --- a/sys/man/4/webfs Thu Dec 17 20:26:38 2020 -0800 +++ b/sys/man/4/webfs Sun Jan 10 19:30:48 2021 +0100 @@ -165,6 +165,11 @@ .B parsed directory will change to the final destination. .PP +The +.B headers +file gives the full list of headers along with their values, +one per line. +.PP The resulting data may be read from .B body as it arrives. === --phil