package ch.cyberduck.core; /* * Copyright (c) 2002-2009 David Kocher. All rights reserved. * * http://cyberduck.ch/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Bug fixes, suggestions and comments should be sent to: * dkocher@cyberduck.ch */ /** * @version $Id: SystemConfigurationReachability.java 5419 2009-10-06 19:09:45Z dkocher $ */ public class SystemConfigurationReachability implements Reachability { public static void register() { ReachabilityFactory.addFactory(Factory.NATIVE_PLATFORM, new Factory()); } private static class Factory extends ReachabilityFactory { @Override protected Reachability create() { return new SystemConfigurationReachability(); } } private SystemConfigurationReachability() { ; } private static boolean JNI_LOADED = false; /** * Load native library extensions * * @return */ private static boolean loadNative() { if(!JNI_LOADED) { JNI_LOADED = Native.load("Diagnostics"); } return JNI_LOADED; } public boolean isReachable(Host host) { if(!Preferences.instance().getBoolean("connection.hostname.check")) { return true; } if(!loadNative()) { return false; } return this.isReachable(host.toURL()); } private native boolean isReachable(String url); /** * Opens the network configuration assistant for the URL denoting this host * * @see Host#toURL */ public void diagnose(Host host) { if(!loadNative()) { return; } this.diagnose(host.toURL()); } private native void diagnose(String url); }