Thanks everybody for your answers. Syohei's solution is exactly what I was looking for! Thanks Syohei.
-Hugues On Sat, Feb 11, 2012 at 6:38 PM, [email protected] <[email protected]> wrote: > Hi, > > Hash is stored in the sp->digest(created after the vcl_hash has been > called.The current version) > To access it is necessary for VMOD > > > sample(""this code is no guarantee. no error check"") > > VCC: > Function STRING gethash() > C: > const char * vmod_gethash(struct sess *sp){ > int u = WS_Reserve(sp->wrk->ws, 0); > char *tmp = (char *)sp->wrk->ws->f; > for(int i = 0; i < DIGEST_LEN; i++) > sprintf(tmp + 2 * i, "%02x",sp->digest[i]); > WS_Release(sp->wrk->ws, DIGEST_LEN*2+1); > return tmp; > } > > include list(It includes those that do not need) > #include <stdlib.h> > #include "vcl.h" > #include "vrt.h" > #include "bin/varnishd/cache.h" > #include "bin/varnishd/cache_backend.h" > #include "sys/socket.h" > #include "vcc_if.h" > #include <stdio.h> > #include <syslog.h> > #include "vsha256.h" > > VCL: > import example2;// my test vmod > sub vcl_deliver{ > set resp.http.X-HASH=example2.gethash(); > } > > TEST: > wget -d http://192.168.1.199:6081/test -O - > /dev/null > X-HASH: > 4c77debfa66306c3b9d4ed17389bca9b4b0780ca2ebbef67104c28cb77c5995a > wget -d http://192.168.1.199:6081/test2 -O - > /dev/null > X-HASH: > 759b213ba3e86f899a55243d31028240d3ee4680583f18356bfe6d37d43dff20 > wget -d http://192.168.1.199:6081/test2XXXXXXXXXXXXXXXXXXXXXXXXXX > -O - > /dev/null > X-HASH: > c79b81e7d55154585e80c03e954a7ccd8dcc067c8bd5d6b7d40d35276fd54a6d > > about VMOD: > https://www.varnish-cache.org/docs/trunk/reference/vmod.html > and > https://github.com/varnish/libvmod-example > > > Hope this helps, > > -- > Syohei Tanaka(@xcir) > http://xcir.net/ > > (:3[__]) > > 2012/2/12 Hugues Alary <[email protected]>: > > Hi Syohey, > > > > Thanks for your answer. > > > > My final goal is to get the hash calculated by Varnish. In the > documentation > > of the 3.0.2 version it is written that req.hash contains this hash. I > guess > > they just forgot to remove it and that req.hash doesn't exist anymore. > > > > However, is there a mean to get the final hash calculated by varnish, the > > result of hash_data()? > > > > Here: > https://www.varnish-cache.org/docs/trunk/phk/varnish_does_not_hash.html it > > is written: > > > > > > "All the strings hash_data() are fed, are pushed through a cryptographic > > hash algorithm called SHA256, which, as the name says, always spits out > 256 > > bits (= 32 bytes), no matter how many bits you feed it." > > > > And that's what I am looking for, the final value of the hash. I guess I > > could do it myself with a bit of C, but I would think that it is > possible to > > get this value from somewhere since Varnish already does the calculation. > > > > -Hugues > > > > On Fri, Feb 10, 2012 at 5:22 PM, [email protected] <[email protected]> wrote: > >> > >> Hugues, > >> > >> req.hash is the original write-only.(If my memory serves me) > >> and, VCL is a notation has changed Varnish3. > >> req.hash is replaced to hash_data(); > >> > >> > >> vcl: > >> sub vcl_hash { > >> hash_data(req.url); > >> set req.http.X-TEST = req.url; //add > >> if (req.http.host) { > >> hash_data(req.http.host); > >> set req.http.X-TEST = req.http.X-TEST + " + " + req.http.host; > >> //add > >> } else { > >> hash_data(server.ip); > >> set req.http.X-TEST = req.http.X-TEST + " + " + server.ip; //add > >> } > >> return (hash); > >> } > >> > >> > >> sub vcl_deliver{ > >> set resp.http.X-TEST = req.http.X-TEST; > >> } > >> > >> test: > >> wget -d http://192.168.1.199:6081/test -O - > /dev/null > >> > >> X-TEST: /test + 192.168.1.199:6081 > >> > >> Is not a very smart. > >> (Is not a hash, but understood what anything was used) > >> > >> > >> Can not think only about making the other VMOD. > >> > >> > >> -- > >> Syohei Tanaka(@xcir) > >> http://xcir.net/ > >> > >> > >> > >> 2012/2/11 Hugues Alary <[email protected]>: > >> > 2012/2/10 Roberto O. Fernández Crisial > >> > <[email protected]> > >> >> > >> >> Hugues, > >> > > >> > > >> > Hi Roberto, > >> > > >> > Thank you for your answer. > >> > > >> >> > >> >> > >> >> Try this: > >> >> > >> >> set req.http.X-TEST = req.hash; > >> >> set req.http.TEST = req.http.X-TEST; > >> >> > >> >> It should work. > >> > > >> > > >> > > >> > Unfortunately the problem doesn't come from the syntax of > >> > "req.http.TEST" > >> > but from req.hash. Here is the message: > >> > > >> > Message from VCC-compiler: > >> > Symbol not found: 'req.hash' (expected type STRING_LIST): > >> > ('input' Line 219 Pos 31) > >> > set req.http.X-TEST = req.hash; > >> > ------------------------------########- > >> > > >> > Running VCC-compiler failed, exit 1 > >> > > >> > VCL compilation failed > >> > > >> > > >> > I also tried to put that in my configuration: > >> > > >> > set req.http.X-TEST = {""} + req.hash; > >> > > >> > > >> > And, same error: > >> > > >> > Message from VCC-compiler: > >> > Symbol not found: 'req.hash' (expected type STRING): > >> > ('input' Line 219 Pos 38) > >> > set req.http.X-TEST = {""} + req.hash; > >> > -------------------------------------########- > >> > > >> > Running VCC-compiler failed, exit 1 > >> > > >> > VCL compilation failed > >> > > >> > > >> > Do you have any other idea ? > >> > > >> >> > >> >> Good luck, > >> >> > >> >> Roberto (@rofc) > >> >> > >> > > >> > Thanks! > >> > -Hugues > >> > > >> > _______________________________________________ > >> > varnish-misc mailing list > >> > [email protected] > >> > https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc > > > > > > > > > > -- > > Hugues ALARY > > > > _______________________________________________ > > varnish-misc mailing list > > [email protected] > > https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc > -- Hugues ALARY
_______________________________________________ varnish-misc mailing list [email protected] https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
