Blame


1 9df487d7 2003-11-23 devnull #include <u.h>
2 9df487d7 2003-11-23 devnull #include <libc.h>
3 9df487d7 2003-11-23 devnull #include <bin.h>
4 9df487d7 2003-11-23 devnull #include <httpd.h>
5 9df487d7 2003-11-23 devnull
6 9df487d7 2003-11-23 devnull /*
7 9df487d7 2003-11-23 devnull * read in some header lines, either one or all of them.
8 9df487d7 2003-11-23 devnull * copy results into header log buffer.
9 9df487d7 2003-11-23 devnull */
10 9df487d7 2003-11-23 devnull int
11 9df487d7 2003-11-23 devnull hgethead(HConnect *c, int many)
12 9df487d7 2003-11-23 devnull {
13 9df487d7 2003-11-23 devnull Hio *hin;
14 9df487d7 2003-11-23 devnull char *s, *p, *pp;
15 9df487d7 2003-11-23 devnull int n;
16 9df487d7 2003-11-23 devnull
17 9df487d7 2003-11-23 devnull hin = &c->hin;
18 2277c5d7 2004-03-21 devnull fprint(2, "hgethead top %p - %p\n", hin->pos, hin->stop);
19 9df487d7 2003-11-23 devnull for(;;){
20 9df487d7 2003-11-23 devnull s = (char*)hin->pos;
21 9df487d7 2003-11-23 devnull pp = s;
22 2277c5d7 2004-03-21 devnull fprint(2, "hgethead %p - %p\n", pp, hin->stop);
23 9df487d7 2003-11-23 devnull while(p = memchr(pp, '\n', (char*)hin->stop - pp)){
24 2277c5d7 2004-03-21 devnull fprint(2, "hgethead %p - %p newline at %p %d\n", pp, hin->stop, p, *pp);
25 2277c5d7 2004-03-21 devnull if(!many || p == pp || (p == pp + 1 && *pp == '\r')){
26 2277c5d7 2004-03-21 devnull fprint(2, "breaking\n");
27 9df487d7 2003-11-23 devnull pp = p + 1;
28 9df487d7 2003-11-23 devnull break;
29 9df487d7 2003-11-23 devnull }
30 9df487d7 2003-11-23 devnull pp = p + 1;
31 9df487d7 2003-11-23 devnull }
32 9df487d7 2003-11-23 devnull hin->pos = (uchar*)pp;
33 9df487d7 2003-11-23 devnull n = pp - s;
34 9df487d7 2003-11-23 devnull if(c->hstop + n > &c->header[HBufSize])
35 9df487d7 2003-11-23 devnull return 0;
36 9df487d7 2003-11-23 devnull memmove(c->hstop, s, n);
37 9df487d7 2003-11-23 devnull c->hstop += n;
38 9df487d7 2003-11-23 devnull *c->hstop = '\0';
39 2277c5d7 2004-03-21 devnull fprint(2, "p %p\n", p);
40 9df487d7 2003-11-23 devnull if(p != nil)
41 9df487d7 2003-11-23 devnull return 1;
42 9df487d7 2003-11-23 devnull if(hreadbuf(hin, hin->pos) == nil || hin->state == Hend)
43 9df487d7 2003-11-23 devnull return 0;
44 9df487d7 2003-11-23 devnull }
45 9df487d7 2003-11-23 devnull }