X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fhtparser.c;h=c0aca2e535fb231cc0349755e59feac2f900f0c8;hb=9e9eca797684e57318dde54f5a89a3029181590e;hp=57b7a2612cdee26ad7b1ef745a1b68476b1f4038;hpb=9d87a1194d09845d8bff81297593097aa786862f;p=ashd.git diff --git a/src/htparser.c b/src/htparser.c index 57b7a26..c0aca2e 100644 --- a/src/htparser.c +++ b/src/htparser.c @@ -342,7 +342,7 @@ static void serve(struct muth *muth, va_list args) char *hd; struct charbuf inbuf, outbuf; struct hthead *req, *resp; - off_t sent; + off_t dlen, sent; size_t headoff; char nmbuf[256]; @@ -369,6 +369,10 @@ static void serve(struct muth *muth, va_list args) goto out; inbuf.b[headoff] = old; bufeat(inbuf, headoff); + /* We strip off the leading slash from the rest string, so + * that multiplexers can parse coherently. */ + if(req->rest[0] == '/') + replrest(req, req->rest + 1); /* * Add metainformation and then send the request to the root @@ -382,6 +386,15 @@ static void serve(struct muth *muth, va_list args) headappheader(req, "X-Ash-Port", sprintf3("%i", ntohs(((struct sockaddr_in6 *)&name)->sin6_port))); } cfd = sendreq(plex, req); + + /* + * If there is message data, pass it: + */ + if((hd = getheader(req, "content-length")) != NULL) { + dlen = atoo(hd); + if(dlen > 0) + passdata(fd, cfd, &inbuf, dlen); + } /* * Find and decode the response header: