aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--driver.c11
-rw-r--r--fetchmail.h2
2 files changed, 13 insertions, 0 deletions
diff --git a/driver.c b/driver.c
index 5421c766..78e72df6 100644
--- a/driver.c
+++ b/driver.c
@@ -965,6 +965,12 @@ static int do_session(
goto closeUp;
}
+ /* initialize protocol */
+ if (ctl->server.base_protocol->construct) {
+ err = (ctl->server.base_protocol->construct)(ctl);
+ if (err) goto cleanUp;
+ }
+
/* open a socket to the mail server */
oldphase = phase;
phase = OPEN_WAIT;
@@ -1547,6 +1553,11 @@ is restored."));
cleanupSockClose(mailserver_socket_temp);
mailserver_socket_temp = -1;
}
+
+ /* clean up protocol */
+ if (ctl->server.base_protocol->destruct) {
+ ctl->server.base_protocol->destruct(ctl);
+ }
}
/* no report on PS_AUTHFAIL */
diff --git a/fetchmail.h b/fetchmail.h
index d976f481..a1b77468 100644
--- a/fetchmail.h
+++ b/fetchmail.h
@@ -249,6 +249,8 @@ struct method /* describe methods for protocol state machine */
int (*logout_cmd)(int, struct query *);
/* logout command */
flag retry; /* can getrange poll for new messages? */
+ int (*construct)(struct query *); /* session setup before first command */
+ int (*destruct)(struct query *); /* cleanup after session */
};
enum badheader { BHREJECT = 0, BHACCEPT };