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; }
int main(int argc, char ** argv) { char * content; size_t length; mailmessage * msg; int r; struct mailprivacy * privacy; struct mailmime * mime; int col; privacy = mailprivacy_new("/Users/hoa/tmp", 1); if (privacy == NULL) { goto err; } r = mailprivacy_gnupg_init(privacy); if (r != MAIL_NO_ERROR) { goto free_privacy; } r = mailprivacy_smime_init(privacy); mailprivacy_smime_set_cert_dir(privacy, "/Users/hoa/LibEtPan/libetpan/tests/keys/cert"); mailprivacy_smime_set_CA_dir(privacy, "/Users/hoa/LibEtPan/libetpan/tests/keys/ca"); mailprivacy_smime_set_private_keys_dir(privacy, "/Users/hoa/LibEtPan/libetpan/tests/keys/private"); mailprivacy_gnupg_set_encryption_id(privacy, "xxxx@xxxx", "coin"); mailprivacy_smime_set_encryption_id(privacy, "xxxx@xxxx", "coin"); if (argc < 2) { fprintf(stderr, "syntax: decrypt [message]\n"); goto done_gpg; } r = get_content_of_file(argv[1], &content, &length); if (r < 0) { fprintf(stderr, "file not found %s\n", argv[1]); goto done_gpg; } msg = data_message_init(content, length); if (msg == NULL) { fprintf(stderr, "unexpected error\n"); goto free_content; } r = mailprivacy_msg_get_bodystructure(privacy, msg, &mime); if (r != MAIL_NO_ERROR) { fprintf(stderr, "unexpected error\n"); goto free_content; } mailmime_write(stdout, &col, mime); { clist * id_list; clistiter * iter; id_list = mailprivacy_gnupg_encryption_id_list(privacy, msg); if (id_list != NULL) { for(iter = clist_begin(id_list) ; iter != NULL ; iter = clist_next(iter)) { char * str; str = clist_content(iter); fprintf(stderr, "%s\n", str); } } } { clist * id_list; clistiter * iter; id_list = mailprivacy_smime_encryption_id_list(privacy, msg); if (id_list != NULL) { for(iter = clist_begin(id_list) ; iter != NULL ; iter = clist_next(iter)) { char * str; str = clist_content(iter); fprintf(stderr, "%s\n", str); } } } mailprivacy_gnupg_encryption_id_list_clear(privacy, msg); mailmessage_free(msg); free(content); mailprivacy_smime_done(privacy); mailprivacy_gnupg_done(privacy); mailprivacy_free(privacy); exit(EXIT_SUCCESS); free_content: free(content); done_gpg: mailprivacy_gnupg_done(privacy); free_privacy: mailprivacy_free(privacy); err: exit(EXIT_FAILURE); }