return -1;
}
- brain2 = dsync_brain_slave_init(user2, ibc2, TRUE, "");
+ brain2 = dsync_brain_slave_init(user2, ibc2, TRUE, "",
+ doveadm_settings->dsync_alt_char[0]);
mail_user_unref(&user2);
brain1_running = brain2_running = TRUE;
mail_user_set_get_temp_prefix(temp_prefix, user->set);
ibc = cmd_dsync_ibc_stream_init(ctx, name, str_c(temp_prefix));
- brain = dsync_brain_slave_init(user, ibc, FALSE, process_title_prefix);
+ brain = dsync_brain_slave_init(user, ibc, FALSE, process_title_prefix,
+ doveadm_settings->dsync_alt_char[0]);
io_loop_run(current_ioloop);
ibc_set.sync_flags = set->sync_flag;
memcpy(ibc_set.sync_box_guid, set->sync_box_guid,
sizeof(ibc_set.sync_box_guid));
+ ibc_set.alt_char = brain->alt_char;
ibc_set.sync_type = sync_type;
ibc_set.hdr_hash_v2 = TRUE;
ibc_set.lock_timeout = set->lock_timeout_secs;
struct dsync_brain *
dsync_brain_slave_init(struct mail_user *user, struct dsync_ibc *ibc,
- bool local, const char *process_title_prefix)
+ bool local, const char *process_title_prefix,
+ char default_alt_char)
{
struct dsync_ibc_settings ibc_set;
struct dsync_brain *brain;
+ i_assert(default_alt_char != '\0');
+
brain = dsync_brain_common_init(user, ibc);
+ brain->alt_char = default_alt_char;
brain->process_title_prefix =
p_strdup(brain->pool, process_title_prefix);
brain->state = DSYNC_STATE_SLAVE_RECV_HANDSHAKE;
brain->sync_flag = p_strdup(brain->pool, ibc_set->sync_flags);
memcpy(brain->sync_box_guid, ibc_set->sync_box_guid,
sizeof(brain->sync_box_guid));
+ if (ibc_set->alt_char != '\0')
+ brain->alt_char = ibc_set->alt_char;
i_assert(brain->sync_type == DSYNC_BRAIN_SYNC_TYPE_UNKNOWN);
brain->sync_type = ibc_set->sync_type;
const struct dsync_brain_settings *set);
struct dsync_brain *
dsync_brain_slave_init(struct mail_user *user, struct dsync_ibc *ibc,
- bool local, const char *process_title_prefix);
+ bool local, const char *process_title_prefix,
+ char default_alt_char);
/* Returns 0 if everything was successful, -1 if syncing failed in some way */
int dsync_brain_deinit(struct dsync_brain **brain, enum mail_error *error_r);
"no_mail_sync no_mailbox_renames no_backup_overwrite purge_remote "
"no_notify sync_since_timestamp sync_max_size sync_flags sync_until_timestamp "
"virtual_all_box empty_hdr_workaround import_commit_msgs_interval "
- "hashed_headers"
+ "hashed_headers alt_char"
},
{ .name = "mailbox_state",
.chr = 'S',
dsync_serializer_encode_add(encoder, "sync_flags",
set->sync_flags);
}
+ if (set->alt_char != '\0') {
+ dsync_serializer_encode_add(encoder, "alt_char",
+ t_strdup_printf("%c", set->alt_char));
+ }
if ((set->brain_flags & DSYNC_BRAIN_FLAG_SEND_MAIL_REQUESTS) != 0)
dsync_serializer_encode_add(encoder, "send_mail_requests", "");
if ((set->brain_flags & DSYNC_BRAIN_FLAG_BACKUP_SEND) != 0)
}
if (dsync_deserializer_decode_try(decoder, "sync_flags", &value))
set->sync_flags = p_strdup(pool, value);
+ if (dsync_deserializer_decode_try(decoder, "alt_char", &value))
+ set->alt_char = value[0];
if (dsync_deserializer_decode_try(decoder, "send_mail_requests", &value))
set->brain_flags |= DSYNC_BRAIN_FLAG_SEND_MAIL_REQUESTS;
if (dsync_deserializer_decode_try(decoder, "backup_send", &value))
/* Hashed headers */
const char *const *hashed_headers;
+ char alt_char;
enum dsync_brain_sync_type sync_type;
enum dsync_brain_flags brain_flags;
bool hdr_hash_v2;
pool_t pool;
i_assert(sep != '\0');
+ i_assert(alt_char != '\0');
pool = pool_alloconly_create(MEMPOOL_GROWING"dsync mailbox tree", 4096);
tree = p_new(pool, struct dsync_mailbox_tree, 1);