]> Pileus Git - ~andy/fetchmail/blobdiff - fetchmail.h
Track due time and prevent excess repelling
[~andy/fetchmail] / fetchmail.h
index 933724f7d52e2568d6d75fb0696a1bad310011ad..c1ab23d25c682f193835cbbd34f51f5163d3d404 100644 (file)
 #define _NETBSD_SOURCE 1
 #endif
 
+#include "gettext.h"
+#define GT_(String) gettext (String)
+#define gettext_noop(String) String
+#define N_(String) gettext_noop (String)
+
 struct addrinfo;
 
 /* We need this for size_t */
@@ -31,13 +36,14 @@ struct addrinfo;
 #include <libpwmd.h>
 #endif
 
-/* constants designating the various supported protocols */
-#define                P_AUTO          1
-#define                P_POP3          3
-#define                P_APOP          4
-#define                P_IMAP          6
-#define                P_ETRN          7
-#define                P_ODMR          8
+/** constants designating the various supported protocols -- ordered */
+enum protocols {
+    P_AUTO = 1 /**< probe IMAP and POP3 - deprecated */,
+    P_POP3     /**  POP3, including APOP and KPOP, RFC 1939 et al. */,
+    P_IMAP     /**  IMAP4, RFC 3501 */,
+    P_ETRN     /**  ETRN - SMTP Service Extension for Remote Message Queue Starting, "extended TURN", RFC 1985 */,
+    P_ODMR     /**  ODMR/ATRN - On-Demand Mail Relay SMTP with dynamic addresses/Authenticated TURN, RFC 2645 */
+};
 
 #define                SMTP_PORT       "smtp"
 #define                SMTP_PORT_NUM   25
@@ -55,17 +61,20 @@ struct addrinfo;
  */
 #define MAILBOX_PROTOCOL(ctl)  ((ctl)->server.protocol < P_ETRN)
 
-/* authentication types */
-#define                A_ANY           0       /* use the first method that works */
-#define                A_PASSWORD      1       /* password authentication */
-#define                A_NTLM          2       /* Microsoft NTLM protocol */
-#define                A_CRAM_MD5      3       /* CRAM-MD5 shrouding (RFC2195) */
-#define                A_OTP           4       /* One-time password (RFC1508) */
-#define                A_KERBEROS_V5   6       /* authenticate w/ Kerberos V5 */
-#define        A_GSSAPI        7       /* authenticate with GSSAPI */
-#define                A_SSH           8       /* authentication at session level */
-#define                A_MSN           9       /* same as NTLM with keyword MSN */
-#define                A_EXTERNAL      10      /* external authentication (client cert) */
+/** authentication types */
+enum authenticators {
+       A_ANY = 0       /**< use the first method that works */,
+       A_PASSWORD      /** password authentication */,
+       A_NTLM          /** Microsoft NTLM protocol */,
+       A_CRAM_MD5      /** CRAM-MD5 shrouding (RFC2195) */,
+       A_OTP           /** One-time password (RFC1508) */,
+       A_APOP          /** POP3 APOP */,
+       A_KERBEROS_V5   /** authenticate w/ Kerberos V5 */,
+       A_GSSAPI        /** authenticate with GSSAPI */,
+       A_SSH           /** authentication at session level */,
+       A_MSN           /** same as NTLM with keyword MSN */,
+       A_EXTERNAL      /** external authentication (client cert) */
+};
 
 /* some protocols or authentication types (KERBEROS, GSSAPI, SSH) don't
  * require a password */
@@ -199,7 +208,7 @@ UID_SEEN=   1,              /**< id was seen, but not deleted */
 UID_DELETED=   2,              /**< this message has been marked deleted */
 UID_EXPUNGED=  3               /**< this message has been expunged */
 };
-/*@}*/
+/**/
 
 
 struct query;
@@ -235,6 +244,10 @@ struct method              /* describe methods for protocol state machine */
                                /* mark as seen method */
     int (*end_mailbox_poll)(int, struct query *);
                                /* end-of-mailbox processing */
+    int (*start_idle)(int, struct query *);
+                               /* enter idle state */
+    int (*finish_idle)(int, struct query *);
+                               /* return from idle state */
     int (*logout_cmd)(int, struct query *);
                                /* logout command */
     flag retry;                        /* can getrange poll for new messages? */
@@ -295,6 +308,9 @@ struct hostdata             /* shared among all user connections to given server */
     struct hostdata *lead_server;      /* ptr to lead query for this server */
     int esmtp_options;
     int workarounds;                   /* track which workarounds the user was warned about */
+    int true_idle;                     /* the server supports true idle connections */
+    int idle_socket;                   /* the open socket for idle connections */
+    flag idle_ready;                   /* true if the idle socket has data available */
 };
 
 /*
@@ -637,7 +653,6 @@ int doODMR (struct query *);
 
 /* authentication functions */
 int do_cram_md5(int sock, const char *command, struct query *ctl, const char *strip);
-int do_rfc1731(int sock, const char *command, const char *truename);
 int check_gss_creds(const char *service, const char *hostname);
 int do_gssauth(int sock, const char *command, const char *service, const char *hostname, const char *username);
 int do_otp(int sock, const char *command, struct query *ctl);