- /*
- * First, find and decode the header:
- */
- if((headoff = readhead(fd, &inbuf)) < 0)
- goto out;
- if(headoff > 65536) {
- /* We cannot handle arbitrarily large headers, as they
- * need to fit within a single Unix datagram. This is
- * probably a safe limit, and larger packets than this are
- * most likely erroneous (or malicious) anyway. */
- goto out;
- }
- old = inbuf.b[headoff];
- inbuf.b[headoff] = 0;
- if((req = parserawreq(inbuf.b)) == NULL)
- goto out;
- inbuf.b[headoff] = old;
- bufeat(inbuf, headoff);
- /* We strip off the leading slash and any param string from
- * the rest string, so that multiplexers can parse
- * coherently. */
- if(req->rest[0] == '/')
- replrest(req, req->rest + 1);
- if((p = strchr(req->rest, '?')) != NULL)
- *p = 0;