From 1fb58cf45ff6a27d75caa87294e1a5068528e221 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Sat, 7 Oct 2017 22:57:38 +0300 Subject: [PATCH] Suppress ETIMEDOUT errors --- imap-core/lib/imap-server.js | 18 ++++++++++++++++-- lib/errors.js | 5 +++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/imap-core/lib/imap-server.js b/imap-core/lib/imap-server.js index e8fb4dad..39695c54 100644 --- a/imap-core/lib/imap-server.js +++ b/imap-core/lib/imap-server.js @@ -176,7 +176,7 @@ class IMAPServer extends EventEmitter { * @event */ _onError(err) { - errors.notify(err); + errors.notifyConnection(false, err); this.emit('error', err); } @@ -194,7 +194,21 @@ class IMAPServer extends EventEmitter { return; } returned = true; - callback(err || new Error('Socket closed unexpectedly')); + if (err && /SSL23_GET_CLIENT_HELLO/.test(err.message)) { + let message = err.message; + err.message = 'Failed to establish TLS session'; + err.meta = { + message, + remoteAddress: socket.remoteAddress + }; + } + if (!err) { + err = new Error('Socket closed unexpectedly'); + err.meta = { + remoteAddress: socket.remoteAddress + }; + } + callback(err); }; // remove all listeners from the original socket besides the error handler diff --git a/lib/errors.js b/lib/errors.js index d8f39274..cd91a651 100644 --- a/lib/errors.js +++ b/lib/errors.js @@ -18,6 +18,7 @@ module.exports.notify = (...args) => { }; module.exports.notifyConnection = (connection, ...args) => { + let err = args[0]; let metaData = args[1] || {}; if (connection) { @@ -33,6 +34,10 @@ module.exports.notifyConnection = (connection, ...args) => { metaData.isUTF8Enabled = !!connection.acceptUTF8Enabled; } + Object.keys(err.meta || {}).forEach(key => { + metaData[key] = err.meta[key]; + }); + args[1] = metaData; if (bugsnag) {