brain->failed = TRUE;
}
+static int
+dsync_brain_recv_mailbox_tree_add(struct dsync_brain *brain,
+ const char *const *parts,
+ const struct dsync_mailbox_node *remote_node,
+ const char *sep)
+{
+ struct dsync_mailbox_node *node;
+ struct mail_namespace *ns;
+ const char *name;
+
+ if (dsync_get_mailbox_name(brain, parts, &name, &ns) < 0)
+ return -1;
+ if (brain->debug) {
+ i_debug("brain %c: Remote mailbox tree: %s %s",
+ brain->master_brain ? 'M' : 'S',
+ t_strarray_join(parts, sep),
+ dsync_mailbox_node_to_string(remote_node));
+ }
+ node = dsync_mailbox_tree_get(brain->remote_mailbox_tree, name);
+ node->ns = ns;
+ dsync_mailbox_node_copy_data(node, remote_node);
+ return 0;
+}
+
bool dsync_brain_recv_mailbox_tree(struct dsync_brain *brain)
{
const struct dsync_mailbox_node *remote_node;
- struct dsync_mailbox_node *node, *dup_node1, *dup_node2;
- const char *const *parts, *name;
- struct mail_namespace *ns;
+ struct dsync_mailbox_node *dup_node1, *dup_node2;
+ const char *const *parts;
enum dsync_ibc_recv_ret ret;
char sep[2];
bool changed = FALSE;
sep[0] = brain->hierarchy_sep; sep[1] = '\0';
while ((ret = dsync_ibc_recv_mailbox_tree_node(brain->ibc, &parts,
&remote_node)) > 0) {
- if (dsync_get_mailbox_name(brain, parts, &name, &ns) < 0) {
+ if (dsync_brain_recv_mailbox_tree_add(brain, parts,
+ remote_node, sep) < 0) {
i_error("Couldn't find namespace for mailbox %s",
t_strarray_join(parts, sep));
brain->failed = TRUE;
return TRUE;
}
- if (brain->debug) {
- i_debug("brain %c: Remote mailbox tree: %s %s",
- brain->master_brain ? 'M' : 'S',
- t_strarray_join(parts, sep),
- dsync_mailbox_node_to_string(remote_node));
- }
- node = dsync_mailbox_tree_get(brain->remote_mailbox_tree, name);
- node->ns = ns;
- dsync_mailbox_node_copy_data(node, remote_node);
}
if (ret != DSYNC_IBC_RECV_RET_FINISHED)
return changed;