imap-urlauth-client.h revision f1edf7f20661ef9627acbf4054acddcba4d2eb3f
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#ifndef IMAP_URLAUTH_CLIENT_H
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#define IMAP_URLAUTH_CLIENT_H
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterstruct client;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterstruct mail_storage;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterenum imap_urlauth_worker_state {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IMAP_URLAUTH_WORKER_STATE_INACTIVE = 0,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IMAP_URLAUTH_WORKER_STATE_CONNECTED,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IMAP_URLAUTH_WORKER_STATE_ACTIVE,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster};
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterstruct client {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster struct client *prev, *next;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int fd_in, fd_out, fd_ctrl;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster struct io *ctrl_io;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster struct ostream *output, *ctrl_output;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster struct istream *ctrl_input;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster struct timeout *to_idle;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster char *username, *service;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ARRAY_TYPE(const_string) access_apps;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /* settings: */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster const struct imap_urlauth_settings *set;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster enum imap_urlauth_worker_state worker_state;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster bool disconnected:1;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster};
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterextern struct client *imap_urlauth_clients;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterextern unsigned int imap_urlauth_client_count;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterint client_create(const char *service, const char *username,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int fd_in, int fd_out, const struct imap_urlauth_settings *set,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster struct client **client_r);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fostervoid client_destroy(struct client *client, const char *reason);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fostervoid client_send_line(struct client *client, const char *fmt, ...)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ATTR_FORMAT(2, 3);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fostervoid client_disconnect(struct client *client, const char *reason);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fostervoid clients_destroy_all(void);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster#endif
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster