]> err.no Git - varnish/commitdiff
Add vca_write_obj() which writes an sbuf (as) HTTP header and the
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 14 Jun 2006 09:39:31 +0000 (09:39 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 14 Jun 2006 09:39:31 +0000 (09:39 +0000)
object from the sessions to the client.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@185 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_acceptor.c
varnish-cache/bin/varnishd/cache_fetch.c
varnish-cache/bin/varnishd/cache_pool.c

index 1a273bb6150206cbf3355b9a0efcd1404a3099cb..cdde756daefaf04af8a95095236f718b5f322385 100644 (file)
@@ -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);
index 2428c7c082e62bdc2b6baa3424eb45f7b70cc94e..6d201fd99a4e7ed67850f7a5b1480029a80407af 100644 (file)
@@ -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
index 75c02e4da20aba438e7ff5544d5ae4ed08047787..0ca159cd89170c3e6969bc4cead7c45386f9adba 100644 (file)
@@ -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);
 
index b92b2733319c3fe6953a3ec4339ac999a7f61458..597c93ec882a1bd403a9dac9330bcf22fd1c05fc 100644 (file)
@@ -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);
 }