cvarnish-vclvarnish-4

Using C to modify response in VCL


The varnish docs say that we can include C snippets inside a VCL file, like

sub vcl_hash {
    C{
            int i = /* Some logic to get a number */
    }C
}

But now how can I use the value of the integer i to set a response header, or cookie


Solution

  • See varnish.vcc

    And the functions:

    in varnish 4 there is ctx variabl defined for the context (as opposed to sp in varnish 3 ) (source)

    example:

    sub vcl_hash {
        C{
            const char *hash = calc_hash(...);
            const struct gethdr_s hdr = { 
                HDR_BERESP,
                "\010X-Hash:" // length prefixed string, in octal 
            };
            VRT_SetHdr(ctx, &hdr, hash, vrt_magic_string_end);
        }C
    }
    

    see here for another example