1
0
mirror of https://github.com/moparisthebest/davmail synced 2024-12-13 11:12:22 -05:00

Merged another patch from Dan Foody on network down detection

git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@694 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
mguessan 2009-09-03 00:06:03 +00:00
parent d2e2e5ee3c
commit 6ef071603a

View File

@ -40,6 +40,7 @@ public final class ExchangeSessionFactory {
private static final Object LOCK = new Object(); private static final Object LOCK = new Object();
private static final Map<PoolKey, ExchangeSession> poolMap = new HashMap<PoolKey, ExchangeSession>(); private static final Map<PoolKey, ExchangeSession> poolMap = new HashMap<PoolKey, ExchangeSession>();
private static boolean configChecked; private static boolean configChecked;
private static boolean errorSent;
static class PoolKey { static class PoolKey {
public final String url; public final String url;
@ -110,17 +111,21 @@ public final class ExchangeSessionFactory {
} }
// session opened, future failure will mean network down // session opened, future failure will mean network down
configChecked = true; configChecked = true;
// Reset so next time an problem occurs message will be sent once
errorSent = false;
} catch (UnknownHostException exc) { } catch (UnknownHostException exc) {
handleNetworkDown(exc); handleNetworkDown(exc);
} catch (NoRouteToHostException exc) { } catch (NoRouteToHostException exc) {
handleNetworkDown(exc); handleNetworkDown(exc);
} catch (ConnectException exc) {
handleNetworkDown(exc);
} }
return session; return session;
} }
/** /**
* Send a request to Exchange server to check current settings. * Send a request to Exchange server to check current settings.
* *
* @throws IOException if unable to access Exchange server * @throws IOException if unable to access Exchange server
*/ */
public static void checkConfig() throws IOException { public static void checkConfig() throws IOException {
@ -139,18 +144,12 @@ public final class ExchangeSessionFactory {
} }
// session opened, future failure will mean network down // session opened, future failure will mean network down
configChecked = true; configChecked = true;
// Reset so next time an problem occurs message will be sent once
} catch (UnknownHostException exc) { errorSent = false;
handleNetworkDown(exc);
} catch (NoRouteToHostException exc) {
handleNetworkDown(exc);
// Could not open the port (probably because it is blocked behind a firewall)
} catch (ConnectException exc) {
handleNetworkDown(exc);
} catch (NetworkDownException exc) { } catch (NetworkDownException exc) {
throw exc; throw exc;
} catch (Exception exc) { } catch (Exception exc) {
throw new DavMailException("EXCEPTION_DAVMAIL_CONFIGURATION", exc); handleNetworkDown(exc);
} finally { } finally {
testMethod.releaseConnection(); testMethod.releaseConnection();
} }
@ -163,8 +162,16 @@ public final class ExchangeSessionFactory {
throw new NetworkDownException("EXCEPTION_NETWORK_DOWN"); throw new NetworkDownException("EXCEPTION_NETWORK_DOWN");
} else { } else {
BundleMessage message = new BundleMessage("EXCEPTION_CONNECT", exc.getClass().getName(), exc.getMessage()); BundleMessage message = new BundleMessage("EXCEPTION_CONNECT", exc.getClass().getName(), exc.getMessage());
ExchangeSession.LOGGER.error(message); if (errorSent) {
throw new DavMailException("EXCEPTION_DAVMAIL_CONFIGURATION", message); ExchangeSession.LOGGER.warn(message);
throw new NetworkDownException("EXCEPTION_DAVMAIL_CONFIGURATION");
} else {
// Mark that an error has been sent so you only get one
// error in a row (not a repeating string of errors).
errorSent = true;
ExchangeSession.LOGGER.error(message);
throw new DavMailException("EXCEPTION_DAVMAIL_CONFIGURATION", message);
}
} }
} }
@ -197,6 +204,7 @@ public final class ExchangeSessionFactory {
*/ */
public static void reset() { public static void reset() {
configChecked = false; configChecked = false;
errorSent = false;
poolMap.clear(); poolMap.clear();
} }
} }