我想钩附件文件。例如,当用户尝试使用网络邮件或其他附件来附加文件时,我也希望钩住附件。我分析了echo服务,在echo_check_preview_handler
函数中,我可以钩住数据的内容。但是我想钩附件文件。我搜索了一些c-icap模块(squidclamav和yara),但是我没有找到此功能。从simple_api.c代码开始,我使用了下面的代码,但是我只能用data-> body-> filename钩住ascii文件。
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模块或文档或代码块?
最佳答案
您不应该在preview_handler中执行此操作,而是执行以下操作:
在Preview_handler中-返回CI_MOD_CONTINUE
然后在执行ci_simple_file_write的地方实现io ...
然后在数据处理程序的最后,您可以实现分析。
这是来自services.h的评论,简要解释了c-icap插件的生命周期:
*
该结构的功能。这些函数
ci_service_module::mod_init_request_data称为
调用ci_service_module::mod_check_preview_handler。
在这里停止。如果此函数返回
多次调用ci_service_module::mod_service_io,直到
使用此功能向客户端发送数据
ci_service_module::mod_end_of_data_handler称为
ci_service_module::mod_service_io称为多个
* /
否-您不能直接钩住附件,但是必须从通过ci_simple_file API编写的内容中解析出附件文件。
关于c++ - c-icap和附件文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16772337/