Diffstat (limited to 'kmicromail/libetpan/generic/pop3driver_cached.c') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libetpan/generic/pop3driver_cached.c | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/kmicromail/libetpan/generic/pop3driver_cached.c b/kmicromail/libetpan/generic/pop3driver_cached.c index 6f97303..24f624b 100644 --- a/kmicromail/libetpan/generic/pop3driver_cached.c +++ b/kmicromail/libetpan/generic/pop3driver_cached.c | |||
@@ -89,93 +89,97 @@ static int pop3driver_cached_messages_number(mailsession * session, | |||
89 | uint32_t * result); | 89 | uint32_t * result); |
90 | 90 | ||
91 | static int pop3driver_cached_recent_number(mailsession * session, | 91 | static int pop3driver_cached_recent_number(mailsession * session, |
92 | char * mb, | 92 | char * mb, |
93 | uint32_t * result); | 93 | uint32_t * result); |
94 | 94 | ||
95 | static int pop3driver_cached_unseen_number(mailsession * session, | 95 | static int pop3driver_cached_unseen_number(mailsession * session, |
96 | char * mb, | 96 | char * mb, |
97 | uint32_t * result); | 97 | uint32_t * result); |
98 | 98 | ||
99 | static int pop3driver_cached_remove_message(mailsession * session, | 99 | static int pop3driver_cached_remove_message(mailsession * session, |
100 | uint32_t num); | 100 | uint32_t num); |
101 | 101 | ||
102 | static int | 102 | static int |
103 | pop3driver_cached_get_messages_list(mailsession * session, | 103 | pop3driver_cached_get_messages_list(mailsession * session, |
104 | struct mailmessage_list ** result); | 104 | struct mailmessage_list ** result); |
105 | 105 | ||
106 | static int | 106 | static int |
107 | pop3driver_cached_get_envelopes_list(mailsession * session, | 107 | pop3driver_cached_get_envelopes_list(mailsession * session, |
108 | struct mailmessage_list * env_list); | 108 | struct mailmessage_list * env_list); |
109 | 109 | ||
110 | static int pop3driver_cached_get_message(mailsession * session, | 110 | static int pop3driver_cached_get_message(mailsession * session, |
111 | uint32_t num, mailmessage ** result); | 111 | uint32_t num, mailmessage ** result); |
112 | 112 | ||
113 | static int pop3driver_cached_get_message_by_uid(mailsession * session, | ||
114 | const char * uid, mailmessage ** result); | ||
115 | |||
113 | static mailsession_driver local_pop3_cached_session_driver = { | 116 | static mailsession_driver local_pop3_cached_session_driver = { |
114 | .sess_name = "pop3-cached", | 117 | .sess_name = "pop3-cached", |
115 | 118 | ||
116 | .sess_initialize = pop3driver_cached_initialize, | 119 | .sess_initialize = pop3driver_cached_initialize, |
117 | .sess_uninitialize = pop3driver_cached_uninitialize, | 120 | .sess_uninitialize = pop3driver_cached_uninitialize, |
118 | 121 | ||
119 | .sess_parameters = pop3driver_cached_parameters, | 122 | .sess_parameters = pop3driver_cached_parameters, |
120 | 123 | ||
121 | .sess_connect_stream = pop3driver_cached_connect_stream, | 124 | .sess_connect_stream = pop3driver_cached_connect_stream, |
122 | .sess_connect_path = NULL, | 125 | .sess_connect_path = NULL, |
123 | .sess_starttls = pop3driver_cached_starttls, | 126 | .sess_starttls = pop3driver_cached_starttls, |
124 | .sess_login = pop3driver_cached_login, | 127 | .sess_login = pop3driver_cached_login, |
125 | .sess_logout = pop3driver_cached_logout, | 128 | .sess_logout = pop3driver_cached_logout, |
126 | .sess_noop = pop3driver_cached_noop, | 129 | .sess_noop = pop3driver_cached_noop, |
127 | 130 | ||
128 | .sess_build_folder_name = NULL, | 131 | .sess_build_folder_name = NULL, |
129 | .sess_create_folder = NULL, | 132 | .sess_create_folder = NULL, |
130 | .sess_delete_folder = NULL, | 133 | .sess_delete_folder = NULL, |
131 | .sess_rename_folder = NULL, | 134 | .sess_rename_folder = NULL, |
132 | .sess_check_folder = pop3driver_cached_check_folder, | 135 | .sess_check_folder = pop3driver_cached_check_folder, |
133 | .sess_examine_folder = NULL, | 136 | .sess_examine_folder = NULL, |
134 | .sess_select_folder = NULL, | 137 | .sess_select_folder = NULL, |
135 | .sess_expunge_folder = pop3driver_cached_expunge_folder, | 138 | .sess_expunge_folder = pop3driver_cached_expunge_folder, |
136 | .sess_status_folder = pop3driver_cached_status_folder, | 139 | .sess_status_folder = pop3driver_cached_status_folder, |
137 | .sess_messages_number = pop3driver_cached_messages_number, | 140 | .sess_messages_number = pop3driver_cached_messages_number, |
138 | .sess_recent_number = pop3driver_cached_recent_number, | 141 | .sess_recent_number = pop3driver_cached_recent_number, |
139 | .sess_unseen_number = pop3driver_cached_unseen_number, | 142 | .sess_unseen_number = pop3driver_cached_unseen_number, |
140 | .sess_list_folders = NULL, | 143 | .sess_list_folders = NULL, |
141 | .sess_lsub_folders = NULL, | 144 | .sess_lsub_folders = NULL, |
142 | .sess_subscribe_folder = NULL, | 145 | .sess_subscribe_folder = NULL, |
143 | .sess_unsubscribe_folder = NULL, | 146 | .sess_unsubscribe_folder = NULL, |
144 | 147 | ||
145 | .sess_append_message = NULL, | 148 | .sess_append_message = NULL, |
149 | .sess_append_message_flags = NULL, | ||
146 | .sess_copy_message = NULL, | 150 | .sess_copy_message = NULL, |
147 | .sess_move_message = NULL, | 151 | .sess_move_message = NULL, |
148 | 152 | ||
149 | .sess_get_messages_list = pop3driver_cached_get_messages_list, | 153 | .sess_get_messages_list = pop3driver_cached_get_messages_list, |
150 | .sess_get_envelopes_list = pop3driver_cached_get_envelopes_list, | 154 | .sess_get_envelopes_list = pop3driver_cached_get_envelopes_list, |
151 | .sess_remove_message = pop3driver_cached_remove_message, | 155 | .sess_remove_message = pop3driver_cached_remove_message, |
152 | #if 0 | 156 | #if 0 |
153 | .sess_search_messages = maildriver_generic_search_messages, | 157 | .sess_search_messages = maildriver_generic_search_messages, |
154 | #endif | 158 | #endif |
155 | 159 | ||
156 | .sess_get_message = pop3driver_cached_get_message, | 160 | .sess_get_message = pop3driver_cached_get_message, |
157 | .sess_get_message_by_uid = NULL, | 161 | .sess_get_message_by_uid = pop3driver_cached_get_message_by_uid, |
158 | }; | 162 | }; |
159 | 163 | ||
160 | mailsession_driver * pop3_cached_session_driver = | 164 | mailsession_driver * pop3_cached_session_driver = |
161 | &local_pop3_cached_session_driver; | 165 | &local_pop3_cached_session_driver; |
162 | 166 | ||
163 | #define ENV_NAME "env.db" | 167 | #define ENV_NAME "env.db" |
164 | #define FLAGS_NAME "flags.db" | 168 | #define FLAGS_NAME "flags.db" |
165 | 169 | ||
166 | 170 | ||
167 | static inline struct pop3_cached_session_state_data * | 171 | static inline struct pop3_cached_session_state_data * |
168 | get_cached_data(mailsession * session) | 172 | get_cached_data(mailsession * session) |
169 | { | 173 | { |
170 | return session->sess_data; | 174 | return session->sess_data; |
171 | } | 175 | } |
172 | 176 | ||
173 | static inline mailsession * get_ancestor(mailsession * session) | 177 | static inline mailsession * get_ancestor(mailsession * session) |
174 | { | 178 | { |
175 | return get_cached_data(session)->pop3_ancestor; | 179 | return get_cached_data(session)->pop3_ancestor; |
176 | } | 180 | } |
177 | 181 | ||
178 | static inline struct pop3_session_state_data * | 182 | static inline struct pop3_session_state_data * |
179 | get_ancestor_data(mailsession * session) | 183 | get_ancestor_data(mailsession * session) |
180 | { | 184 | { |
181 | return get_ancestor(session)->sess_data; | 185 | return get_ancestor(session)->sess_data; |
@@ -834,24 +838,62 @@ pop3driver_cached_get_envelopes_list(mailsession * session, | |||
834 | err: | 838 | err: |
835 | return res; | 839 | return res; |
836 | } | 840 | } |
837 | 841 | ||
838 | static int pop3driver_cached_get_message(mailsession * session, | 842 | static int pop3driver_cached_get_message(mailsession * session, |
839 | uint32_t num, mailmessage ** result) | 843 | uint32_t num, mailmessage ** result) |
840 | { | 844 | { |
841 | mailmessage * msg_info; | 845 | mailmessage * msg_info; |
842 | int r; | 846 | int r; |
843 | 847 | ||
844 | msg_info = mailmessage_new(); | 848 | msg_info = mailmessage_new(); |
845 | if (msg_info == NULL) | 849 | if (msg_info == NULL) |
846 | return MAIL_ERROR_MEMORY; | 850 | return MAIL_ERROR_MEMORY; |
847 | 851 | ||
848 | r = mailmessage_init(msg_info, session, pop3_cached_message_driver, num, 0); | 852 | r = mailmessage_init(msg_info, session, pop3_cached_message_driver, num, 0); |
849 | if (r != MAIL_NO_ERROR) { | 853 | if (r != MAIL_NO_ERROR) { |
850 | mailmessage_free(msg_info); | 854 | mailmessage_free(msg_info); |
851 | return r; | 855 | return r; |
852 | } | 856 | } |
853 | 857 | ||
854 | * result = msg_info; | 858 | * result = msg_info; |
855 | 859 | ||
856 | return MAIL_NO_ERROR; | 860 | return MAIL_NO_ERROR; |
857 | } | 861 | } |
862 | |||
863 | static int pop3driver_cached_get_message_by_uid(mailsession * session, | ||
864 | const char * uid, mailmessage ** result) | ||
865 | { | ||
866 | mailpop3 * pop3; | ||
867 | struct mailpop3_msg_info * msg_info; | ||
868 | int found; | ||
869 | unsigned int i; | ||
870 | |||
871 | if (uid == NULL) | ||
872 | return MAIL_ERROR_INVAL; | ||
873 | |||
874 | pop3 = get_pop3_session(session); | ||
875 | |||
876 | found = 0; | ||
877 | |||
878 | /* iterate all messages and look for uid */ | ||
879 | for(i = 0 ; i < carray_count(pop3->pop3_msg_tab) ; i++) { | ||
880 | msg_info = carray_get(pop3->pop3_msg_tab, i); | ||
881 | |||
882 | if (msg_info == NULL) | ||
883 | continue; | ||
884 | |||
885 | if (msg_info->msg_deleted) | ||
886 | continue; | ||
887 | |||
888 | /* uid found, stop looking */ | ||
889 | if (strcmp(msg_info->msg_uidl, uid) == 0) { | ||
890 | found = 1; | ||
891 | break; | ||
892 | } | ||
893 | } | ||
894 | |||
895 | if (!found) | ||
896 | return MAIL_ERROR_MSG_NOT_FOUND; | ||
897 | |||
898 | return pop3driver_cached_get_message(session, msg_info->msg_index, result); | ||
899 | } | ||