From: phk Date: Wed, 14 Jun 2006 09:39:31 +0000 (+0000) Subject: Add vca_write_obj() which writes an sbuf (as) HTTP header and the X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9353c9d8806bee12d434be341c4e8f1f5b8f37f;p=varnish Add vca_write_obj() which writes an sbuf (as) HTTP header and the object from the sessions to the client. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@185 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/bin/varnishd/cache.h b/varnish-cache/bin/varnishd/cache.h index 1a273bb6..cdde756d 100644 --- a/varnish-cache/bin/varnishd/cache.h +++ b/varnish-cache/bin/varnishd/cache.h @@ -59,6 +59,7 @@ extern struct stevedore *stevedore; /* cache_acceptor.c */ void vca_write(struct sess *sp, void *ptr, size_t len); +void vca_write_obj(struct sess *sp, struct sbuf *hdr); void vca_flush(struct sess *sp); void vca_return_session(struct sess *sp); void vca_close_session(struct sess *sp, const char *why); diff --git a/varnish-cache/bin/varnishd/cache_acceptor.c b/varnish-cache/bin/varnishd/cache_acceptor.c index 2428c7c0..6d201fd9 100644 --- a/varnish-cache/bin/varnishd/cache_acceptor.c +++ b/varnish-cache/bin/varnishd/cache_acceptor.c @@ -84,6 +84,21 @@ vca_write(struct sess *sp, void *ptr, size_t len) sp->mem->liov += len; } +void +vca_write_obj(struct sess *sp, struct sbuf *hdr) +{ + struct storage *st; + + vca_write(sp, sbuf_data(hdr), sbuf_len(hdr)); + TAILQ_FOREACH(st, &sp->obj->store, list) { + if (st->stevedore->send != NULL) + st->stevedore->send(st, sp); + else + vca_write(sp, st->ptr, st->len); + } + vca_flush(sp); +} + /*--------------------------------------------------------------------*/ static void diff --git a/varnish-cache/bin/varnishd/cache_fetch.c b/varnish-cache/bin/varnishd/cache_fetch.c index 75c02e4d..0ca159cd 100644 --- a/varnish-cache/bin/varnishd/cache_fetch.c +++ b/varnish-cache/bin/varnishd/cache_fetch.c @@ -60,9 +60,8 @@ fetch_straight(struct worker *w, struct sess *sp, int fd, struct http *hp, char } http_BuildSbuf(2, w->sb, hp); - vca_write(sp, sbuf_data(w->sb), sbuf_len(w->sb)); - vca_write(sp, st->ptr, st->len); - vca_flush(sp); + + vca_write_obj(sp, w->sb); hash->deref(sp->obj); return (0); @@ -126,11 +125,8 @@ fetch_chunked(struct worker *w, struct sess *sp, int fd, struct http *hp) } http_BuildSbuf(2, w->sb, hp); - vca_write(sp, sbuf_data(w->sb), sbuf_len(w->sb)); - TAILQ_FOREACH(st, &sp->obj->store, list) - vca_write(sp, st->ptr, st->len); - vca_flush(sp); + vca_write_obj(sp, w->sb); hash->deref(sp->obj); diff --git a/varnish-cache/bin/varnishd/cache_pool.c b/varnish-cache/bin/varnishd/cache_pool.c index b92b2733..597c93ec 100644 --- a/varnish-cache/bin/varnishd/cache_pool.c +++ b/varnish-cache/bin/varnishd/cache_pool.c @@ -68,23 +68,15 @@ LookupSession(struct worker *w, struct sess *sp) static int DeliverSession(struct worker *w, struct sess *sp) { - char buf[BUFSIZ]; - struct storage *st; - sprintf(buf, + sbuf_clear(w->sb); + sbuf_printf(w->sb, "HTTP/1.1 200 OK\r\n" "Server: Varnish\r\n" "Content-Length: %u\r\n" "\r\n", sp->obj->len); - vca_write(sp, buf, strlen(buf)); - TAILQ_FOREACH(st, &sp->obj->store, list) { - if (st->stevedore->send != NULL) - st->stevedore->send(st, sp); - else - vca_write(sp, st->ptr, st->len); - } - vca_flush(sp); + vca_write_obj(sp, w->sb); return (1); }