2013-05-27 2 views
2

Я хочу подключить файлы вложений. Например, когда пользователь пытается подключить файл с помощью веб-почты или чего-то еще, я хочу, чтобы слишком привязать файл вложения. Я проанализировал эхо-сервис, в функции echo_check_preview_handler я могу подключить содержимое данных. Но я хочу привязать файл вложения. Я искал некоторый модуль c-icap (squidclamav и yara), но я не нашел эту способность. Из кода simple_api.c я использовал приведенный ниже код, но я могу только подключить файл ascii с помощью data-> body-> filename.c-icap и файл сложения

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 или документации или кода?

ответ

0

Вы не должны делать это в preview_handler, а вот то, что вы должны сделать:

в preview_handler - возвращение CI_MOD_CONTINUE

затем реализовать ИО, где вы делаете ci_simple_file_write ...

затем в конце обработчика данных вы можете реализовать свой анализ.

Вот комментарий от services.h, который вкратце объясняет жизненный цикл с-ICAP плагин:

  • ли структура, которая реализует услугу *
  • Для реализации услуги Someones потребности для реализации функции функции этой структуры. Эти функции
  • будет вызываться с-ICAP следующим образом:
    • Новый запрос поступает на эту услугу -> The ci_service_module :: mod_init_request_data называется
    • Клиент ICAP посылает предварительный просмотр data -> 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.

0

Например, когда пользователь попытаться прикрепить файл с помощью веб-почты или что-то еще, я хочу тоже зацепить файл вложения

Вам нужно подключить HTTP-запрос содержит файлы, как это данные тела.

Итак, ваша цель REQMOD ICAP Request.

Это 3 подсказки для вас.

  1. в режиме предварительного просмотра, проверить магия тела, определить тип тела, как «данные файла» (ci_magic_data_type_ext помогает).
  2. in service_io, читать все данные, пока iseof не соответствует действительности (ci_simple_file .. функции помогают).
  3. in end_of_data, изменить или проверить файл как ci_simple_file объект.

Имейте в виду, что данные файла обычно сжаты gzip или deflate.

c-icap документ может быть сгенерирован с сделать doc.

+0

Информация в ваших комментариях должна быть в самом сообщении. Используйте функцию редактирования. – Unihedron

Смежные вопросы