Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#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;
        }
}