Diffstat (limited to 'kmicromail/libetpan/generic/imapdriver.c') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libetpan/generic/imapdriver.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/kmicromail/libetpan/generic/imapdriver.c b/kmicromail/libetpan/generic/imapdriver.c index 0d63319..b3e5982 100644 --- a/kmicromail/libetpan/generic/imapdriver.c +++ b/kmicromail/libetpan/generic/imapdriver.c | |||
@@ -79,48 +79,50 @@ static int imapdriver_examine_folder(mailsession * session, char * mb); | |||
79 | static int imapdriver_select_folder(mailsession * session, char * mb); | 79 | static int imapdriver_select_folder(mailsession * session, char * mb); |
80 | static int imapdriver_expunge_folder(mailsession * session); | 80 | static int imapdriver_expunge_folder(mailsession * session); |
81 | 81 | ||
82 | static int imapdriver_status_folder(mailsession * session, char * mb, | 82 | static int imapdriver_status_folder(mailsession * session, char * mb, |
83 | uint32_t * result_messages, uint32_t * result_recent, | 83 | uint32_t * result_messages, uint32_t * result_recent, |
84 | uint32_t * result_unseen); | 84 | uint32_t * result_unseen); |
85 | 85 | ||
86 | static int imapdriver_messages_number(mailsession * session, char * mb, | 86 | static int imapdriver_messages_number(mailsession * session, char * mb, |
87 | uint32_t * result); | 87 | uint32_t * result); |
88 | 88 | ||
89 | static int imapdriver_recent_number(mailsession * session, char * mb, | 89 | static int imapdriver_recent_number(mailsession * session, char * mb, |
90 | uint32_t * result); | 90 | uint32_t * result); |
91 | 91 | ||
92 | static int imapdriver_unseen_number(mailsession * session, char * mb, | 92 | static int imapdriver_unseen_number(mailsession * session, char * mb, |
93 | uint32_t * result); | 93 | uint32_t * result); |
94 | 94 | ||
95 | static int imapdriver_list_folders(mailsession * session, char * mb, | 95 | static int imapdriver_list_folders(mailsession * session, char * mb, |
96 | struct mail_list ** result); | 96 | struct mail_list ** result); |
97 | static int imapdriver_lsub_folders(mailsession * session, char * mb, | 97 | static int imapdriver_lsub_folders(mailsession * session, char * mb, |
98 | struct mail_list ** result); | 98 | struct mail_list ** result); |
99 | static int imapdriver_subscribe_folder(mailsession * session, char * mb); | 99 | static int imapdriver_subscribe_folder(mailsession * session, char * mb); |
100 | static int imapdriver_unsubscribe_folder(mailsession * session, char * mb); | 100 | static int imapdriver_unsubscribe_folder(mailsession * session, char * mb); |
101 | static int imapdriver_append_message(mailsession * session, | 101 | static int imapdriver_append_message(mailsession * session, |
102 | char * message, size_t size); | 102 | char * message, size_t size); |
103 | static int imapdriver_append_message_flags(mailsession * session, | ||
104 | char * message, size_t size, struct mail_flags * flags); | ||
103 | static int imapdriver_copy_message(mailsession * session, | 105 | static int imapdriver_copy_message(mailsession * session, |
104 | uint32_t num, char * mb); | 106 | uint32_t num, char * mb); |
105 | 107 | ||
106 | static int imapdriver_get_messages_list(mailsession * session, | 108 | static int imapdriver_get_messages_list(mailsession * session, |
107 | struct mailmessage_list ** result); | 109 | struct mailmessage_list ** result); |
108 | 110 | ||
109 | static int | 111 | static int |
110 | imapdriver_get_envelopes_list(mailsession * session, | 112 | imapdriver_get_envelopes_list(mailsession * session, |
111 | struct mailmessage_list * env_list); | 113 | struct mailmessage_list * env_list); |
112 | 114 | ||
113 | 115 | ||
114 | #if 0 | 116 | #if 0 |
115 | static int imapdriver_search_messages(mailsession * session, char * charset, | 117 | static int imapdriver_search_messages(mailsession * session, char * charset, |
116 | struct mail_search_key * key, | 118 | struct mail_search_key * key, |
117 | struct mail_search_result ** result); | 119 | struct mail_search_result ** result); |
118 | #endif | 120 | #endif |
119 | 121 | ||
120 | static int imapdriver_get_message(mailsession * session, | 122 | static int imapdriver_get_message(mailsession * session, |
121 | uint32_t num, mailmessage ** result); | 123 | uint32_t num, mailmessage ** result); |
122 | 124 | ||
123 | static int imapdriver_get_message_by_uid(mailsession * session, | 125 | static int imapdriver_get_message_by_uid(mailsession * session, |
124 | const char * uid, | 126 | const char * uid, |
125 | mailmessage ** result); | 127 | mailmessage ** result); |
126 | 128 | ||
@@ -136,48 +138,49 @@ static mailsession_driver local_imap_session_driver = { | |||
136 | .sess_connect_path = NULL, | 138 | .sess_connect_path = NULL, |
137 | .sess_starttls = imapdriver_starttls, | 139 | .sess_starttls = imapdriver_starttls, |
138 | .sess_login = imapdriver_login, | 140 | .sess_login = imapdriver_login, |
139 | .sess_logout = imapdriver_logout, | 141 | .sess_logout = imapdriver_logout, |
140 | .sess_noop = imapdriver_noop, | 142 | .sess_noop = imapdriver_noop, |
141 | 143 | ||
142 | .sess_build_folder_name = imapdriver_build_folder_name, | 144 | .sess_build_folder_name = imapdriver_build_folder_name, |
143 | .sess_create_folder = imapdriver_create_folder, | 145 | .sess_create_folder = imapdriver_create_folder, |
144 | .sess_delete_folder = imapdriver_delete_folder, | 146 | .sess_delete_folder = imapdriver_delete_folder, |
145 | .sess_rename_folder = imapdriver_rename_folder, | 147 | .sess_rename_folder = imapdriver_rename_folder, |
146 | .sess_check_folder = imapdriver_check_folder, | 148 | .sess_check_folder = imapdriver_check_folder, |
147 | .sess_examine_folder = imapdriver_examine_folder, | 149 | .sess_examine_folder = imapdriver_examine_folder, |
148 | .sess_select_folder = imapdriver_select_folder, | 150 | .sess_select_folder = imapdriver_select_folder, |
149 | .sess_expunge_folder = imapdriver_expunge_folder, | 151 | .sess_expunge_folder = imapdriver_expunge_folder, |
150 | .sess_status_folder = imapdriver_status_folder, | 152 | .sess_status_folder = imapdriver_status_folder, |
151 | .sess_messages_number = imapdriver_messages_number, | 153 | .sess_messages_number = imapdriver_messages_number, |
152 | .sess_recent_number = imapdriver_recent_number, | 154 | .sess_recent_number = imapdriver_recent_number, |
153 | .sess_unseen_number = imapdriver_unseen_number, | 155 | .sess_unseen_number = imapdriver_unseen_number, |
154 | .sess_list_folders = imapdriver_list_folders, | 156 | .sess_list_folders = imapdriver_list_folders, |
155 | .sess_lsub_folders = imapdriver_lsub_folders, | 157 | .sess_lsub_folders = imapdriver_lsub_folders, |
156 | .sess_subscribe_folder = imapdriver_subscribe_folder, | 158 | .sess_subscribe_folder = imapdriver_subscribe_folder, |
157 | .sess_unsubscribe_folder = imapdriver_unsubscribe_folder, | 159 | .sess_unsubscribe_folder = imapdriver_unsubscribe_folder, |
158 | 160 | ||
159 | .sess_append_message = imapdriver_append_message, | 161 | .sess_append_message = imapdriver_append_message, |
162 | .sess_append_message_flags = imapdriver_append_message_flags, | ||
160 | .sess_copy_message = imapdriver_copy_message, | 163 | .sess_copy_message = imapdriver_copy_message, |
161 | .sess_move_message = NULL, | 164 | .sess_move_message = NULL, |
162 | 165 | ||
163 | .sess_get_messages_list = imapdriver_get_messages_list, | 166 | .sess_get_messages_list = imapdriver_get_messages_list, |
164 | .sess_get_envelopes_list = imapdriver_get_envelopes_list, | 167 | .sess_get_envelopes_list = imapdriver_get_envelopes_list, |
165 | .sess_remove_message = NULL, | 168 | .sess_remove_message = NULL, |
166 | #if 0 | 169 | #if 0 |
167 | .sess_search_messages = imapdriver_search_messages, | 170 | .sess_search_messages = imapdriver_search_messages, |
168 | #endif | 171 | #endif |
169 | 172 | ||
170 | .sess_get_message = imapdriver_get_message, | 173 | .sess_get_message = imapdriver_get_message, |
171 | .sess_get_message_by_uid = imapdriver_get_message_by_uid, | 174 | .sess_get_message_by_uid = imapdriver_get_message_by_uid, |
172 | }; | 175 | }; |
173 | 176 | ||
174 | mailsession_driver * imap_session_driver = &local_imap_session_driver; | 177 | mailsession_driver * imap_session_driver = &local_imap_session_driver; |
175 | 178 | ||
176 | static inline struct imap_session_state_data * get_data(mailsession * session) | 179 | static inline struct imap_session_state_data * get_data(mailsession * session) |
177 | { | 180 | { |
178 | return session->sess_data; | 181 | return session->sess_data; |
179 | } | 182 | } |
180 | 183 | ||
181 | static mailimap * get_imap_session(mailsession * session) | 184 | static mailimap * get_imap_session(mailsession * session) |
182 | { | 185 | { |
183 | return get_data(session)->imap_session; | 186 | return get_data(session)->imap_session; |
@@ -750,48 +753,73 @@ static int imapdriver_subscribe_folder(mailsession * session, char * mb) | |||
750 | 753 | ||
751 | static int imapdriver_unsubscribe_folder(mailsession * session, char * mb) | 754 | static int imapdriver_unsubscribe_folder(mailsession * session, char * mb) |
752 | { | 755 | { |
753 | int r; | 756 | int r; |
754 | 757 | ||
755 | r = mailimap_unsubscribe(get_imap_session(session), mb); | 758 | r = mailimap_unsubscribe(get_imap_session(session), mb); |
756 | 759 | ||
757 | return imap_error_to_mail_error(r); | 760 | return imap_error_to_mail_error(r); |
758 | } | 761 | } |
759 | 762 | ||
760 | /* messages operations */ | 763 | /* messages operations */ |
761 | 764 | ||
762 | static int imapdriver_append_message(mailsession * session, | 765 | static int imapdriver_append_message(mailsession * session, |
763 | char * message, size_t size) | 766 | char * message, size_t size) |
764 | { | 767 | { |
765 | int r; | 768 | int r; |
766 | 769 | ||
767 | r = mailimap_append_simple(get_imap_session(session), | 770 | r = mailimap_append_simple(get_imap_session(session), |
768 | get_data(session)->imap_mailbox, | 771 | get_data(session)->imap_mailbox, |
769 | message, size); | 772 | message, size); |
770 | 773 | ||
771 | return imap_error_to_mail_error(r); | 774 | return imap_error_to_mail_error(r); |
772 | } | 775 | } |
773 | 776 | ||
777 | static int imapdriver_append_message_flags(mailsession * session, | ||
778 | char * message, size_t size, struct mail_flags * flags) | ||
779 | { | ||
780 | struct mailimap_flag_list * flag_list; | ||
781 | int r; | ||
782 | |||
783 | if (flags != NULL) { | ||
784 | r = imap_flags_to_imap_flags(flags, &flag_list); | ||
785 | if (r != MAIL_NO_ERROR) | ||
786 | return r; | ||
787 | } | ||
788 | else { | ||
789 | flag_list = NULL; | ||
790 | } | ||
791 | |||
792 | r = mailimap_append(get_imap_session(session), | ||
793 | get_data(session)->imap_mailbox, | ||
794 | flag_list, NULL, message, size); | ||
795 | |||
796 | if (flag_list != NULL) | ||
797 | mailimap_flag_list_free(flag_list); | ||
798 | |||
799 | return imap_error_to_mail_error(r); | ||
800 | } | ||
801 | |||
774 | static int imapdriver_copy_message(mailsession * session, | 802 | static int imapdriver_copy_message(mailsession * session, |
775 | uint32_t num, char * mb) | 803 | uint32_t num, char * mb) |
776 | { | 804 | { |
777 | int r; | 805 | int r; |
778 | struct mailimap_set * set; | 806 | struct mailimap_set * set; |
779 | int res; | 807 | int res; |
780 | 808 | ||
781 | set = mailimap_set_new_single(num); | 809 | set = mailimap_set_new_single(num); |
782 | if (set == NULL) { | 810 | if (set == NULL) { |
783 | res = MAIL_ERROR_MEMORY; | 811 | res = MAIL_ERROR_MEMORY; |
784 | goto err; | 812 | goto err; |
785 | } | 813 | } |
786 | 814 | ||
787 | r = mailimap_uid_copy(get_imap_session(session), set, mb); | 815 | r = mailimap_uid_copy(get_imap_session(session), set, mb); |
788 | 816 | ||
789 | mailimap_set_free(set); | 817 | mailimap_set_free(set); |
790 | 818 | ||
791 | return imap_error_to_mail_error(r); | 819 | return imap_error_to_mail_error(r); |
792 | 820 | ||
793 | err: | 821 | err: |
794 | return res; | 822 | return res; |
795 | } | 823 | } |
796 | 824 | ||
797 | static int imapdriver_get_messages_list(mailsession * session, | 825 | static int imapdriver_get_messages_list(mailsession * session, |