Понял. Отследив эту регистрацию от первоначального автора , я обнаружил код, встроенный в стандартное поведение обработки libetpan поддержки IMAP.
Что ж, получается, что автор предоставляет пример того, как успешно установить соединение IMAP. Вместо того, чтобы выдавать весь код, вот бит, который вам следует беспокоиться:
static char * get_msg_att_msg_content(struct mailimap_msg_att * msg_att,
size_t * p_msg_size)
{
clistiter * cur;
/* iterate on each result of one given message */
for(cur = clist_begin(msg_att->att_list) ; cur != NULL ;
cur = clist_next(cur)) {
struct mailimap_msg_att_item * item;
item = clist_content(cur);
if (item->att_type != MAILIMAP_MSG_ATT_ITEM_STATIC) {
continue;
}
...
Согласно моему обратному следу кода, ваш билет struct mailimap_msg_att_item
. att_type
, который вы ищете здесь, это MAILIMAP_MSG_ATT_ITEM_EXTENSION
, и оттуда вы должны пройтись по структурам данных, пока не найдете MAILIMAP_EXTENSION_XGMLABELS
.
Что-то вроде этого должно их изолировать:
if (item->att_type == MAILIMAP_MSG_ATT_ITEM_EXTENSION) {
if (item->att_data.att_extension_data->ext_type ==
MAILIMAP_EXTENSION_XGMLABELS) {
// ... do something ...
}
}
( Предупреждение: непроверенный код. )
Отсюда вы можете выполнить более глубокий вопросительный анализ используемых конструкций. Все существенные файлы содержатся в src/low-level/imap
, за исключением тестового файла . Удачи!