client.h revision 3cb26db7f4756b71ba06c6e4950fa4f8ce7fad66
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R#ifndef CLIENT_H
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R#define CLIENT_H
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R#include "network.h"
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R#include "master.h"
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R#include "client-common.h"
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R/* Disconnect client after idling this many milliseconds */
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R#define CLIENT_LOGIN_IDLE_TIMEOUT_MSECS (3*60*1000)
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rstruct imap_client {
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R struct client common;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R time_t created;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R int refcount;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R struct io *io;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R struct ostream *output;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R struct imap_parser *parser;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R struct timeout *to_idle_disconnect, *to_auth_waiting;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R struct timeout *to_authfail_delay;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R struct login_proxy *proxy;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R char *proxy_user, *proxy_master_user, *proxy_password;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R char *proxy_backend_capability;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int bad_counter;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R const char *cmd_tag, *cmd_name;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int login_success:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int cmd_finished:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int proxy_login_sent:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int skip_line:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int input_blocked:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int destroyed:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int greeting_sent:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int id_logged:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int auth_initializing:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R unsigned int capability_command_used:1;
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R};
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_destroy(struct imap_client *client, const char *reason);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_destroy_success(struct imap_client *client, const char *reason);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_destroy_internal_failure(struct imap_client *client);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_send_line(struct imap_client *client, const char *line);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_send_tagline(struct imap_client *client, const char *line);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rbool client_read(struct imap_client *client);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rbool client_skip_line(struct imap_client *client);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_input(struct imap_client *client);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_ref(struct imap_client *client);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rbool client_unref(struct imap_client *client);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_set_auth_waiting(struct imap_client *client);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.Rvoid client_auth_failed(struct imap_client *client, bool nodelay);
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R#endif
ee1e4c0fa7e8a973ecf16b7535664b8f47fc7e75Niranjan M.R