12345678910111213141516171819202122232425262728293031323334353637383940 |
- #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 0;
- memmove(c->hstop, s, n);
- c->hstop += n;
- *c->hstop = '\0';
- if(p != nil)
- return 1;
- if(hreadbuf(hin, hin->pos) == nil || hin->state == Hend)
- return 0;
- }
- }
|