From 6647d6c3f9a8c262fa35b8c0e0ce0666a0a1bf24 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Sat, 27 Nov 2010 19:44:16 +0100 Subject: [PATCH] Try ssl first, and then network for IMAP connections. --- lisp/ChangeLog | 4 ++++ lisp/nnimap.el | 24 ++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c5a846767..f4369adde 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2010-11-27 Lars Magne Ingebrigtsen + * nnimap.el (nnimap-stream): Change default to `undecided'. + (nnimap-open-connection): If `nnimap-stream' is `undecided', try ssl + first, and then network. + * proto-stream.el (proto-stream-always-use-starttls): New variable. (proto-stream-open-starttls): De-duplicate the starttls code. (proto-stream-open-starttls): Folded back into the main function. diff --git a/lisp/nnimap.el b/lisp/nnimap.el index 97a0fb439..e217ac52c 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -63,9 +63,10 @@ If nnimap-stream is `ssl', this will default to `imaps'. If not, it will default to `imap'.") -(defvoo nnimap-stream 'ssl +(defvoo nnimap-stream 'undecided "How nnimap will talk to the IMAP server. -Values are `ssl', `network', `starttls' or `shell'.") +Values are `ssl', `network', `starttls' or `shell'. +The default is to try `ssl' first, and then `network'.") (defvoo nnimap-shell-program (if (boundp 'imap-shell-program) (if (listp imap-shell-program) @@ -302,6 +303,19 @@ textual parts.") (nnimap-send-command "NOOP"))))))) (defun nnimap-open-connection (buffer) + (let ((stream + (if (eq nnimap-stream 'undecided) + (loop for type in '(ssl network) + for stream = (let ((nnimap-stream type)) + (nnimap-open-connection-1 buffer)) + while (eq stream 'no-connect) + finally (return stream)) + (nnimap-open-connection-1 buffer)))) + (if (eq stream 'no-connect) + nil + stream))) + +(defun nnimap-open-connection-1 (buffer) (unless nnimap-keepalive-timer (setq nnimap-keepalive-timer (run-at-time (* 60 15) (* 60 15) 'nnimap-keepalive))) @@ -341,8 +355,10 @@ textual parts.") "1 STARTTLS\r\n"))) (setf (nnimap-process nnimap-object) stream) (if (not stream) - (nnheader-report 'nnimap "Unable to contact %s:%s via %s" - nnimap-address port nnimap-stream) + (progn + (nnheader-report 'nnimap "Unable to contact %s:%s via %s" + nnimap-address port nnimap-stream) + 'no-connect) (gnus-set-process-query-on-exit-flag stream nil) (if (not (string-match "[*.] OK" greeting)) (nnheader-report 'nnimap "%s" greeting) -- 2.34.1