151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/*
251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 2004, 2008, Oracle and/or its affiliates. All rights reserved.
351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it
651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as
751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation.  Oracle designates this
851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided
951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code.
1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT
1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that
1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code).
1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version
1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation,
1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any
2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions.
2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */
2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage sun.net;
2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.io.*;
2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.security.AccessController;
2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.security.PrivilegedAction;
3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.Properties;
3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/*
3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This class allows for centralized access to Networking properties.
3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Default values are loaded from the file jre/lib/net.properties
3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Jean-Christophe Collet
3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski *
3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */
4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class NetProperties {
4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    static private Properties props = new Properties();
4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    static {
4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        AccessController.doPrivileged(
4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            new PrivilegedAction<Void>() {
4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski                public Void run() {
4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski                    loadDefaultProperties();
4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski                    return null;
4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski                }});
5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    private NetProperties() { };
5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /*
5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Loads the default networking system properties
5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * the file is in jre/lib/net.properties
5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    static private void loadDefaultProperties() {
6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        String fname = System.getProperty("java.home");
6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        if (fname == null) {
6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            throw new Error("Can't find java.home ??");
6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        }
6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        try {
6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            File f = new File(fname, "lib");
6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            f = new File(f, "net.properties");
6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            fname = f.getCanonicalPath();
6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            InputStream in = new FileInputStream(fname);
6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            BufferedInputStream bin = new BufferedInputStream(in);
7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            props.load(bin);
7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            bin.close();
7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        } catch (Exception e) {
7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            // Do nothing. We couldn't find or access the file
7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            // so we won't have default properties...
7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        }
7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Get a networking system property. If no system property was defined
8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * returns the default value, if it exists, otherwise returns
8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * <code>null</code>.
8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param      key  the property name.
8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @throws  SecurityException  if a security manager exists and its
8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *          <code>checkPropertiesAccess</code> method doesn't allow access
8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *          to the system properties.
8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @return the <code>String</code> value for the property,
8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         or <code>null</code>
8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    static public String get(String key) {
9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        String def = props.getProperty(key);
9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        try {
9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            return System.getProperty(key, def);
9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        } catch (IllegalArgumentException e) {
9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        } catch (NullPointerException e) {
9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        }
9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        return null;
9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Get an Integer networking system property. If no system property was
10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * defined returns the default value, if it exists, otherwise returns
10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * <code>null</code>.
10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param   key     the property name.
10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param   defval  the default value to use if the property is not found
10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @throws  SecurityException  if a security manager exists and its
10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *          <code>checkPropertiesAccess</code> method doesn't allow access
10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *          to the system properties.
10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @return the <code>Integer</code> value for the property,
10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         or <code>null</code>
11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    static public Integer getInteger(String key, int defval) {
11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        String val = null;
11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        try {
11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            val = System.getProperty(key, props.getProperty(key));
11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        } catch (IllegalArgumentException e) {
11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        } catch (NullPointerException e) {
11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        }
11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        if (val != null) {
12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            try {
12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski                return Integer.decode(val);
12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            } catch (NumberFormatException ex) {
12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            }
12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        }
12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        return new Integer(defval);
12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    /**
13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * Get a Boolean networking system property. If no system property was
13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * defined returns the default value, if it exists, otherwise returns
13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * <code>null</code>.
13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @param   key     the property name.
13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @throws  SecurityException  if a security manager exists and its
13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *          <code>checkPropertiesAccess</code> method doesn't allow access
13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *          to the system properties.
13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     * @return the <code>Boolean</code> value for the property,
13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     *         or <code>null</code>
13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski     */
14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    static public Boolean getBoolean(String key) {
14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        String val = null;
14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        try {
14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            val = System.getProperty(key, props.getProperty(key));
14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        } catch (IllegalArgumentException e) {
14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        } catch (NullPointerException e) {
14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        }
14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        if (val != null) {
15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            try {
15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski                return Boolean.valueOf(val);
15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            } catch (NumberFormatException ex) {
15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski            }
15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        }
15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski        return null;
15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski    }
15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski
15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski}
159