#include <u.h> | |
#include <libc.h> | |
#include <bin.h> | |
#include <httpd.h> | |
/* | |
* read in some header lines, either one or all of them. | |
* copy results into header log buffer. | |
*/ | |
int | |
hgethead(HConnect *c, int many) | |
{ | |
Hio *hin; | |
char *s, *p, *pp; | |
int n; | |
hin = &c->hin; | |
for(;;){ | |
s = (char*)hin->pos; | |
pp = s; | |
while(p = memchr(pp, '\n', (char*)hin->stop - pp)){ | |
if(!many || p == pp || (p == pp + 1 && *pp == '\r')){ | |
pp = p + 1; | |
break; | |
} | |
pp = p + 1; | |
} | |
hin->pos = (uchar*)pp; | |
n = pp - s; | |
if(c->hstop + n > &c->header[HBufSize]) | |
return -1; | |
memmove(c->hstop, s, n); | |
c->hstop += n; | |
*c->hstop = '\0'; | |
if(p != nil) | |
return 0; | |
if(hreadbuf(hin, hin->pos) == nil || hin->state == Hend) | |
return -1; | |
} | |
} |