aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2014-04-18 17:42:40 +0100
committerSteve Holme <steve_holme@hotmail.com>2014-04-18 20:14:09 +0100
commitd7ed8da43e111976b40d5092506609326dc18bd7 (patch)
tree268498cbeb6dafd6a47ef9dfba9a3077997a3235 /lib
parente2c14bde22503f63e64b38701d04cbc72be9a221 (diff)
imap: Extended FETCH support to include PARTIAL URL specifier
Diffstat (limited to 'lib')
-rw-r--r--lib/imap.c24
-rw-r--r--lib/imap.h1
2 files changed, 20 insertions, 5 deletions
diff --git a/lib/imap.c b/lib/imap.c
index 2326967b9..9808f998a 100644
--- a/lib/imap.c
+++ b/lib/imap.c
@@ -740,9 +740,15 @@ static CURLcode imap_perform_fetch(struct connectdata *conn)
}
/* Send the FETCH command */
- result = imap_sendf(conn, "FETCH %s BODY[%s]",
- imap->uid,
- imap->section ? imap->section : "");
+ if(imap->partial)
+ result = imap_sendf(conn, "FETCH %s BODY[%s]<%s>",
+ imap->uid,
+ imap->section ? imap->section : "",
+ imap->partial);
+ else
+ result = imap_sendf(conn, "FETCH %s BODY[%s]",
+ imap->uid,
+ imap->section ? imap->section : "");
if(!result)
state(conn, IMAP_FETCH);
@@ -1963,6 +1969,7 @@ static CURLcode imap_done(struct connectdata *conn, CURLcode status,
Curl_safefree(imap->uidvalidity);
Curl_safefree(imap->uid);
Curl_safefree(imap->section);
+ Curl_safefree(imap->partial);
Curl_safefree(imap->query);
Curl_safefree(imap->custom);
Curl_safefree(imap->custom_params);
@@ -2506,8 +2513,8 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
DEBUGF(infof(conn->data, "IMAP URL parameter '%s' = '%s'\n", name, value));
- /* Process the known hierarchical parameters (UIDVALIDITY, UID and SECTION)
- stripping of the trailing slash character if it is present.
+ /* Process the known hierarchical parameters (UIDVALIDITY, UID, SECTION and
+ PARTIAL) stripping of the trailing slash character if it is present.
Note: Unknown parameters trigger a URL_MALFORMAT error. */
if(Curl_raw_equal(name, "UIDVALIDITY") && !imap->uidvalidity) {
@@ -2531,6 +2538,13 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
imap->section = value;
value = NULL;
}
+ else if(Curl_raw_equal(name, "PARTIAL") && !imap->partial) {
+ if(valuelen > 0 && value[valuelen - 1] == '/')
+ value[valuelen - 1] = '\0';
+
+ imap->partial = value;
+ value = NULL;
+ }
else {
Curl_safefree(name);
Curl_safefree(value);
diff --git a/lib/imap.h b/lib/imap.h
index 821da6788..3abe3e467 100644
--- a/lib/imap.h
+++ b/lib/imap.h
@@ -68,6 +68,7 @@ struct IMAP {
char *uidvalidity; /* UIDVALIDITY to check in select */
char *uid; /* Message UID to fetch */
char *section; /* Message SECTION to fetch */
+ char *partial; /* Message PARTIAL to fetch */
char *query; /* Query to search for */
char *custom; /* Custom request */
char *custom_params; /* Parameters for the custom request */