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