client.h revision 235cb7d2446d5c2e25962e5c461f51fe6579c581
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch#ifndef __CLIENT_H
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen#define __CLIENT_H
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen
df8046c9a4f6bc2a478ad1e74504d50f3110c906Timo Sirainen#include "network.h"
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen#include "master.h"
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen#include "client-common.h"
f8740ac53310cd28ba4ec6dc9e9ce6e9a3688f39Timo Sirainen
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainenstruct imap_client {
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen struct client common;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen time_t created;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen int refcount;
cc23ad7b8ab96d93d5ab5139c431fcdd8d9e1d72Timo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen struct istream *input;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen struct ostream *output;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen struct imap_parser *parser;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen time_t last_input;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen unsigned int bad_counter;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen const char *cmd_tag, *cmd_name;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen
7000810786f2959f02cd6d2f4151a9eb61ff5db8Timo Sirainen buffer_t *plain_login;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen unsigned int tls:1;
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen unsigned int cmd_finished:1;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen unsigned int skip_line:1;
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen unsigned int input_blocked:1;
7000810786f2959f02cd6d2f4151a9eb61ff5db8Timo Sirainen unsigned int authenticating:1;
fccd110b494a7e31f23d31d9e3bc3e986c9bb1a8Timo Sirainen unsigned int destroyed:1;
7000810786f2959f02cd6d2f4151a9eb61ff5db8Timo Sirainen};
7000810786f2959f02cd6d2f4151a9eb61ff5db8Timo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenstruct client *client_create(int fd, struct ip_addr *ip, int ssl);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenvoid client_destroy(struct imap_client *client, const char *reason);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainenvoid client_send_line(struct imap_client *client, const char *line);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenvoid client_send_tagline(struct imap_client *client, const char *line);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenvoid client_syslog(struct imap_client *client, const char *text);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenint client_read(struct imap_client *client);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenvoid client_input(void *context);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenvoid client_ref(struct imap_client *client);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenint client_unref(struct imap_client *client);
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainenvoid clients_init(void);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainenvoid clients_deinit(void);
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen
d6a7cb184cc882a90aa3d9312082e0029f354ff6Timo Sirainen#endif
cc935aff970ed6c24d136cc560c7e705a49d536cTimo Sirainen