内联 C 清漆 (VCL_deliver)

2024-02-14

我使用的是清漆4.0。

我的后端正在向一些响应添加 http 标头“x-count”

我想将“x-count”的值记录到带有换行符的文件中。

我认为我应该在 VCL 交付中进行。

这是我到目前为止所拥有的:

sub vcl_deliver {

    if (resp.http.x-count-this:) {
        set resp.http.X-infodbg  = "xx";
        C{
           FILE *fp;
           fp = fopen("/tmp/test.txt", "w+");
           fputs(VRT_GetHdr(sp, HDR_OBJ, "\013x-count-this:"), fp);
           fputs("\n", fp);
           fclose(fp);
        }C
    }
}

当然它不起作用并且有一些错误..

./vcl.gK2lu7uM.c:在函数“VGC_function_vcl_deliver”中: ./vcl.gK2lu7uM.c:1049:22: 错误:‘sp’未声明(在此首次使用 function) ./vcl.gK2lu7uM.c:1049:22: 注意:每个未声明的标识符 对于它出现的每个函数仅报告一次 ./vcl.gK2lu7uM.c:1049:5: 错误:传递“VRT_GetHdr”的参数 2 从整数生成指针而不进行强制转换 [-Werror] ./vcl.gK2lu7uM.c:330:7:注意:预期为“const struct gethdr_s *”,但是 参数的类型为“int”./vcl.gK2lu7uM.c:1049:5: 错误:太多 函数‘VRT_GetHdr’的参数./vcl.gK2lu7uM.c:330:7:注意: 在这里声明

我不得不说,我只是从一些示例中复制/粘贴“sp”,但我不知道它来自哪里(我认为内联 C 位于不同的上下文中,因此它是在那里声明的,但不是在 vcl_deliver 中声明的)


因此,上述示例中 Varnish 4 和 3 之间可能未记录的差异是:

  • VRT_GetHdr 现在是 VRT_GetHdr(context, struct gethdr_s)
  • sp 不存在,但有一个“ctx”变量

找到了这个,那里:

http://jan.bogutzki.de/Artikel/395/set-ttl-in-varnish-4.html http://jan.bogutzki.de/Artikel/395/set-ttl-in-varnish-4.html

   char *stuffid;
   const struct gethdr_s hdr = { HDR_BERESP, "\015x-count-this:" };
   stuffid = VRT_GetHdr(ctx, &hdr);

现在是一个不同的故事:一旦后端发送回“count-this”,Varnish 就会崩溃,但这是一个不同的问题:p(可能是我蹩脚的 C 代码)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内联 C 清漆 (VCL_deliver) 的相关文章

  • 从 ArrayRef[HashRef] 强制 ArrayRef[MyClass]

    在试图回答的过程中如何从大哈希实例化 Moose 类 https stackoverflow com q 12483775 468327 我想我又遇到了一个我不完全理解 Moose 类型强制的地方 由于某种原因 以下代码发出警告 You c

随机推荐