ARRAY(struct anvil_query *) queries_arr;
struct aqueue *queries;
- bool (*reconnect_callback)(void);
+ struct anvil_client_callbacks callbacks;
enum anvil_client_flags flags;
bool deinitializing;
};
};
struct anvil_client *
-anvil_client_init(const char *path, bool (*reconnect_callback)(void),
+anvil_client_init(const char *path,
+ const struct anvil_client_callbacks *callbacks,
enum anvil_client_flags flags)
{
struct anvil_client *client;
client = i_new(struct anvil_client, 1);
connection_init_client_unix(anvil_connections, &client->conn, path);
- client->reconnect_callback = reconnect_callback;
+ if (callbacks != NULL)
+ client->callbacks = *callbacks;
client->flags = flags;
i_array_init(&client->queries_arr, 32);
client->queries = aqueue_init(&client->queries_arr.arr);
static void anvil_client_reconnect(struct anvil_client *client)
{
- if (client->reconnect_callback != NULL) {
- if (!client->reconnect_callback()) {
+ if (client->callbacks.reconnect != NULL) {
+ if (!client->callbacks.reconnect()) {
/* no reconnection */
return;
}
ANVIL_CLIENT_FLAG_HIDE_ENOENT = 0x01
};
+struct anvil_client_callbacks {
+ /* Called when connection is lost. If it returns FALSE, reconnection
+ isn't attempted. */
+ bool (*reconnect)(void);
+};
+
/* reply=NULL if query failed */
typedef void anvil_callback_t(const char *reply, void *context);
/* If reconnect_callback is specified, it's called when connection is lost.
If the callback returns FALSE, reconnection isn't attempted. */
struct anvil_client *
-anvil_client_init(const char *path, bool (*reconnect_callback)(void),
+anvil_client_init(const char *path,
+ const struct anvil_client_callbacks *callbacks,
enum anvil_client_flags flags) ATTR_NULL(2);
void anvil_client_deinit(struct anvil_client **client);
if (anvil != NULL)
return;
- anvil = anvil_client_init("anvil", anvil_reconnect_callback, 0);
+ const struct anvil_client_callbacks callbacks = {
+ .reconnect = anvil_reconnect_callback,
+ };
+ anvil = anvil_client_init("anvil", &callbacks, 0);
if (anvil_client_connect(anvil, TRUE) < 0)
i_fatal("Couldn't connect to anvil");
}