static int folder_connect(struct storage_ref_info * ref_info, struct mailfolder * folder) { int r; struct folder_ref_info * folder_ref_info; r = do_storage_connect(ref_info); if (r != MAIL_NO_ERROR) return r; r = mailfolder_connect(folder); if (r != MAIL_NO_ERROR) return r; folder_ref_info = storage_get_folder_ref(ref_info, folder); return MAIL_NO_ERROR; }
LIBETPAN_EXPORT int mailfolder_get_messages_list(struct mailfolder * folder, struct mailmessage_list ** result) { int r; struct mailmessage_list * msg_list; unsigned int i; struct mailstorage * storage; /* workaround for POP3 case - begin */ storage = folder->fld_storage; if (strcmp(storage->sto_driver->sto_name, "pop3") == 0) { mailstorage_disconnect(storage); r = mailstorage_connect(storage); if (r != MAIL_NO_ERROR) return r; r = mailfolder_connect(folder); if (r != MAIL_NO_ERROR) return r; } /* workaround for POP3 case - begin */ r = mailsession_get_messages_list(folder->fld_session, &msg_list); if (r != MAIL_NO_ERROR) return r; for(i = 0 ; i < carray_count(msg_list->msg_tab) ; i ++) { mailmessage * msg; msg = carray_get(msg_list->msg_tab, i); msg->msg_folder = folder; } * result = msg_list; return MAIL_NO_ERROR; }
int main(int argc, char ** argv) { int r; int driver; char * server; int port; int connection_type; char * user; char * password; int auth_type; char * path; char * cache_directory; char * flags_directory; struct mailstorage * storage; int cached; struct mailfolder * folder; /* get options */ r = parse_options(argc, argv, &driver, &server, &port, &connection_type, &user, &password, &auth_type, &path, &cache_directory, &flags_directory); cached = (cache_directory != NULL); /* build the storage structure */ storage = mailstorage_new(NULL); if (storage == NULL) { printf("error initializing storage\n"); goto free_opt; } r = init_storage(storage, driver, server, port, connection_type, user, password, auth_type, path, cache_directory, flags_directory); if (r != MAIL_NO_ERROR) { printf("error initializing storage\n"); goto free_opt; } /* get the folder structure */ folder = mailfolder_new(storage, path, NULL); if (folder == NULL) { printf("error initializing folder\n"); goto free_storage; } r = mailfolder_connect(folder); if (r != MAIL_NO_ERROR) { printf("error initializing folder\n"); goto free_folder; } while (optind < argc) { mailmessage * msg; uint32_t msg_num; struct mailmime * mime; msg_num = strtoul(argv[optind], NULL, 10); r = mailsession_get_message(folder->fld_session, msg_num, &msg); if (r != MAIL_NO_ERROR) { printf("** message %i not found ** - %s\n", msg_num, maildriver_strerror(r)); optind ++; continue; } r = mailmessage_get_bodystructure(msg, &mime); if (r != MAIL_NO_ERROR) { printf("** message %i not found - %s **\n", msg_num, maildriver_strerror(r)); mailmessage_free(msg); optind ++; continue; } r = etpan_fetch_mime(stdout, msg, mime); mailmessage_free(msg); optind ++; } mailfolder_free(folder); mailstorage_free(storage); if (server != NULL) free(server); if (user != NULL) free(user); if (password != NULL) free(password); if (path != NULL) free(path); if (cache_directory != NULL) free(cache_directory); if (flags_directory != NULL) free(flags_directory); return 0; free_folder: mailfolder_free(folder); free_storage: mailstorage_free(storage); free_opt: if (server != NULL) free(server); if (user != NULL) free(user); if (password != NULL) free(password); if (path != NULL) free(path); if (cache_directory != NULL) free(cache_directory); if (flags_directory != NULL) free(flags_directory); return -1; }
int main(int argc, char ** argv) { int r; int driver; char * server; int port; int connection_type; char * user; char * password; int auth_type; bool xoauth2; char * path; char * cache_directory; char * flags_directory; struct mailstorage * storage; struct mailfolder * folder; /* get options */ r = parse_options(argc, argv, &driver, &server, &port, &connection_type, &user, &password, &auth_type, &xoauth2, &path, &cache_directory, &flags_directory); /* build the storage structure */ storage = mailstorage_new(NULL); if (storage == NULL) { printf("error initializing storage\n"); goto free_opt; } r = init_storage(storage, driver, server, port, connection_type, user, password, auth_type, xoauth2, path, cache_directory, flags_directory); if (r != MAIL_NO_ERROR) { printf("error initializing storage\n"); goto free_opt; } /* get the folder structure */ folder = mailfolder_new(storage, path, NULL); if (folder == NULL) { printf("error initializing folder\n"); goto free_storage; } r = mailfolder_connect(folder); if (r != MAIL_NO_ERROR) { printf("error initializing folder\n"); goto free_folder; } /* get and display the list of messages */ print_message_list(folder->fld_session); mailfolder_free(folder); mailstorage_free(storage); if (server != NULL) free(server); if (user != NULL) free(user); if (password != NULL) free(password); if (path != NULL) free(path); if (cache_directory != NULL) free(cache_directory); if (flags_directory != NULL) free(flags_directory); return 0; free_folder: mailfolder_free(folder); free_storage: mailstorage_free(storage); free_opt: if (server != NULL) free(server); if (user != NULL) free(user); if (password != NULL) free(password); if (path != NULL) free(path); if (cache_directory != NULL) free(cache_directory); if (flags_directory != NULL) free(flags_directory); return -1; }