Mercurial > dovecot > core-2.2
annotate src/lib-imap-storage/imap-msgpart-url.c @ 14622:6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
The new API allows first parsing the validity of section strings and later
relying on them being valid without having to re-parse it. The
implementation also fixes a few things and adds "partial fetch cache".
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 21 Jun 2012 21:50:35 +0300 |
parents | 27c8a6c9088d |
children | 1af9d08e67d7 |
rev | line source |
---|---|
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
1 /* Copyright (c) 2012 Dovecot authors, see the included COPYING file */ |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
2 |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
3 #include "lib.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
4 #include "network.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
5 #include "istream.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
6 #include "message-parser.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
7 #include "mail-storage.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
8 #include "mail-namespace.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
9 #include "imap-url.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
10 #include "imap-msgpart.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
11 #include "imap-msgpart-url.h" |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
12 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
13 struct imap_msgpart_url { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
14 char *mailbox; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
15 uint32_t uidvalidity; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
16 uint32_t uid; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
17 char *section; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
18 uoff_t partial_offset, partial_size; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
19 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
20 struct mail_user *user; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
21 struct mailbox *box; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
22 struct mailbox_transaction_context *trans; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
23 struct mail *mail; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
24 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
25 struct istream *input; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
26 uoff_t part_size; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
27 }; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
28 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
29 struct imap_msgpart_url * |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
30 imap_msgpart_url_create(struct mail_user *user, const struct imap_url *url) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
31 { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
32 struct imap_msgpart_url *mpurl; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
33 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
34 i_assert(url->mailbox != NULL && url->uid != 0 && |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
35 url->search_program == NULL); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
36 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
37 mpurl = i_new(struct imap_msgpart_url, 1); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
38 mpurl->user = user; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
39 mpurl->mailbox = i_strdup(url->mailbox); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
40 mpurl->uidvalidity = url->uidvalidity; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
41 mpurl->uid = url->uid; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
42 if (url->section != NULL) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
43 mpurl->section = i_strdup(url->section); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
44 mpurl->partial_offset = url->partial_offset; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
45 mpurl->partial_size = url->partial_size; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
46 return mpurl; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
47 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
48 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
49 int imap_msgpart_url_parse(struct mail_user *user, struct mailbox *selected_box, |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
50 const char *urlstr, struct imap_msgpart_url **url_r, |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
51 const char **error_r) |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
52 { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
53 struct mailbox_status box_status; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
54 struct imap_url base_url, *url; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
55 const char *error; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
56 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
57 /* build base url */ |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
58 memset(&base_url, 0, sizeof(base_url)); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
59 if (selected_box != NULL) { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
60 mailbox_get_open_status(selected_box, STATUS_UIDVALIDITY, |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
61 &box_status); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
62 base_url.mailbox = mailbox_get_vname(selected_box); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
63 base_url.uidvalidity = box_status.uidvalidity; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
64 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
65 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
66 /* parse url */ |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
67 if (imap_url_parse(urlstr, &base_url, |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
68 IMAP_URL_PARSE_REQUIRE_RELATIVE, &url, &error) < 0) { |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
69 *error_r = t_strconcat("Invalid IMAP URL: ", error, NULL); |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
70 return -1; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
71 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
72 if (url->mailbox == NULL) { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
73 *error_r = "Mailbox-relative IMAP URL, but no mailbox selected"; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
74 return -1; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
75 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
76 if (url->uid == 0 || url->search_program != NULL) { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
77 *error_r = "Invalid messagepart IMAP URL"; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
78 return -1; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
79 } |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
80 *url_r = imap_msgpart_url_create(user, url); |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
81 return 0; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
82 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
83 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
84 struct mailbox *imap_msgpart_url_get_mailbox(struct imap_msgpart_url *mpurl) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
85 { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
86 return mpurl->box; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
87 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
88 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
89 int imap_msgpart_url_open_mailbox(struct imap_msgpart_url *mpurl, |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
90 struct mailbox **box_r, const char **error_r) |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
91 { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
92 struct mailbox_status box_status; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
93 enum mail_error error_code; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
94 enum mailbox_flags flags = MAILBOX_FLAG_READONLY; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
95 struct mail_namespace *ns; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
96 struct mailbox *box; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
97 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
98 if (mpurl->box != NULL) { |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
99 *box_r = mpurl->box; |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
100 return 1; |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
101 } |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
102 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
103 /* find mailbox namespace */ |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
104 ns = mail_namespace_find(mpurl->user->namespaces, mpurl->mailbox); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
105 if (ns == NULL) { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
106 *error_r = "Nonexistent mailbox namespace"; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
107 return 0; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
108 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
109 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
110 /* open mailbox */ |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
111 box = mailbox_alloc(ns->list, mpurl->mailbox, flags); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
112 if (mailbox_open(box) < 0) { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
113 *error_r = mail_storage_get_last_error(mailbox_get_storage(box), |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
114 &error_code); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
115 mailbox_free(&box); |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
116 return error_code == MAIL_ERROR_TEMP ? -1 : 0; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
117 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
118 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
119 /* verify UIDVALIDITY */ |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
120 mailbox_get_open_status(box, STATUS_UIDVALIDITY, &box_status); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
121 if (mpurl->uidvalidity > 0 && |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
122 box_status.uidvalidity != mpurl->uidvalidity) { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
123 *error_r = "Invalid UIDVALIDITY"; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
124 mailbox_free(&box); |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
125 return 0; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
126 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
127 mpurl->box = box; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
128 *box_r = box; |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
129 return 1; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
130 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
131 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
132 int imap_msgpart_url_open_mail(struct imap_msgpart_url *mpurl, |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
133 struct mail **mail_r, const char **error_r) |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
134 { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
135 struct mailbox_transaction_context *t; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
136 struct mailbox *box; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
137 struct mail *mail; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
138 int ret; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
139 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
140 if (mpurl->mail != NULL) { |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
141 *mail_r = mpurl->mail; |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
142 return 1; |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
143 } |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
144 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
145 /* open mailbox if it is not yet open */ |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
146 if ((ret = imap_msgpart_url_open_mailbox(mpurl, &box, error_r)) <= 0) |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
147 return ret; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
148 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
149 /* start transaction */ |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
150 t = mailbox_transaction_begin(box, 0); |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
151 mail = mail_alloc(t, 0, NULL); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
152 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
153 /* find the message */ |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
154 if (!mail_set_uid(mail, mpurl->uid)) { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
155 *error_r = "Message not found"; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
156 mail_free(&mail); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
157 mailbox_transaction_rollback(&t); |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
158 return 0; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
159 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
160 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
161 mpurl->trans = t; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
162 mpurl->mail = mail; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
163 *mail_r = mail; |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
164 return 1; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
165 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
166 |
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
167 static int |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
168 imap_msgpart_url_open_part(struct imap_msgpart_url *mpurl, struct mail **mail_r, |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
169 struct imap_msgpart **msgpart_r, const char **error_r) |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
170 { |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
171 int ret; |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
172 |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
173 if ((ret = imap_msgpart_url_open_mail(mpurl, mail_r, error_r)) <= 0) |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
174 return ret; |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
175 |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
176 if (imap_msgpart_parse((*mail_r)->box, mpurl->section, msgpart_r) < 0) { |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
177 *error_r = "Invalid section"; |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
178 return 0; |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
179 } |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
180 imap_msgpart_set_partial(*msgpart_r, mpurl->partial_offset, |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
181 mpurl->partial_size == 0 ? (uoff_t)-1 : |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
182 mpurl->partial_size); |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
183 return 1; |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
184 } |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
185 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
186 int imap_msgpart_url_read_part(struct imap_msgpart_url *mpurl, |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
187 struct istream **stream_r, uoff_t *size_r, |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
188 const char **error_r) |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
189 { |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
190 struct mail *mail; |
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
191 struct imap_msgpart *msgpart; |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
192 struct imap_msgpart_open_result result; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
193 int ret; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
194 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
195 if (mpurl->input != NULL) { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
196 i_stream_seek(mpurl->input, 0); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
197 *stream_r = mpurl->input; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
198 *size_r = mpurl->part_size; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
199 return 1; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
200 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
201 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
202 /* open mail if it is not yet open */ |
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
203 ret = imap_msgpart_url_open_part(mpurl, &mail, &msgpart, error_r); |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
204 if (ret <= 0) |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
205 return ret; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
206 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
207 /* open the referenced part as a stream */ |
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
208 ret = imap_msgpart_open(mail, msgpart, &result); |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
209 imap_msgpart_free(&msgpart); |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
210 if (ret < 0) { |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
211 *error_r = mailbox_get_last_error(mail->box, NULL); |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
212 return ret; |
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
213 } |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
214 |
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
215 *stream_r = mpurl->input = result.input; |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
216 *size_r = mpurl->part_size = result.size; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
217 return 1; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
218 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
219 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
220 int imap_msgpart_url_verify(struct imap_msgpart_url *mpurl, |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
221 const char **error_r) |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
222 { |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
223 struct mail *mail; |
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
224 struct imap_msgpart *msgpart; |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
225 int ret; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
226 |
14594
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
227 if (mpurl->input != NULL) |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
228 return 1; |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
229 |
27c8a6c9088d
Error handling API changes to previous IMAP URL related changes.
Timo Sirainen <tss@iki.fi>
parents:
14591
diff
changeset
|
230 /* open mail if it is not yet open */ |
14622
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
231 ret = imap_msgpart_url_open_part(mpurl, &mail, &msgpart, error_r); |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
232 if (ret > 0) |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
233 imap_msgpart_free(&msgpart); |
6fb61872b30a
lib-imap-storage: imap-msgpart rewrite and API change.
Timo Sirainen <tss@iki.fi>
parents:
14594
diff
changeset
|
234 return ret; |
14591
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
235 } |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
236 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
237 void imap_msgpart_url_free(struct imap_msgpart_url **_mpurl) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
238 { |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
239 struct imap_msgpart_url *mpurl = *_mpurl; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
240 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
241 *_mpurl = NULL; |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
242 |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
243 if (mpurl->input != NULL) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
244 i_stream_unref(&mpurl->input); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
245 if (mpurl->mail != NULL) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
246 mail_free(&mpurl->mail); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
247 if (mpurl->trans != NULL) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
248 mailbox_transaction_rollback(&mpurl->trans); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
249 if (mpurl->box != NULL) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
250 mailbox_free(&mpurl->box); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
251 if (mpurl->section != NULL) |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
252 i_free(mpurl->section); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
253 i_free(mpurl->mailbox); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
254 i_free(mpurl); |
07e6ca397a72
Created lib-imap-storage for IMAP-specific functionality that uses lib-storage.
Stephan Bosch <stephan@rename-it.nl>
parents:
diff
changeset
|
255 } |