int maildriver_generic_get_envelopes_list(mailsession * session, struct mailmessage_list * env_list) { int r; unsigned i; for(i = 0 ; i < carray_count(env_list->msg_tab) ; i ++) { mailmessage * msg; msg = carray_get(env_list->msg_tab, i); if (msg->msg_fields == NULL) { struct mailimf_fields * fields; r = mailmessage_fetch_envelope(msg, &fields); if (r != MAIL_NO_ERROR) { /* do nothing */ } else { msg->msg_fields = fields; } mailmessage_flush(msg); } } return MAIL_NO_ERROR; }
int mailprivacy_msg_get_bodystructure(struct mailprivacy * privacy, mailmessage * msg_info, struct mailmime ** result) { int r; struct mailmime * mime; if (msg_info->msg_mime != NULL) return MAIL_NO_ERROR; if (msg_is_modified(privacy, msg_info)) return MAIL_NO_ERROR; r = mailmessage_get_bodystructure(msg_info, &mime); if (r != MAIL_NO_ERROR) return r; /* modification on message if necessary */ r = recursive_check_privacy(privacy, msg_info, msg_info->msg_mime); if (r != MAIL_NO_ERROR) { * result = msg_info->msg_mime; return MAIL_NO_ERROR; } r = register_msg(privacy, msg_info); if (r != MAIL_NO_ERROR) { recursive_clear_registered_mime(privacy, mime); mailmessage_flush(msg_info); return MAIL_ERROR_MEMORY; } * result = msg_info->msg_mime; return MAIL_NO_ERROR; }
void mailprivacy_msg_flush(struct mailprivacy * privacy, mailmessage * msg_info) { if (msg_is_modified(privacy, msg_info)) { /* remove all modified parts */ if (msg_info->msg_mime != NULL) recursive_clear_registered_mime(privacy, msg_info->msg_mime); unregister_message(privacy, msg_info); } mailmessage_flush(msg_info); }
int mailprivacy_get_mime(struct mailprivacy * privacy, int check_privacy, int reencode, char * content, size_t content_len, struct mailmime ** result_mime) { struct mailmime * mime; mailmessage * msg; int r; int res; #if 0 int check_privacy; check_privacy = (privacy != NULL); #endif /* use message data driver, get bodystructure and convert all the data part in MAILMIME_SINGLE to files. */ msg = data_message_init(content, content_len); if (msg == NULL) { res = MAIL_ERROR_MEMORY; goto err; } #if 0 if (msg->mime == NULL) { if (check_privacy) { r = mailprivacy_msg_get_bodystructure(privacy, msg, &mime); } else { /* don't use etpan_msg_get_bodystructure because it is not useful and to avoid loops due to security part */ r = mailmessage_get_bodystructure(msg, &mime); } } else { mime = msg->mime; } #endif if (check_privacy) r = mailprivacy_msg_get_bodystructure(privacy, msg, &mime); else r = mailmessage_get_bodystructure(msg, &mime); if (r != MAIL_NO_ERROR) { res = r; goto free_msg; } /* should be done so that the MIME structure need not to be unregistered. */ mailprivacy_recursive_unregister_mime(privacy, mime); r = recursive_replace_single_parts(privacy, mime, reencode); if (r != MAIL_NO_ERROR) { res = r; goto clear_mime; } data_message_detach_mime(msg); #if 0 if (check_privacy) mailprivacy_msg_flush(privacy, msg); else mailmessage_flush(msg); #endif mailprivacy_msg_flush(privacy, msg); mailmessage_free(msg); * result_mime = mime; return MAIL_NO_ERROR; clear_mime: mailprivacy_mime_clear(mime); mailprivacy_msg_flush(privacy, msg); free_msg: mailmessage_free(msg); err: return res; }