imap: Added support for parsing the UIDVALIDITY property
Added support for parsing the UIDVALIDITY property from the SELECT response and storing it in the per-connection structure.
This commit is contained in:
parent
58efa46a5d
commit
59c71c7fc7
21
lib/imap.c
21
lib/imap.c
@ -395,6 +395,11 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IMAP_SELECT:
|
||||||
|
/* SELECT is special in that its untagged responses does not have a
|
||||||
|
common prefix so accept anything! */
|
||||||
|
break;
|
||||||
|
|
||||||
case IMAP_FETCH:
|
case IMAP_FETCH:
|
||||||
if(!imap_matchresp(line, len, "FETCH"))
|
if(!imap_matchresp(line, len, "FETCH"))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -666,8 +671,12 @@ static CURLcode imap_select(struct connectdata *conn)
|
|||||||
CURLcode result = CURLE_OK;
|
CURLcode result = CURLE_OK;
|
||||||
struct SessionHandle *data = conn->data;
|
struct SessionHandle *data = conn->data;
|
||||||
struct IMAP *imap = data->state.proto.imap;
|
struct IMAP *imap = data->state.proto.imap;
|
||||||
|
struct imap_conn *imapc = &conn->proto.imapc;
|
||||||
char *mailbox;
|
char *mailbox;
|
||||||
|
|
||||||
|
/* Invalidate old information in case we are switching mailboxes */
|
||||||
|
Curl_safefree(imapc->mailbox_uidvalidity);
|
||||||
|
|
||||||
mailbox = imap_atom(imap->mailbox ? imap->mailbox : "");
|
mailbox = imap_atom(imap->mailbox ? imap->mailbox : "");
|
||||||
if(!mailbox)
|
if(!mailbox)
|
||||||
result = CURLE_OUT_OF_MEMORY;
|
result = CURLE_OUT_OF_MEMORY;
|
||||||
@ -1207,10 +1216,20 @@ static CURLcode imap_state_select_resp(struct connectdata *conn,
|
|||||||
{
|
{
|
||||||
CURLcode result = CURLE_OK;
|
CURLcode result = CURLE_OK;
|
||||||
struct SessionHandle *data = conn->data;
|
struct SessionHandle *data = conn->data;
|
||||||
|
struct imap_conn *imapc = &conn->proto.imapc;
|
||||||
|
const char *line = data->state.buffer;
|
||||||
|
char tmp[20];
|
||||||
|
|
||||||
(void)instate; /* no use for this yet */
|
(void)instate; /* no use for this yet */
|
||||||
|
|
||||||
if(imapcode != 'O') {
|
if(imapcode == '*') {
|
||||||
|
/* See if this is an UIDVALIDITY response */
|
||||||
|
if(sscanf(line + 2, "OK [UIDVALIDITY %19[0123456789]]", tmp) == 1) {
|
||||||
|
Curl_safefree(imapc->mailbox_uidvalidity);
|
||||||
|
imapc->mailbox_uidvalidity = strdup(tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(imapcode != 'O') {
|
||||||
failf(data, "Select failed");
|
failf(data, "Select failed");
|
||||||
result = CURLE_LOGIN_DENIED;
|
result = CURLE_LOGIN_DENIED;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user