Blob


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