【问题标题】:c-icap and attachment filec-icap 和附件文件
【发布时间】:2013-05-27 11:36:18
【问题描述】:

我想挂接附件文件。例如,当用户尝试使用 webmail 或其他方式附加文件时,我也想挂上附件文件。我分析了回显服务,在echo_check_preview_handler 函数中我可以挂钩数据的内容。但我想挂钩附件文件。我搜索了一些 c-icap 模块(squidclamav 和 yara),但我没有找到这种能力。从 simple_api.c 代码中,我使用了以下代码,但我只能将 ascii 文件与 data->body->filename 挂钩。

data->body = ci_simple_file_new(0);
     if ((SEND_PERCENT_BYTES >= 0) && (START_SEND_AFTER == 0))
     {
        ci_req_unlock_data(req);
        ci_simple_file_lock_all(data->body);
     }

if (!data->body)
        return CI_ERROR;
       if (ci_simple_file_write(data->body, preview_data, preview_data_len,  ci_req_hasalldata(req)) == CI_ERROR)
               return CI_ERROR;

那么我该如何实现呢?是否有任何示例 c-icap 模块或文档或代码块?

【问题讨论】:

    标签: c++ c open-source


    【解决方案1】:

    您不应该在 preview_handler 中执行此操作,而是您应该执行以下操作:

    在 preview_handler - 返回 CI_MOD_CONTINUE

    然后在执行 ci_simple_file_write 的地方实现 io ...

    然后在数据处理程序结束时,您可以实施您的分析。

    这是来自 services.h 的评论,简要解释了 c-icap 插件的生命周期:

    • 是实现服务的结构 *
    • 要实现某个服务,某人需要实现该成员 这个结构的功能。这些函数
    • 将被 c-icap 调用如下:
      • 此服务的新请求到达 -> ci_service_module::mod_init_request_data 调用
      • icap 客户端发送预览数据 -> ci_service_module::mod_check_preview_handler 被调用。
    • 如果此函数返回 CI_MOD_ALLOW204 ICAP 事务 停在这里。如果这个函数返回
    • CI_MOD_CONTINUE ICAP 客户端将发送剩余的正文数据(如果存在)。
      • 客户端开始发送更多数据-> ci_service_module::mod_service_io 被多次调用,直到
    • 客户端已发送所有正文数据。该服务可以开始发送 使用此函数向客户端发送数据
    • 在收到所有数据之前
      • 客户端已发送所有数据 -> ci_service_module::mod_end_of_data_handler 调用
      • 客户端等待从 c-icap 读取剩余数据 -> ci_service_module::mod_service_io 调用多个
    • 次,直到所有正文数据发送到客户端 */

    不 - 您不能直接挂钩附件,但您必须从您通过 ci_simple_file API 编写的内容中解析出附件文件。

    【讨论】:

      【解决方案2】:

      例如,当用户尝试使用 webmail 或其他方式附加文件时,我也想挂上附件文件

      您需要挂钩 HTTP 请求包含文件,因为它是正文数据。

      所以您的目标是 REQMOD ICAP 请求。

      这里有 3 条提示。

      1. 在预览中,检查 body magic,将 body 类型识别为“文件数据”(ci_magic_data_type_ext 有帮助)。
      2. 在 service_io 中,当 iseof 不正确时读取所有数据(ci_simple_file.. 函数有帮助)。
      3. 在 end_of_data 中,将文件修改或检查为 ci_simple_file 对象。

      请记住,文件数据通常是 gzip 或 deflate 压缩的。

      可以使用ma​​ke doc生成c-icap文档。

      【讨论】:

      • 您的 cmets 中的信息应该在帖子本身中。使用编辑功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2020-01-07
      • 2018-01-04
      • 2011-07-03
      • 1970-01-01
      • 2014-09-08
      • 2017-05-12
      相关资源
      最近更新 更多