author | zautrix <zautrix> | 2004-09-01 10:23:29 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-09-01 10:23:29 (UTC) |
commit | 6cefbdc9c8f3f3001373f10715361e2740c45395 (patch) (unidiff) | |
tree | cb2c36f57620e698913c27ca4ebe59e4a7c9d46e /kmicromail/libetpan/generic/imapdriver.c | |
parent | b9257cb225cd29bab5d96fcdaf557926603ee587 (diff) | |
download | kdepimpi-6cefbdc9c8f3f3001373f10715361e2740c45395.zip kdepimpi-6cefbdc9c8f3f3001373f10715361e2740c45395.tar.gz kdepimpi-6cefbdc9c8f3f3001373f10715361e2740c45395.tar.bz2 |
Mail fixes and libetpan updated
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 | |||
@@ -55,153 +55,156 @@ static int imapdriver_connect_stream(mailsession * session, mailstream * s); | |||
55 | 55 | ||
56 | static int imapdriver_starttls(mailsession * session); | 56 | static int imapdriver_starttls(mailsession * session); |
57 | 57 | ||
58 | static int imapdriver_login(mailsession * session, | 58 | static int imapdriver_login(mailsession * session, |
59 | char * userid, char * password); | 59 | char * userid, char * password); |
60 | 60 | ||
61 | static int imapdriver_logout(mailsession * session); | 61 | static int imapdriver_logout(mailsession * session); |
62 | 62 | ||
63 | static int imapdriver_noop(mailsession * session); | 63 | static int imapdriver_noop(mailsession * session); |
64 | 64 | ||
65 | static int imapdriver_build_folder_name(mailsession * session, char * mb, | 65 | static int imapdriver_build_folder_name(mailsession * session, char * mb, |
66 | char * name, char ** result); | 66 | char * name, char ** result); |
67 | 67 | ||
68 | static int imapdriver_create_folder(mailsession * session, char * mb); | 68 | static int imapdriver_create_folder(mailsession * session, char * mb); |
69 | 69 | ||
70 | static int imapdriver_delete_folder(mailsession * session, char * mb); | 70 | static int imapdriver_delete_folder(mailsession * session, char * mb); |
71 | 71 | ||
72 | static int imapdriver_rename_folder(mailsession * session, char * mb, | 72 | static int imapdriver_rename_folder(mailsession * session, char * mb, |
73 | char * new_name); | 73 | char * new_name); |
74 | 74 | ||
75 | static int imapdriver_check_folder(mailsession * session); | 75 | static int imapdriver_check_folder(mailsession * session); |
76 | 76 | ||
77 | static int imapdriver_examine_folder(mailsession * session, char * mb); | 77 | static int imapdriver_examine_folder(mailsession * session, char * mb); |
78 | 78 | ||
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 | ||
127 | static mailsession_driver local_imap_session_driver = { | 129 | static mailsession_driver local_imap_session_driver = { |
128 | .sess_name = "imap", | 130 | .sess_name = "imap", |
129 | 131 | ||
130 | .sess_initialize = imapdriver_initialize, | 132 | .sess_initialize = imapdriver_initialize, |
131 | .sess_uninitialize = imapdriver_uninitialize, | 133 | .sess_uninitialize = imapdriver_uninitialize, |
132 | 134 | ||
133 | .sess_parameters = NULL, | 135 | .sess_parameters = NULL, |
134 | 136 | ||
135 | .sess_connect_stream = imapdriver_connect_stream, | 137 | .sess_connect_stream = imapdriver_connect_stream, |
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; |
184 | } | 187 | } |
185 | 188 | ||
186 | static int imapdriver_initialize(mailsession * session) | 189 | static int imapdriver_initialize(mailsession * session) |
187 | { | 190 | { |
188 | struct imap_session_state_data * data; | 191 | struct imap_session_state_data * data; |
189 | mailimap * imap; | 192 | mailimap * imap; |
190 | struct mail_flags_store * flags_store; | 193 | struct mail_flags_store * flags_store; |
191 | 194 | ||
192 | imap = mailimap_new(0, NULL); | 195 | imap = mailimap_new(0, NULL); |
193 | if (imap == NULL) | 196 | if (imap == NULL) |
194 | goto err; | 197 | goto err; |
195 | 198 | ||
196 | flags_store = mail_flags_store_new(); | 199 | flags_store = mail_flags_store_new(); |
197 | if (flags_store == NULL) | 200 | if (flags_store == NULL) |
198 | goto free_session; | 201 | goto free_session; |
199 | 202 | ||
200 | data = malloc(sizeof(* data)); | 203 | data = malloc(sizeof(* data)); |
201 | if (data == NULL) | 204 | if (data == NULL) |
202 | goto free_flags_store; | 205 | goto free_flags_store; |
203 | 206 | ||
204 | data->imap_mailbox = NULL; | 207 | data->imap_mailbox = NULL; |
205 | data->imap_session = imap; | 208 | data->imap_session = imap; |
206 | data->imap_flags_store = flags_store; | 209 | data->imap_flags_store = flags_store; |
207 | 210 | ||
@@ -726,96 +729,121 @@ static int imapdriver_list_lsub_folders(mailsession * session, int type, | |||
726 | } | 729 | } |
727 | 730 | ||
728 | static int imapdriver_list_folders(mailsession * session, char * mb, | 731 | static int imapdriver_list_folders(mailsession * session, char * mb, |
729 | struct mail_list ** result) | 732 | struct mail_list ** result) |
730 | { | 733 | { |
731 | return imapdriver_list_lsub_folders(session, IMAP_LIST, mb, | 734 | return imapdriver_list_lsub_folders(session, IMAP_LIST, mb, |
732 | result); | 735 | result); |
733 | } | 736 | } |
734 | 737 | ||
735 | static int imapdriver_lsub_folders(mailsession * session, char * mb, | 738 | static int imapdriver_lsub_folders(mailsession * session, char * mb, |
736 | struct mail_list ** result) | 739 | struct mail_list ** result) |
737 | { | 740 | { |
738 | return imapdriver_list_lsub_folders(session, IMAP_LSUB, mb, | 741 | return imapdriver_list_lsub_folders(session, IMAP_LSUB, mb, |
739 | result); | 742 | result); |
740 | } | 743 | } |
741 | 744 | ||
742 | static int imapdriver_subscribe_folder(mailsession * session, char * mb) | 745 | static int imapdriver_subscribe_folder(mailsession * session, char * mb) |
743 | { | 746 | { |
744 | int r; | 747 | int r; |
745 | 748 | ||
746 | r = mailimap_subscribe(get_imap_session(session), mb); | 749 | r = mailimap_subscribe(get_imap_session(session), mb); |
747 | 750 | ||
748 | return imap_error_to_mail_error(r); | 751 | return imap_error_to_mail_error(r); |
749 | } | 752 | } |
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, |
798 | struct mailmessage_list ** result) | 826 | struct mailmessage_list ** result) |
799 | { | 827 | { |
800 | return imap_get_messages_list(get_imap_session(session), | 828 | return imap_get_messages_list(get_imap_session(session), |
801 | session, imap_message_driver, 1, | 829 | session, imap_message_driver, 1, |
802 | result); | 830 | result); |
803 | } | 831 | } |
804 | 832 | ||
805 | 833 | ||
806 | 834 | ||
807 | static int | 835 | static int |
808 | imapdriver_get_envelopes_list(mailsession * session, | 836 | imapdriver_get_envelopes_list(mailsession * session, |
809 | struct mailmessage_list * env_list) | 837 | struct mailmessage_list * env_list) |
810 | { | 838 | { |
811 | struct mailimap_set * set; | 839 | struct mailimap_set * set; |
812 | struct mailimap_fetch_att * fetch_att; | 840 | struct mailimap_fetch_att * fetch_att; |
813 | struct mailimap_fetch_type * fetch_type; | 841 | struct mailimap_fetch_type * fetch_type; |
814 | int res; | 842 | int res; |
815 | clist * fetch_result; | 843 | clist * fetch_result; |
816 | int r; | 844 | int r; |
817 | uint32_t exists; | 845 | uint32_t exists; |
818 | clist * msg_list; | 846 | clist * msg_list; |
819 | 847 | ||
820 | if (get_imap_session(session)->imap_selection_info == NULL) { | 848 | if (get_imap_session(session)->imap_selection_info == NULL) { |
821 | res = MAIL_ERROR_BAD_STATE; | 849 | res = MAIL_ERROR_BAD_STATE; |