/* Disconnect client after idling this many milliseconds */
#define CLIENT_IDLE_TIMEOUT_MSECS (10*60*1000)
+static const struct smtp_server_callbacks smtp_callbacks;
+static const struct submission_client_vfuncs submission_client_vfuncs;
+
struct client *submission_clients;
unsigned int submission_client_count;
-static const struct smtp_server_callbacks smtp_callbacks;
-
static void client_input_pre(void *context)
{
struct client *client = context;
pool = pool_alloconly_create("submission client", 2048);
client = p_new(pool, struct client, 1);
client->pool = pool;
+ client->v = submission_client_vfuncs;
client->user = user;
client->service_user = service_user;
client->set = set;
void client_destroy(struct client *client, const char *prefix,
const char *reason)
+{
+ client->v.destroy(client, prefix, reason);
+}
+
+static void
+client_default_destroy(struct client *client, const char *prefix,
+ const char *reason)
{
if (client->destroyed)
return;
.conn_disconnect = client_connection_disconnect,
.conn_destroy = client_connection_destroy,
};
+
+static const struct submission_client_vfuncs submission_client_vfuncs = {
+ client_default_destroy,
+};
uoff_t data_size;
};
+struct submission_client_vfuncs {
+ void (*destroy)(struct client *client, const char *prefix,
+ const char *reason);
+};
+
struct client {
struct client *prev, *next;
pool_t pool;
- const char *session_id;
+ struct submission_client_vfuncs v;
+ char *session_id;
const struct setting_parser_info *user_set_info;
const struct submission_settings *set;