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/mboxdriver.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/mboxdriver.c') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libetpan/generic/mboxdriver.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kmicromail/libetpan/generic/mboxdriver.c b/kmicromail/libetpan/generic/mboxdriver.c index fa3e2ea..c19a668 100644 --- a/kmicromail/libetpan/generic/mboxdriver.c +++ b/kmicromail/libetpan/generic/mboxdriver.c | |||
@@ -32,145 +32,149 @@ | |||
32 | /* | 32 | /* |
33 | * $Id$ | 33 | * $Id$ |
34 | */ | 34 | */ |
35 | 35 | ||
36 | #include "mboxdriver.h" | 36 | #include "mboxdriver.h" |
37 | 37 | ||
38 | #include <stdio.h> | 38 | #include <stdio.h> |
39 | #include <string.h> | 39 | #include <string.h> |
40 | #include <sys/types.h> | 40 | #include <sys/types.h> |
41 | #include <dirent.h> | 41 | #include <dirent.h> |
42 | #include <unistd.h> | 42 | #include <unistd.h> |
43 | #include <sys/stat.h> | 43 | #include <sys/stat.h> |
44 | #include <ctype.h> | 44 | #include <ctype.h> |
45 | #include <stdlib.h> | 45 | #include <stdlib.h> |
46 | #include <sys/times.h> | 46 | #include <sys/times.h> |
47 | 47 | ||
48 | #include "mail.h" | 48 | #include "mail.h" |
49 | #include "maildriver_tools.h" | 49 | #include "maildriver_tools.h" |
50 | #include "mailmbox.h" | 50 | #include "mailmbox.h" |
51 | #include "mboxdriver_tools.h" | 51 | #include "mboxdriver_tools.h" |
52 | #include "maildriver.h" | 52 | #include "maildriver.h" |
53 | #include "carray.h" | 53 | #include "carray.h" |
54 | #include "mboxdriver_message.h" | 54 | #include "mboxdriver_message.h" |
55 | #include "mailmessage.h" | 55 | #include "mailmessage.h" |
56 | 56 | ||
57 | static int mboxdriver_initialize(mailsession * session); | 57 | static int mboxdriver_initialize(mailsession * session); |
58 | 58 | ||
59 | static void mboxdriver_uninitialize(mailsession * session); | 59 | static void mboxdriver_uninitialize(mailsession * session); |
60 | 60 | ||
61 | static int mboxdriver_parameters(mailsession * session, | 61 | static int mboxdriver_parameters(mailsession * session, |
62 | int id, void * value); | 62 | int id, void * value); |
63 | 63 | ||
64 | static int mboxdriver_connect_path(mailsession * session, char * path); | 64 | static int mboxdriver_connect_path(mailsession * session, char * path); |
65 | 65 | ||
66 | static int mboxdriver_logout(mailsession * session); | 66 | static int mboxdriver_logout(mailsession * session); |
67 | 67 | ||
68 | static int mboxdriver_expunge_folder(mailsession * session); | 68 | static int mboxdriver_expunge_folder(mailsession * session); |
69 | 69 | ||
70 | static int mboxdriver_status_folder(mailsession * session, char * mb, | 70 | static int mboxdriver_status_folder(mailsession * session, char * mb, |
71 | uint32_t * result_messages, uint32_t * result_recent, | 71 | uint32_t * result_messages, uint32_t * result_recent, |
72 | uint32_t * result_unseen); | 72 | uint32_t * result_unseen); |
73 | 73 | ||
74 | static int mboxdriver_messages_number(mailsession * session, char * mb, | 74 | static int mboxdriver_messages_number(mailsession * session, char * mb, |
75 | uint32_t * result); | 75 | uint32_t * result); |
76 | 76 | ||
77 | static int mboxdriver_append_message(mailsession * session, | 77 | static int mboxdriver_append_message(mailsession * session, |
78 | char * message, size_t size); | 78 | char * message, size_t size); |
79 | 79 | ||
80 | static int mboxdriver_append_message_flags(mailsession * session, | ||
81 | char * message, size_t size, struct mail_flags * flags); | ||
82 | |||
80 | static int mboxdriver_get_messages_list(mailsession * session, | 83 | static int mboxdriver_get_messages_list(mailsession * session, |
81 | struct mailmessage_list ** result); | 84 | struct mailmessage_list ** result); |
82 | 85 | ||
83 | static int | 86 | static int |
84 | mboxdriver_get_envelopes_list(mailsession * session, | 87 | mboxdriver_get_envelopes_list(mailsession * session, |
85 | struct mailmessage_list * env_list); | 88 | struct mailmessage_list * env_list); |
86 | 89 | ||
87 | static int mboxdriver_remove_message(mailsession * session, uint32_t num); | 90 | static int mboxdriver_remove_message(mailsession * session, uint32_t num); |
88 | 91 | ||
89 | static int mboxdriver_get_message(mailsession * session, | 92 | static int mboxdriver_get_message(mailsession * session, |
90 | uint32_t num, mailmessage ** result); | 93 | uint32_t num, mailmessage ** result); |
91 | 94 | ||
92 | static int mboxdriver_get_message_by_uid(mailsession * session, | 95 | static int mboxdriver_get_message_by_uid(mailsession * session, |
93 | const char * uid, | 96 | const char * uid, |
94 | mailmessage ** result); | 97 | mailmessage ** result); |
95 | 98 | ||
96 | static mailsession_driver local_mbox_session_driver = { | 99 | static mailsession_driver local_mbox_session_driver = { |
97 | .sess_name = "mbox", | 100 | .sess_name = "mbox", |
98 | 101 | ||
99 | .sess_initialize = mboxdriver_initialize, | 102 | .sess_initialize = mboxdriver_initialize, |
100 | .sess_uninitialize = mboxdriver_uninitialize, | 103 | .sess_uninitialize = mboxdriver_uninitialize, |
101 | 104 | ||
102 | .sess_parameters = mboxdriver_parameters, | 105 | .sess_parameters = mboxdriver_parameters, |
103 | 106 | ||
104 | .sess_connect_path = mboxdriver_connect_path, | 107 | .sess_connect_path = mboxdriver_connect_path, |
105 | .sess_connect_stream = NULL, | 108 | .sess_connect_stream = NULL, |
106 | .sess_starttls = NULL, | 109 | .sess_starttls = NULL, |
107 | .sess_login = NULL, | 110 | .sess_login = NULL, |
108 | .sess_logout = mboxdriver_logout, | 111 | .sess_logout = mboxdriver_logout, |
109 | .sess_noop = NULL, | 112 | .sess_noop = NULL, |
110 | 113 | ||
111 | .sess_build_folder_name = NULL, | 114 | .sess_build_folder_name = NULL, |
112 | .sess_create_folder = NULL, | 115 | .sess_create_folder = NULL, |
113 | .sess_delete_folder = NULL, | 116 | .sess_delete_folder = NULL, |
114 | .sess_rename_folder = NULL, | 117 | .sess_rename_folder = NULL, |
115 | .sess_check_folder = NULL, | 118 | .sess_check_folder = NULL, |
116 | .sess_examine_folder = NULL, | 119 | .sess_examine_folder = NULL, |
117 | .sess_select_folder = NULL, | 120 | .sess_select_folder = NULL, |
118 | .sess_expunge_folder = mboxdriver_expunge_folder, | 121 | .sess_expunge_folder = mboxdriver_expunge_folder, |
119 | .sess_status_folder = mboxdriver_status_folder, | 122 | .sess_status_folder = mboxdriver_status_folder, |
120 | .sess_messages_number = mboxdriver_messages_number, | 123 | .sess_messages_number = mboxdriver_messages_number, |
121 | .sess_recent_number = mboxdriver_messages_number, | 124 | .sess_recent_number = mboxdriver_messages_number, |
122 | .sess_unseen_number = mboxdriver_messages_number, | 125 | .sess_unseen_number = mboxdriver_messages_number, |
123 | .sess_list_folders = NULL, | 126 | .sess_list_folders = NULL, |
124 | .sess_lsub_folders = NULL, | 127 | .sess_lsub_folders = NULL, |
125 | .sess_subscribe_folder = NULL, | 128 | .sess_subscribe_folder = NULL, |
126 | .sess_unsubscribe_folder = NULL, | 129 | .sess_unsubscribe_folder = NULL, |
127 | 130 | ||
128 | .sess_append_message = mboxdriver_append_message, | 131 | .sess_append_message = mboxdriver_append_message, |
132 | .sess_append_message_flags = mboxdriver_append_message_flags, | ||
129 | .sess_copy_message = NULL, | 133 | .sess_copy_message = NULL, |
130 | .sess_move_message = NULL, | 134 | .sess_move_message = NULL, |
131 | 135 | ||
132 | .sess_get_messages_list = mboxdriver_get_messages_list, | 136 | .sess_get_messages_list = mboxdriver_get_messages_list, |
133 | .sess_get_envelopes_list = mboxdriver_get_envelopes_list, | 137 | .sess_get_envelopes_list = mboxdriver_get_envelopes_list, |
134 | .sess_remove_message = mboxdriver_remove_message, | 138 | .sess_remove_message = mboxdriver_remove_message, |
135 | #if 0 | 139 | #if 0 |
136 | .sess_search_messages = maildriver_generic_search_messages, | 140 | .sess_search_messages = maildriver_generic_search_messages, |
137 | #endif | 141 | #endif |
138 | 142 | ||
139 | .sess_get_message = mboxdriver_get_message, | 143 | .sess_get_message = mboxdriver_get_message, |
140 | .sess_get_message_by_uid = mboxdriver_get_message_by_uid, | 144 | .sess_get_message_by_uid = mboxdriver_get_message_by_uid, |
141 | }; | 145 | }; |
142 | 146 | ||
143 | mailsession_driver * mbox_session_driver = &local_mbox_session_driver; | 147 | mailsession_driver * mbox_session_driver = &local_mbox_session_driver; |
144 | 148 | ||
145 | static inline struct mbox_session_state_data * get_data(mailsession * session) | 149 | static inline struct mbox_session_state_data * get_data(mailsession * session) |
146 | { | 150 | { |
147 | return session->sess_data; | 151 | return session->sess_data; |
148 | } | 152 | } |
149 | 153 | ||
150 | static inline struct mailmbox_folder * get_mbox_session(mailsession * session) | 154 | static inline struct mailmbox_folder * get_mbox_session(mailsession * session) |
151 | { | 155 | { |
152 | return get_data(session)->mbox_folder; | 156 | return get_data(session)->mbox_folder; |
153 | } | 157 | } |
154 | 158 | ||
155 | static int mboxdriver_initialize(mailsession * session) | 159 | static int mboxdriver_initialize(mailsession * session) |
156 | { | 160 | { |
157 | struct mbox_session_state_data * data; | 161 | struct mbox_session_state_data * data; |
158 | 162 | ||
159 | data = malloc(sizeof(* data)); | 163 | data = malloc(sizeof(* data)); |
160 | if (data == NULL) | 164 | if (data == NULL) |
161 | goto err; | 165 | goto err; |
162 | 166 | ||
163 | data->mbox_folder = NULL; | 167 | data->mbox_folder = NULL; |
164 | 168 | ||
165 | data->mbox_force_read_only = FALSE; | 169 | data->mbox_force_read_only = FALSE; |
166 | data->mbox_force_no_uid = TRUE; | 170 | data->mbox_force_no_uid = TRUE; |
167 | 171 | ||
168 | session->sess_data = data; | 172 | session->sess_data = data; |
169 | 173 | ||
170 | return MAIL_NO_ERROR; | 174 | return MAIL_NO_ERROR; |
171 | 175 | ||
172 | err: | 176 | err: |
173 | return MAIL_ERROR_MEMORY; | 177 | return MAIL_ERROR_MEMORY; |
174 | } | 178 | } |
175 | 179 | ||
176 | static void free_state(struct mbox_session_state_data * mbox_data) | 180 | static void free_state(struct mbox_session_state_data * mbox_data) |
@@ -299,96 +303,102 @@ static int mboxdriver_status_folder(mailsession * session, char * mb, | |||
299 | * result_unseen = count; | 303 | * result_unseen = count; |
300 | 304 | ||
301 | return MAIL_NO_ERROR; | 305 | return MAIL_NO_ERROR; |
302 | } | 306 | } |
303 | 307 | ||
304 | static int mboxdriver_messages_number(mailsession * session, char * mb, | 308 | static int mboxdriver_messages_number(mailsession * session, char * mb, |
305 | uint32_t * result) | 309 | uint32_t * result) |
306 | { | 310 | { |
307 | struct mailmbox_folder * folder; | 311 | struct mailmbox_folder * folder; |
308 | int r; | 312 | int r; |
309 | 313 | ||
310 | folder = get_mbox_session(session); | 314 | folder = get_mbox_session(session); |
311 | if (folder == NULL) | 315 | if (folder == NULL) |
312 | return MAIL_ERROR_STATUS; | 316 | return MAIL_ERROR_STATUS; |
313 | 317 | ||
314 | r = mailmbox_validate_read_lock(folder); | 318 | r = mailmbox_validate_read_lock(folder); |
315 | if (r != MAIL_NO_ERROR) | 319 | if (r != MAIL_NO_ERROR) |
316 | return r; | 320 | return r; |
317 | 321 | ||
318 | mailmbox_read_unlock(folder); | 322 | mailmbox_read_unlock(folder); |
319 | 323 | ||
320 | * result = carray_count(folder->mb_tab) - folder->mb_deleted_count; | 324 | * result = carray_count(folder->mb_tab) - folder->mb_deleted_count; |
321 | 325 | ||
322 | return MAILMBOX_NO_ERROR; | 326 | return MAILMBOX_NO_ERROR; |
323 | } | 327 | } |
324 | 328 | ||
325 | /* messages operations */ | 329 | /* messages operations */ |
326 | 330 | ||
327 | static int mboxdriver_append_message(mailsession * session, | 331 | static int mboxdriver_append_message(mailsession * session, |
328 | char * message, size_t size) | 332 | char * message, size_t size) |
329 | { | 333 | { |
330 | int r; | 334 | int r; |
331 | struct mailmbox_folder * folder; | 335 | struct mailmbox_folder * folder; |
332 | 336 | ||
333 | folder = get_mbox_session(session); | 337 | folder = get_mbox_session(session); |
334 | if (folder == NULL) | 338 | if (folder == NULL) |
335 | return MAIL_ERROR_APPEND; | 339 | return MAIL_ERROR_APPEND; |
336 | 340 | ||
337 | r = mailmbox_append_message(folder, message, size); | 341 | r = mailmbox_append_message(folder, message, size); |
338 | 342 | ||
339 | switch (r) { | 343 | switch (r) { |
340 | case MAILMBOX_ERROR_FILE: | 344 | case MAILMBOX_ERROR_FILE: |
341 | return MAIL_ERROR_DISKSPACE; | 345 | return MAIL_ERROR_DISKSPACE; |
342 | default: | 346 | default: |
343 | return mboxdriver_mbox_error_to_mail_error(r); | 347 | return mboxdriver_mbox_error_to_mail_error(r); |
344 | } | 348 | } |
345 | } | 349 | } |
346 | 350 | ||
351 | static int mboxdriver_append_message_flags(mailsession * session, | ||
352 | char * message, size_t size, struct mail_flags * flags) | ||
353 | { | ||
354 | return mboxdriver_append_message(session, message, size); | ||
355 | } | ||
356 | |||
347 | static int mboxdriver_get_messages_list(mailsession * session, | 357 | static int mboxdriver_get_messages_list(mailsession * session, |
348 | struct mailmessage_list ** result) | 358 | struct mailmessage_list ** result) |
349 | { | 359 | { |
350 | struct mailmbox_folder * folder; | 360 | struct mailmbox_folder * folder; |
351 | int res; | 361 | int res; |
352 | 362 | ||
353 | folder = get_mbox_session(session); | 363 | folder = get_mbox_session(session); |
354 | if (folder == NULL) { | 364 | if (folder == NULL) { |
355 | res = MAIL_ERROR_BAD_STATE; | 365 | res = MAIL_ERROR_BAD_STATE; |
356 | goto err; | 366 | goto err; |
357 | } | 367 | } |
358 | 368 | ||
359 | return mbox_get_messages_list(folder, session, mbox_message_driver, result); | 369 | return mbox_get_messages_list(folder, session, mbox_message_driver, result); |
360 | 370 | ||
361 | err: | 371 | err: |
362 | return res; | 372 | return res; |
363 | } | 373 | } |
364 | 374 | ||
365 | static int | 375 | static int |
366 | mboxdriver_get_envelopes_list(mailsession * session, | 376 | mboxdriver_get_envelopes_list(mailsession * session, |
367 | struct mailmessage_list * env_list) | 377 | struct mailmessage_list * env_list) |
368 | { | 378 | { |
369 | struct mailmbox_folder * folder; | 379 | struct mailmbox_folder * folder; |
370 | unsigned int i; | 380 | unsigned int i; |
371 | int r; | 381 | int r; |
372 | int res; | 382 | int res; |
373 | 383 | ||
374 | folder = get_mbox_session(session); | 384 | folder = get_mbox_session(session); |
375 | if (folder == NULL) { | 385 | if (folder == NULL) { |
376 | res = MAIL_ERROR_BAD_STATE; | 386 | res = MAIL_ERROR_BAD_STATE; |
377 | goto err; | 387 | goto err; |
378 | } | 388 | } |
379 | 389 | ||
380 | r = mailmbox_validate_read_lock(folder); | 390 | r = mailmbox_validate_read_lock(folder); |
381 | if (r != MAILMBOX_NO_ERROR) { | 391 | if (r != MAILMBOX_NO_ERROR) { |
382 | res = mboxdriver_mbox_error_to_mail_error(r); | 392 | res = mboxdriver_mbox_error_to_mail_error(r); |
383 | goto err; | 393 | goto err; |
384 | } | 394 | } |
385 | 395 | ||
386 | for(i = 0 ; i < carray_count(env_list->msg_tab) ; i ++) { | 396 | for(i = 0 ; i < carray_count(env_list->msg_tab) ; i ++) { |
387 | mailmessage * msg; | 397 | mailmessage * msg; |
388 | struct mailimf_fields * fields; | 398 | struct mailimf_fields * fields; |
389 | char * headers; | 399 | char * headers; |
390 | size_t headers_len; | 400 | size_t headers_len; |
391 | size_t cur_token; | 401 | size_t cur_token; |
392 | 402 | ||
393 | msg = carray_get(env_list->msg_tab, i); | 403 | msg = carray_get(env_list->msg_tab, i); |
394 | if (msg == NULL) | 404 | if (msg == NULL) |