unsigned int i;
i_assert(headers == NULL ||
- IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_HEADERS));
+ !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_HEADERS));
if (!mbox->selected) {
mail_storage_set_error(_mail->box->storage,
if ((data->wanted_fields & (MAIL_FETCH_PHYSICAL_SIZE |
MAIL_FETCH_VIRTUAL_SIZE)) != 0 &&
data->physical_size == UOFF_T_MAX &&
- IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_SIZE))
+ !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_SIZE))
fields |= MAIL_FETCH_PHYSICAL_SIZE | MAIL_FETCH_VIRTUAL_SIZE;
if ((data->wanted_fields & MAIL_FETCH_IMAP_BODY) != 0 &&
data->body == NULL &&
- IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_BODYSTRUCTURE))
+ !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE))
fields |= MAIL_FETCH_IMAP_BODY;
if ((data->wanted_fields & MAIL_FETCH_IMAP_BODYSTRUCTURE) != 0 &&
data->bodystructure == NULL &&
- IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_BODYSTRUCTURE))
+ !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE))
fields |= MAIL_FETCH_IMAP_BODYSTRUCTURE;
if ((data->wanted_fields & MAIL_FETCH_GUID) != 0 &&
data->guid == NULL && mbox->guid_fetch_field_name != NULL)
(fields & MAIL_FETCH_STREAM_HEADER) == 0 &&
!imapc_mail_has_headers_in_cache(&mail->imail, data->wanted_headers)) {
/* fetch specific headers */
- if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_HEADERS))
+ if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_HEADERS))
headers = data->wanted_headers->name;
else
fields |= MAIL_FETCH_STREAM_HEADER;
t_strdup_printf("imapc mail uid=%u", _mail->uid));
index_mail_set_read_buffer_size(_mail, imail->data.stream);
- if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_SIZE)) {
+ if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_SIZE)) {
/* enable filtering only when we're not passing through
RFC822.SIZE. otherwise we'll get size mismatches. */
imapc_stream_filter(&imail->data.stream);
}
match = TRUE;
} else if (strcasecmp(key, "BODY") == 0) {
- if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_BODYSTRUCTURE)) {
+ if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE)) {
mail->imail.data.body =
imapc_args_to_bodystructure(mail, &args[i+1], FALSE);
}
match = TRUE;
} else if (strcasecmp(key, "BODYSTRUCTURE") == 0) {
- if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_BODYSTRUCTURE)) {
+ if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE)) {
mail->imail.data.bodystructure =
imapc_args_to_bodystructure(mail, &args[i+1], TRUE);
}
} else if (strcasecmp(key, "RFC822.SIZE") == 0) {
if (imap_arg_get_atom(&args[i+1], &value) &&
str_to_uoff(value, &size) == 0 &&
- IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_SIZE)) {
+ !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_SIZE)) {
mail->imail.data.physical_size = size;
mail->imail.data.virtual_size = size;
mail->imail.data.inexact_total_sizes = TRUE;
return 0;
}
- if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_SIZE) &&
+ if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_SIZE) &&
data->stream == NULL) {
/* Trust RFC822.SIZE to be correct enough to present to the
IMAP client. However, it can be wrong in some implementation
int ret;
if (mail->imail.data.access_part != 0 ||
- !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_HEADERS)) {
+ IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_HEADERS)) {
/* we're going to be reading the header/body anyway */
return index_mail_get_header_stream(_mail, headers, stream_r);
}
if ((data->wanted_fields & (MAIL_FETCH_PHYSICAL_SIZE |
MAIL_FETCH_VIRTUAL_SIZE)) != 0) {
if (index_mail_get_physical_size(_mail, &size) < 0 &&
- !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_SIZE))
+ IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_SIZE))
data->access_part |= READ_HDR | READ_BODY;
}
if ((data->wanted_fields & MAIL_FETCH_GUID) != 0)
(void)index_mail_get_cached_bodystructure(mail, &str);
if (data->access_part == 0 && data->wanted_headers != NULL &&
- !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_HEADERS)) {
+ IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_HEADERS)) {
/* see if all wanted headers exist in cache */
if (!imapc_mail_has_headers_in_cache(mail, data->wanted_headers))
data->access_part |= PARSE_HDR;
}
if (data->access_part == 0 &&
(data->wanted_fields & MAIL_FETCH_IMAP_ENVELOPE) != 0 &&
- !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_HEADERS)) {
+ IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_HEADERS)) {
/* the common code already checked this partially,
but we need a guaranteed correct answer */
header_ctx = mailbox_header_lookup_init(_mail->box,
struct imapc_mailbox *mbox = (struct imapc_mailbox *)_mail->box;
index_mail_set_seq(_mail, seq, saving);
- if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_SIZE)) {
+ if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_SIZE)) {
/* RFC822.SIZE may be read from vsize record or cache. It may
not be exactly correct. */
mail->data.inexact_total_sizes = TRUE;
"GmailId%"PRIx64, num);
return 0;
case MAIL_FETCH_IMAP_BODY:
- if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_BODYSTRUCTURE))
+ if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE))
break;
if (index_mail_get_cached_body(imail, value_r))
*value_r = imail->data.body;
return 0;
case MAIL_FETCH_IMAP_BODYSTRUCTURE:
- if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_FETCH_BODYSTRUCTURE))
+ if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE))
break;
if (index_mail_get_cached_bodystructure(imail, value_r))
{
string_t *str = t_str_new(128);
- if (!IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_SEARCH)) {
+ if (IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_SEARCH)) {
/* SEARCH command passthrough not enabled */
return FALSE;
}
};
static const struct imapc_feature_list imapc_feature_list[] = {
- { "fetch-size", IMAPC_FEATURE_FETCH_SIZE },
+ { "no-fetch-size", IMAPC_FEATURE_NO_FETCH_SIZE },
{ "guid-forced", IMAPC_FEATURE_GUID_FORCED },
- { "fetch-headers", IMAPC_FEATURE_FETCH_HEADERS },
+ { "no-fetch-headers", IMAPC_FEATURE_NO_FETCH_HEADERS },
{ "gmail-migration", IMAPC_FEATURE_GMAIL_MIGRATION },
- { "search", IMAPC_FEATURE_SEARCH },
+ { "no-search", IMAPC_FEATURE_NO_SEARCH },
{ "zimbra-workarounds", IMAPC_FEATURE_ZIMBRA_WORKAROUNDS },
{ "no-examine", IMAPC_FEATURE_NO_EXAMINE },
{ "proxyauth", IMAPC_FEATURE_PROXYAUTH },
{ "fetch-msn-workarounds", IMAPC_FEATURE_FETCH_MSN_WORKAROUNDS },
{ "fetch-fix-broken-mails", IMAPC_FEATURE_FETCH_FIX_BROKEN_MAILS },
- { "modseq", IMAPC_FEATURE_MODSEQ },
- { "delay-login", IMAPC_FEATURE_DELAY_LOGIN },
- { "fetch-bodystructure", IMAPC_FEATURE_FETCH_BODYSTRUCTURE },
+ { "no-modseq", IMAPC_FEATURE_NO_MODSEQ },
+ { "no-delay-login", IMAPC_FEATURE_NO_DELAY_LOGIN },
+ { "no-fetch-bodystructure", IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE },
{ "send-id", IMAPC_FEATURE_SEND_ID },
{ "fetch-empty-is-expunged", IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED },
{ "no-msn-updates", IMAPC_FEATURE_NO_MSN_UPDATES },
- { "acl", IMAPC_FEATURE_ACL },
+ { "no-acl", IMAPC_FEATURE_NO_ACL },
{ NULL, 0 }
};
/* <settings checks> */
enum imapc_features {
- IMAPC_FEATURE_FETCH_SIZE = 0x01,
+ IMAPC_FEATURE_NO_FETCH_SIZE = 0x01,
IMAPC_FEATURE_GUID_FORCED = 0x02,
- IMAPC_FEATURE_FETCH_HEADERS = 0x04,
+ IMAPC_FEATURE_NO_FETCH_HEADERS = 0x04,
IMAPC_FEATURE_GMAIL_MIGRATION = 0x08,
- IMAPC_FEATURE_SEARCH = 0x10,
+ IMAPC_FEATURE_NO_SEARCH = 0x10,
IMAPC_FEATURE_ZIMBRA_WORKAROUNDS = 0x20,
IMAPC_FEATURE_NO_EXAMINE = 0x40,
IMAPC_FEATURE_PROXYAUTH = 0x80,
IMAPC_FEATURE_FETCH_MSN_WORKAROUNDS = 0x100,
IMAPC_FEATURE_FETCH_FIX_BROKEN_MAILS = 0x200,
- IMAPC_FEATURE_MODSEQ = 0x400,
- IMAPC_FEATURE_DELAY_LOGIN = 0x800,
- IMAPC_FEATURE_FETCH_BODYSTRUCTURE = 0x1000,
+ IMAPC_FEATURE_NO_MODSEQ = 0x400,
+ IMAPC_FEATURE_NO_DELAY_LOGIN = 0x800,
+ IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE = 0x1000,
IMAPC_FEATURE_SEND_ID = 0x2000,
IMAPC_FEATURE_FETCH_EMPTY_IS_EXPUNGED = 0x4000,
IMAPC_FEATURE_NO_MSN_UPDATES = 0x8000,
- IMAPC_FEATURE_ACL = 0x10000,
+ IMAPC_FEATURE_NO_ACL = 0x10000,
};
/* </settings checks> */
{
return (mbox->capabilities & (IMAPC_CAPABILITY_CONDSTORE |
IMAPC_CAPABILITY_QRESYNC)) != 0 &&
- IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_MODSEQ);
+ !IMAPC_BOX_HAS_FEATURE(mbox, IMAPC_FEATURE_NO_MODSEQ);
}
static struct mail_storage *imapc_storage_alloc(void)
imapc_client_set_login_callback(client->client, imapc_storage_client_login_callback, client);
if ((ns->flags & NAMESPACE_FLAG_LIST_PREFIX) != 0 &&
- (imapc_set->parsed_features & IMAPC_FEATURE_DELAY_LOGIN) == 0) {
+ (imapc_set->parsed_features & IMAPC_FEATURE_NO_DELAY_LOGIN) != 0) {
/* start logging in immediately */
imapc_storage_client_login(client, ns->user, set.host);
}
}
storage->client->_storage = storage;
p_array_init(&storage->remote_namespaces, _storage->pool, 4);
- if (IMAPC_HAS_FEATURE(storage, IMAPC_FEATURE_FETCH_BODYSTRUCTURE)) {
+ if (!IMAPC_HAS_FEATURE(storage, IMAPC_FEATURE_NO_FETCH_BODYSTRUCTURE)) {
_storage->nonbody_access_fields |=
MAIL_FETCH_IMAP_BODY | MAIL_FETCH_IMAP_BODYSTRUCTURE;
}
}
struct imapc_mailbox *mbox = IMAPC_MAILBOX(box);
- if (!IMAPC_HAS_FEATURE(mbox->storage, IMAPC_FEATURE_ACL)) {
+ if (IMAPC_HAS_FEATURE(mbox->storage, IMAPC_FEATURE_NO_ACL)) {
/* Storage is "imapc" but no proxying of ACL commands should
be done. */
return FALSE;