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