1
/* Copyright (c) 2013 Dovecot authors, see the included COPYING file */
4
#include "dsync-mail.h"
5
#include "dsync-ibc-private.h"
7
void dsync_ibc_deinit(struct dsync_ibc **_ibc)
9
struct dsync_ibc *ibc = *_ibc;
15
void dsync_ibc_set_io_callback(struct dsync_ibc *ibc,
16
io_callback_t *callback, void *context)
18
ibc->io_callback = callback;
19
ibc->io_context = context;
22
void dsync_ibc_send_handshake(struct dsync_ibc *ibc,
23
const struct dsync_ibc_settings *set)
25
ibc->v.send_handshake(ibc, set);
28
enum dsync_ibc_recv_ret
29
dsync_ibc_recv_handshake(struct dsync_ibc *ibc,
30
const struct dsync_ibc_settings **set_r)
32
return ibc->v.recv_handshake(ibc, set_r);
35
static enum dsync_ibc_send_ret
36
dsync_ibc_send_ret(struct dsync_ibc *ibc)
38
return ibc->v.is_send_queue_full(ibc) ?
39
DSYNC_IBC_SEND_RET_FULL :
40
DSYNC_IBC_SEND_RET_OK;
43
enum dsync_ibc_send_ret
44
dsync_ibc_send_end_of_list(struct dsync_ibc *ibc, enum dsync_ibc_eol_type type)
46
ibc->v.send_end_of_list(ibc, type);
47
return dsync_ibc_send_ret(ibc);
50
enum dsync_ibc_send_ret
51
dsync_ibc_send_mailbox_state(struct dsync_ibc *ibc,
52
const struct dsync_mailbox_state *state)
55
ibc->v.send_mailbox_state(ibc, state);
57
return dsync_ibc_send_ret(ibc);
60
enum dsync_ibc_recv_ret
61
dsync_ibc_recv_mailbox_state(struct dsync_ibc *ibc,
62
struct dsync_mailbox_state *state_r)
64
return ibc->v.recv_mailbox_state(ibc, state_r);
67
enum dsync_ibc_send_ret
68
dsync_ibc_send_mailbox_tree_node(struct dsync_ibc *ibc,
69
const char *const *name,
70
const struct dsync_mailbox_node *node)
72
i_assert(*name != NULL);
75
ibc->v.send_mailbox_tree_node(ibc, name, node);
77
return dsync_ibc_send_ret(ibc);
80
enum dsync_ibc_recv_ret
81
dsync_ibc_recv_mailbox_tree_node(struct dsync_ibc *ibc,
82
const char *const **name_r,
83
const struct dsync_mailbox_node **node_r)
85
return ibc->v.recv_mailbox_tree_node(ibc, name_r, node_r);
88
enum dsync_ibc_send_ret
89
dsync_ibc_send_mailbox_deletes(struct dsync_ibc *ibc,
90
const struct dsync_mailbox_delete *deletes,
91
unsigned int count, char hierarchy_sep)
94
ibc->v.send_mailbox_deletes(ibc, deletes, count,
97
return dsync_ibc_send_ret(ibc);
100
enum dsync_ibc_recv_ret
101
dsync_ibc_recv_mailbox_deletes(struct dsync_ibc *ibc,
102
const struct dsync_mailbox_delete **deletes_r,
103
unsigned int *count_r, char *hierarchy_sep_r)
105
return ibc->v.recv_mailbox_deletes(ibc, deletes_r, count_r,
109
enum dsync_ibc_send_ret
110
dsync_ibc_send_mailbox(struct dsync_ibc *ibc,
111
const struct dsync_mailbox *dsync_box)
114
ibc->v.send_mailbox(ibc, dsync_box);
116
return dsync_ibc_send_ret(ibc);
119
enum dsync_ibc_recv_ret
120
dsync_ibc_recv_mailbox(struct dsync_ibc *ibc,
121
const struct dsync_mailbox **dsync_box_r)
123
return ibc->v.recv_mailbox(ibc, dsync_box_r);
126
enum dsync_ibc_send_ret ATTR_NOWARN_UNUSED_RESULT
127
dsync_ibc_send_mailbox_attribute(struct dsync_ibc *ibc,
128
const struct dsync_mailbox_attribute *attr)
131
ibc->v.send_mailbox_attribute(ibc, attr);
133
return dsync_ibc_send_ret(ibc);
136
enum dsync_ibc_recv_ret
137
dsync_ibc_recv_mailbox_attribute(struct dsync_ibc *ibc,
138
const struct dsync_mailbox_attribute **attr_r)
140
return ibc->v.recv_mailbox_attribute(ibc, attr_r);
143
enum dsync_ibc_send_ret
144
dsync_ibc_send_change(struct dsync_ibc *ibc,
145
const struct dsync_mail_change *change)
147
i_assert(change->uid > 0);
150
ibc->v.send_change(ibc, change);
152
return dsync_ibc_send_ret(ibc);
155
enum dsync_ibc_recv_ret
156
dsync_ibc_recv_change(struct dsync_ibc *ibc,
157
const struct dsync_mail_change **change_r)
159
return ibc->v.recv_change(ibc, change_r);
162
enum dsync_ibc_send_ret
163
dsync_ibc_send_mail_request(struct dsync_ibc *ibc,
164
const struct dsync_mail_request *request)
166
i_assert(request->guid != NULL || request->uid != 0);
169
ibc->v.send_mail_request(ibc, request);
171
return dsync_ibc_send_ret(ibc);
174
enum dsync_ibc_recv_ret
175
dsync_ibc_recv_mail_request(struct dsync_ibc *ibc,
176
const struct dsync_mail_request **request_r)
178
return ibc->v.recv_mail_request(ibc, request_r);
181
enum dsync_ibc_send_ret
182
dsync_ibc_send_mail(struct dsync_ibc *ibc, const struct dsync_mail *mail)
184
i_assert(*mail->guid != '\0' || mail->uid != 0);
187
ibc->v.send_mail(ibc, mail);
189
return dsync_ibc_send_ret(ibc);
192
enum dsync_ibc_recv_ret
193
dsync_ibc_recv_mail(struct dsync_ibc *ibc, struct dsync_mail **mail_r)
195
return ibc->v.recv_mail(ibc, mail_r);
198
void dsync_ibc_close_mail_streams(struct dsync_ibc *ibc)
200
ibc->v.close_mail_streams(ibc);
203
bool dsync_ibc_has_failed(struct dsync_ibc *ibc)
208
bool dsync_ibc_has_timed_out(struct dsync_ibc *ibc)
213
bool dsync_ibc_is_send_queue_full(struct dsync_ibc *ibc)
215
return ibc->v.is_send_queue_full(ibc);
218
bool dsync_ibc_has_pending_data(struct dsync_ibc *ibc)
220
return ibc->v.has_pending_data(ibc);