/* * Copyright (C) 2006-2008 Alfresco Software Limited. * * 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. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * As a special exception to the terms and conditions of version 2.0 of * the GPL, you may redistribute this Program in connection with Free/Libre * and Open Source Software ("FLOSS") applications as described in Alfresco's * FLOSS exception. You should have recieved a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ package org.alfresco.jlan.oncrpc.nfs; import org.springframework.extensions.config.ConfigElement; import org.alfresco.jlan.oncrpc.RpcAuthenticator; import org.alfresco.jlan.server.config.ConfigId; import org.alfresco.jlan.server.config.ConfigSection; import org.alfresco.jlan.server.config.ConfigurationListener; import org.alfresco.jlan.server.config.InvalidConfigurationException; import org.alfresco.jlan.server.config.ServerConfiguration; /** * NFS Server Configuration Section Class * * @author gkspencer */ public class NFSConfigSection extends ConfigSection { // NFS server configuration section name public static final String SectionName = "NFS"; // Enable the port mapper server private boolean m_nfsPortMapper; // Port mapper port private int m_portMapperPort; // Mount server port private int m_mountServerPort; // NFS server port private int m_nfsServerPort; // NFS debug flags private int m_nfsDebug; // Port mapper and mount server debug enable private boolean m_portMapDebug; private boolean m_mountServerDebug; // Thread pool size and packet pool size private int m_nfsThreadPoolSize; private int m_nfsPacketPoolSize; // RPC authenticator implementation private RpcAuthenticator m_rpcAuthenticator; private ConfigElement m_rpcAuthParams; // Network file cache timers/debug private long m_nfsFileCacheIOTimer; private long m_nfsFileCacheCloseTimer; private boolean m_nfsFileCacheDebug; /** * Class constructor * * @param config ServerConfiguration */ public NFSConfigSection(ServerConfiguration config) { super( SectionName, config); } /** * Determine if port mapper debug is enabled * * @return boolean */ public final boolean hasPortMapperDebug() { return m_portMapDebug; } /** * Determine if mount server debug is enabled * * @return boolean */ public final boolean hasMountServerDebug() { return m_mountServerDebug; } /** * Check if the NFS port mapper is enabled * * @return boolean */ public final boolean hasNFSPortMapper() { return m_nfsPortMapper; } /** * Return the port for port mapper to use, or zero for the default port * * @return int */ public final int getPortMapperPort() { return m_portMapperPort; } /** * Return the port the mount server should use, or zero for the default port * * @return int */ public final int getMountServerPort() { return m_mountServerPort; } /** * Return the port the NFS server should use, or zero for the default port * * @return int */ public final int getNFSServerPort() { return m_nfsServerPort; } /** * Return the NFS debug flags * * @return int */ public final int getNFSDebug() { return m_nfsDebug; } /** * Return the NFS thread pool size * * @return int */ public final int getNFSThreadPoolSize() { return m_nfsThreadPoolSize; } /** * Return the NFS server packet pool size, or -1 for the default size * * @return int */ public final int getNFSPacketPoolSize() { return m_nfsPacketPoolSize; } /** * Get the authenticator object that is used to provide RPC authentication (for the portmapper, mount server and * NFS server) * * @return RpcAuthenticator */ public final RpcAuthenticator getRpcAuthenticator() { return m_rpcAuthenticator; } /** * Return the RPC authenticator initialization parameters * * @return ConfigElement */ public final ConfigElement getRPCAuthenticatorParameters() { return m_rpcAuthParams; } /** * Return the NFS file cache I/O timer, in milliseconds * * @return long */ public final long getNFSFileCacheIOTimer() { return m_nfsFileCacheIOTimer; } /** * Return the NFS file cache close timer, in milliseconds * * @return long */ public final long getNFSFileCacheCloseTimer() { return m_nfsFileCacheCloseTimer; } /** * Check if NFS file cache debug output is enabled * * @return boolean */ public final boolean hasNFSFileCacheDebug() { return m_nfsFileCacheDebug; } /** * Set the NFS port mapper enable flag * * @param ena boolean * @return int * @exception InvalidConfigurationException */ public final int setNFSPortMapper(boolean ena) throws InvalidConfigurationException { // Check if the value has changed int sts = ConfigurationListener.StsIgnored; if ( m_nfsPortMapper != ena) { // Inform listeners, validate the configuration change sts = fireConfigurationChange(ConfigId.NFSPortMapEnable, new Boolean(ena)); m_nfsPortMapper = ena; } // Return the change status return sts; } /** * Set the NFS debug flags * * @param dbg int * @return int * @exception InvalidConfigurationException */ public final int setNFSDebug(int dbg) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSDebugFlags, new Integer(dbg)); m_nfsDebug = dbg; // Return the change status return sts; } /** * Set the port mapper port * * @param port int * @return int * @throws InvalidConfigurationException */ public final int setPortMapperPort(int port) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSPortMapPort, new Integer(port)); m_portMapperPort = port; // Return the change status return sts; } /** * Set the mount server port * * @param port int * @return int * @throws InvalidConfigurationException */ public final int setMountServerPort(int port) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSMountPort, new Integer(port)); m_mountServerPort = port; // Return the change status return sts; } /** * Set the NFS server port * * @param port int * @return int * @throws InvalidConfigurationException */ public final int setNFSServerPort(int port) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSServerPort, new Integer(port)); m_nfsServerPort = port; // Return the change status return sts; } /** * Set the NFS thread pool size * * @param poolSize int * @return int * @exception InvalidConfigurationException */ public final int setNFSThreadPoolSize(int poolSize) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSThreads, new Integer(poolSize)); m_nfsThreadPoolSize = poolSize; // Return the change status return sts; } /** * Set the NFS packet pool size * * @param poolSize int * @return int * @exception InvalidConfigurationException */ public final int setNFSPacketPoolSize(int poolSize) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSPacketPool, new Integer(poolSize)); m_nfsPacketPoolSize = poolSize; // Return the change status return sts; } /** * Enable/disable port mapper debug output * * @param dbg boolean * @return int * @throws InvalidConfigurationException */ public final int setPortMapperDebug(boolean dbg) throws InvalidConfigurationException { // Check if the value has changed int sts = ConfigurationListener.StsIgnored; if ( m_portMapDebug != dbg) { // Inform listeners, validate the configuration change sts = fireConfigurationChange(ConfigId.NFSPortMapDebug, new Boolean(dbg)); m_portMapDebug = dbg; } // Return the change status return sts; } /** * Enable/disable mount server debug output * * @param dbg boolean * @return int * @throws InvalidConfigurationException */ public final int setMountServerDebug(boolean dbg) throws InvalidConfigurationException { // Check if the value has changed int sts = ConfigurationListener.StsIgnored; if ( m_portMapDebug != dbg) { // Inform listeners, validate the configuration change sts = fireConfigurationChange(ConfigId.NFSMountDebug, new Boolean(dbg)); m_mountServerDebug = dbg; } // Return the change status return sts; } /** * Set the RPC authenticator to be used to authenticate access to the RPC based services (portmapper, mount * server and NFS server) * * @param authClass String * @param params ConfigElement * @return int * @exception InvalidConfigurationException */ public final int setRpcAuthenticator(String authClass, ConfigElement params) throws InvalidConfigurationException { // Validate the RPC authenticator class int sts = ConfigurationListener.StsIgnored; RpcAuthenticator auth = null; try { // Load the RPC authenticator class Object authObj = Class.forName(authClass).newInstance(); if ( authObj instanceof RpcAuthenticator) { // Set the RPC authenticator auth = (RpcAuthenticator) authObj; } else throw new InvalidConfigurationException("RPC Authenticator is not derived from required base class"); } catch ( ClassNotFoundException ex) { throw new InvalidConfigurationException("RPC Authenticator class " + authClass + " not found"); } catch ( Exception ex) { throw new InvalidConfigurationException("RPC Authenticator class error"); } // Initialize the authenticator using the parameter values auth.initialize( getServerConfiguration(), params); // Inform listeners, validate the configuration change sts = setRpcAuthenticator(auth); // Set the initialization parameters m_rpcAuthParams = params; // Return the change status return sts; } /** * Set the RPC authenticator to be used to authenticate access to the RPC based services (portmapper, mount * server and NFS server) * * @param authClass String * @param params ConfigElement * @return int * @exception InvalidConfigurationException */ public final int setRpcAuthenticator(RpcAuthenticator auth) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSRpcAuthenticator, auth); // Set the RPC authenticator m_rpcAuthenticator = auth; // Return the change status return sts; } /** * Set the NFS file cache I/O timer, in milliseconds * * @param ioTimer long * @return int * @exception InvalidConfigurationException */ public final int setNFSFileCacheIOTimer(long ioTimer) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSFileCacheIOTimer, new Long(ioTimer)); m_nfsFileCacheIOTimer = ioTimer; // Return the change status return sts; } /** * Set the NFS file cache close timer, in milliseconds * * @param closeTimer long * @return int * @exception InvalidConfigurationException */ public final int setNFSFileCacheCloseTimer(long closeTimer) throws InvalidConfigurationException { // Inform listeners, validate the configuration change int sts = fireConfigurationChange(ConfigId.NFSFileCacheCloseTimer, new Long(closeTimer)); m_nfsFileCacheCloseTimer = closeTimer; // Return the change status return sts; } /** * Set the NFS file cache debug enable flag * * @param ena boolean * @return int * @exception InvalidConfigurationException */ public final int setNFSFileCacheDebug(boolean ena) throws InvalidConfigurationException { // Check if the value has changed int sts = ConfigurationListener.StsIgnored; if ( m_nfsFileCacheDebug != ena) { // Inform listeners, validate the configuration change sts = fireConfigurationChange(ConfigId.NFSFileCacheDebug, new Boolean(ena)); m_nfsFileCacheDebug = ena; } // Return the change status return sts; } }