/*
* 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.smb.server;
import java.net.InetAddress;
import org.springframework.extensions.config.ConfigElement;
import org.alfresco.jlan.netbios.RFCNetBIOSProtocol;
import org.alfresco.jlan.server.auth.CifsAuthenticator;
import org.alfresco.jlan.server.auth.ICifsAuthenticator;
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;
import org.alfresco.jlan.smb.DialectSelector;
import org.alfresco.jlan.smb.ServerType;
import org.alfresco.jlan.smb.TcpipSMB;
import org.alfresco.jlan.util.StringList;
/**
* CIFS Server Configuration Section Class
*
* @author gkspencer
*/
public class CIFSConfigSection extends ConfigSection {
// CIFS server configuration section name
public static final String SectionName = "CIFS";
// Default client socket timeout
public static final int DefSessionTimeout = 15 * 60 * 1000; // 15 minutes, milliseconds
// Server name
private String m_name;
// Server alias name(s)
private StringList m_aliasNames;
// Server type, used by the host announcer
private int m_srvType = ServerType.WorkStation + ServerType.Server;
// Server comment
private String m_comment;
// Server domain
private String m_domain;
// Network broadcast mask string
private String m_broadcast;
// Announce the server to network neighborhood, announcement interval in minutes and announcer port
private boolean m_announce;
private int m_announceInterval;
private int m_announcePort;
// Default SMB dialects to enable
private DialectSelector m_dialects;
// Authenticator, used to authenticate users and share connections.
private ICifsAuthenticator m_authenticator;
private ConfigElement m_authParams;
/** Is the authenticator instance owned by this object? **/
private boolean m_localAuthenticator;
// NetBIOS name server and host announcer debug enable
private boolean m_nbDebug = false;
private boolean m_announceDebug = false;
// Default session debugging setting
private int m_sessDebug;
// Name server port
private int m_namePort = RFCNetBIOSProtocol.NAME_PORT;
// Session port
private int m_sessPort = RFCNetBIOSProtocol.PORT;
// Datagram port
private int m_nbDatagramPort = RFCNetBIOSProtocol.DATAGRAM;
// TCP/IP SMB port
private int m_tcpSMBPort = TcpipSMB.PORT;
// Flags to indicate if NetBIOS, native TCP/IP SMB and/or Win32 NetBIOS should be enabled
private boolean m_netBIOSEnable = true;
private boolean m_tcpSMBEnable = false;
private boolean m_win32NBEnable = false;
// Address to bind the SMB server to, if null all local addresses are used
private InetAddress m_smbBindAddress;
// Address to bind the NetBIOS name server to, if null all addresses are used
private InetAddress m_nbBindAddress;
// WINS servers
private InetAddress m_winsPrimary;
private InetAddress m_winsSecondary;
// Enable/disable Macintosh extension SMBs
private boolean m_macExtensions;
// Disable NIO based code
private boolean m_disableNIO;
// Client session socket timeout, in milliseconds
private int m_clientSocketTimeout = DefSessionTimeout;
//--------------------------------------------------------------------------------
// Win32 NetBIOS configuration
//
// Server name to register under Win32 NetBIOS, if not set the main server name is used
private String m_win32NBName;
// LANA to be used for Win32 NetBIOS, if not specified the first available is used
private int m_win32NBLANA = -1;
// Accept connections from all hosts or a specific host only
private String m_win32NBAccept = "*";
// Send out host announcements via the Win32 NetBIOS interface
private boolean m_win32NBAnnounce = false;
private int m_win32NBAnnounceInterval;
// Use Winsock NetBIOS interface if true, else use the Netbios() API interface
private boolean m_win32NBUseWinsock = true;
// Disable use of native code on Windows, do not use any JNI calls
private boolean m_disableNativeCode = false;
/**
* Class constructor
*
* @param config ServerConfiguration
*/
public CIFSConfigSection(ServerConfiguration config) {
super( SectionName, config);
// Set the default dialect list
m_dialects = new DialectSelector();
m_dialects.EnableAll();
}
/**
* Get the authenticator object that is used to provide user and share connection authentication.
*
* @return CifsAuthenticator
*/
public final ICifsAuthenticator getAuthenticator() {
return m_authenticator;
}
/**
* Return the authenticator initialization parameters
*
* @return ConfigElement
*/
public final ConfigElement getAuthenticatorParameters() {
return m_authParams;
}
/**
* Return the local address that the SMB server should bind to.
*
* @return java.net.InetAddress
*/
public final InetAddress getSMBBindAddress() {
return m_smbBindAddress;
}
/**
* Return the local address that the NetBIOS name server should bind to.
*
* @return java.net.InetAddress
*/
public final InetAddress getNetBIOSBindAddress() {
return m_nbBindAddress;
}
/**
* Return the network broadcast mask to be used for broadcast datagrams.
*
* @return java.lang.String
*/
public final String getBroadcastMask() {
return m_broadcast;
}
/**
* Return the server comment.
*
* @return java.lang.String
*/
public final String getComment() {
return m_comment != null ? m_comment : "";
}
/**
* Return the domain name.
*
* @return java.lang.String
*/
public final String getDomainName() {
return m_domain;
}
/**
* Return the enabled SMB dialects that the server will use when negotiating sessions.
*
* @return DialectSelector
*/
public final DialectSelector getEnabledDialects() {
return m_dialects;
}
/**
* Return the name server port to listen on.
*
* @return int
*/
public final int getNameServerPort() {
return m_namePort;
}
/**
* Return the NetBIOS datagram port
*
* @return int
*/
public final int getDatagramPort() {
return m_nbDatagramPort;
}
/**
* Return the server name.
*
* @return java.lang.String
*/
public final String getServerName() {
return m_name;
}
/**
* Check if the server has any alias names configured
*
* @return boolean
*/
public final boolean hasAliasNames() {
return m_aliasNames != null ? true : false;
}
/**
* Return the number of alias names configured
*
* @return int
*/
public final int getNumberOfAliasNames() {
return m_aliasNames != null ? m_aliasNames.numberOfStrings() : 0;
}
/**
* Return the list of alias names for the server
*
* @return StringList
*/
public final StringList getAliasNames() {
return m_aliasNames;
}
/**
* Return the server type flags.
*
* @return int
*/
public final int getServerType() {
return m_srvType;
}
/**
* Return the server debug flags.
*
* @return int
*/
public final int getSessionDebugFlags() {
return m_sessDebug;
}
/**
* Get the session port to listen on.
*
* @return int
*/
public final int getSessionPort() {
return m_sessPort;
}
/**
* Return the Win32 NetBIOS server name, if null the default server name will be used
*
* @return String
*/
public final String getWin32ServerName() {
return m_win32NBName;
}
/**
* Return the Win32 NetBIOS allowed client name, defaults to '*' to allow any client to connect
*
* @return String
*/
public final String getWin32ClientAccept () {
return m_win32NBAccept;
}
/**
* Determine if the server should be announced via Win32 NetBIOS, so that it appears under Network Neighborhood.
*
* @return boolean
*/
public final boolean hasWin32EnableAnnouncer() {
return m_win32NBAnnounce;
}
/**
* Return the Win32 NetBIOS host announcement interval, in minutes
*
* @return int
*/
public final int getWin32HostAnnounceInterval() {
return m_win32NBAnnounceInterval;
}
/**
* Return the Win3 NetBIOS LANA number to use, or -1 for the first available
*
* @return int
*/
public final int getWin32LANA() {
return m_win32NBLANA;
}
/**
* Determine if the Win32 Netbios() API or Winsock Netbios calls should be used
*
* @return boolean
*/
public final boolean useWinsockNetBIOS()
{
return m_win32NBUseWinsock;
}
/**
* Determine if NIO based code should be disabled
*
* @return boolean
*/
public final boolean hasDisableNIOCode() {
return m_disableNIO;
}
/**
* Determine if the primary WINS server address has been set
*
* @return boolean
*/
public final boolean hasPrimaryWINSServer() {
return m_winsPrimary != null ? true : false;
}
/**
* Return the primary WINS server address
*
* @return InetAddress
*/
public final InetAddress getPrimaryWINSServer() {
return m_winsPrimary;
}
/**
* Determine if the secondary WINS server address has been set
*
* @return boolean
*/
public final boolean hasSecondaryWINSServer() {
return m_winsSecondary != null ? true : false;
}
/**
* Return the secondary WINS server address
*
* @return InetAddress
*/
public final InetAddress getSecondaryWINSServer() {
return m_winsSecondary;
}
/**
* Determine if the SMB server should bind to a particular local address
*
* @return boolean
*/
public final boolean hasSMBBindAddress() {
return m_smbBindAddress != null ? true : false;
}
/**
* Determine if the NetBIOS name server should bind to a particular local address
*
* @return boolean
*/
public final boolean hasNetBIOSBindAddress() {
return m_nbBindAddress != null ? true : false;
}
/**
* Determine if NetBIOS name server debugging is enabled
*
* @return boolean
*/
public final boolean hasNetBIOSDebug() {
return m_nbDebug;
}
/**
* Determine if host announcement debugging is enabled
*
* @return boolean
*/
public final boolean hasHostAnnounceDebug() {
return m_announceDebug;
}
/**
* Determine if the server should be announced so that it appears under Network Neighborhood.
*
* @return boolean
*/
public final boolean hasEnableAnnouncer() {
return m_announce;
}
/**
* Return the host announcement interval, in minutes
*
* @return int
*/
public final int getHostAnnounceInterval() {
return m_announceInterval;
}
/**
* Return the host announcer port to use, or zero for the default port
*
* @return int
*/
public final int getHostAnnouncerPort() {
return m_announcePort;
}
/**
* Determine if Macintosh extension SMBs are enabled
*
* @return boolean
*/
public final boolean hasMacintoshExtensions() {
return m_macExtensions;
}
/**
* Determine if NetBIOS SMB is enabled
*
* @return boolean
*/
public final boolean hasNetBIOSSMB() {
return m_netBIOSEnable;
}
/**
* Determine if TCP/IP SMB is enabled
*
* @return boolean
*/
public final boolean hasTcpipSMB() {
return m_tcpSMBEnable;
}
/**
* Determine if Win32 NetBIOS is enabled
*
* @return boolean
*/
public final boolean hasWin32NetBIOS() {
return m_win32NBEnable;
}
/**
* Return the TCP/IP SMB port
*
* @return int
*/
public final int getTcpipSMBPort() {
return m_tcpSMBPort;
}
/**
* Return the client socket timeout, in millisconds
*
* @return int
*/
public final int getSocketTimeout() {
return m_clientSocketTimeout;
}
/**
* Check if native code calls are disabled
*
* @return boolean
*/
public final boolean isNativeCodeDisabled()
{
return m_disableNativeCode;
}
/**
* Set the authenticator to be used to authenticate users and share connections.
*
* @param authClass String
* @param params ConfigElement
* @param accessMode int
* @param allowGuest boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setAuthenticator(String authClass, ConfigElement params, int accessMode, boolean allowGuest)
throws InvalidConfigurationException {
// Validate the authenticator class
int sts = ConfigurationListener.StsIgnored;
CifsAuthenticator auth = null;
try {
// Load the authenticator class
Object authObj = Class.forName(authClass).newInstance();
if ( authObj instanceof CifsAuthenticator) {
// Set the server authenticator
auth = (CifsAuthenticator) authObj;
auth.setAccessMode(accessMode);
auth.setAllowGuest(allowGuest);
}
else
throw new InvalidConfigurationException("Authenticator is not derived from required base class");
}
catch ( ClassNotFoundException ex) {
throw new InvalidConfigurationException("Authenticator class " + authClass + " not found");
}
catch ( Exception ex) {
throw new InvalidConfigurationException("Authenticator class error");
}
// Initialize the authenticator using the parameter values
auth.initialize( getServerConfiguration(), params);
// Inform listeners, validate the configuration change
sts = setAuthenticator(auth);
// Remember that the authenticator instance will need destroying
m_localAuthenticator = true;
// Set initialization parameters
m_authParams = params;
// Return the change status
return sts;
}
/**
* Set the authenticator to be used to authenticate users and share connections.
*
* @param auth the authenticator
* @return int
* @exception InvalidConfigurationException
*/
public final int setAuthenticator(ICifsAuthenticator auth)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBAuthenticator, auth);
// Set the server authenticator
m_authenticator = auth;
m_localAuthenticator = false;
// Return the change status
return sts;
}
/**
* Set the local address that the SMB server should bind to.
*
* @param addr java.net.InetAddress
* @return int
* @exception InvalidConfigurationException
*/
public final int setSMBBindAddress(InetAddress addr)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBBindAddress, addr);
m_smbBindAddress = addr;
// Return the change status
return sts;
}
/**
* Set the local address that the NetBIOS name server should bind to.
*
* @param addr java.net.InetAddress
* @return int
* @exception InvalidConfigurationException
*/
public final int setNetBIOSBindAddress(InetAddress addr)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.NetBIOSBindAddress, addr);
m_nbBindAddress = addr;
// Return the change status
return sts;
}
/**
* Set the broadcast mask to be used for broadcast datagrams.
*
* @param mask java.lang.String
* @return int
* @exception InvalidConfigurationException
*/
public final int setBroadcastMask(String mask)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBBroadcastMask, mask);
m_broadcast = mask;
// Return the change status
return sts;
}
/**
* Set the server comment.
*
* @param comment java.lang.String
* @return int
* @exception InvalidConfigurationException
*/
public final int setComment(String comment)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBComment, comment);
m_comment = comment;
// Return the change status
return sts;
}
/**
* Set the domain that the server is to belong to.
*
* @param domain java.lang.String
* @return int
* @exception InvalidConfigurationException
*/
public final int setDomainName(String domain)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBDomain, domain);
m_domain = domain;
// Return the change status
return sts;
}
/**
* Set the SMB dialects that the server may use when negotiating a session with a client.
*
* @param dialects DialectSelector
* @return int
* @exception InvalidConfigurationException
*/
public final int setEnabledDialects(DialectSelector dialects)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBDialects, dialects);
m_dialects = new DialectSelector();
m_dialects.copyFrom(dialects);
// Return the change status
return sts;
}
/**
* Enable/disable the host announcer.
*
* @param b boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setHostAnnouncer(boolean b)
throws InvalidConfigurationException {
// Check if the value has changed
int sts = ConfigurationListener.StsIgnored;
if ( m_announce != b) {
// Inform listeners, validate the configuration change
sts = fireConfigurationChange(ConfigId.SMBAnnceEnable, new Boolean(b));
m_announce = b;
}
// Return the change status
return sts;
}
/**
* Set the host announcement interval, in minutes
*
* @param ival int
* @return int
* @exception InvalidConfigurationException
*/
public final int setHostAnnounceInterval(int ival)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBAnnceInterval, new Integer(ival));
m_announceInterval = ival;
// Return the change status
return sts;
}
/**
* Set the host announcer port
*
* @param port int
* @return int
* @exception InvalidConfigurationException
*/
public final int setHostAnnouncerPort(int port)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBAnncePort, new Integer(port));
m_announcePort = port;
// Return the change status
return sts;
}
/**
* Set the name server port to listen on.
*
* @param port int
* @return int
* @exception InvalidConfigurationException
*/
public final int setNameServerPort(int port)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.NetBIOSNamePort, new Integer(port));
m_namePort = port;
// Return the change status
return sts;
}
/**
* Set the name server datagram port
*
* @param port int
* @return int
* @exception InvalidConfigurationException
*/
public final int setDatagramPort(int port)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.NetBIOSDatagramPort, new Integer(port));
m_nbDatagramPort = port;
// Return the change status
return sts;
}
/**
* Enable/disable NetBIOS name server debug output
*
* @param ena boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setNetBIOSDebug(boolean ena)
throws InvalidConfigurationException {
// Check if the value has changed
int sts = ConfigurationListener.StsIgnored;
if ( m_nbDebug != ena) {
// Inform listeners, validate the configuration change
sts = fireConfigurationChange(ConfigId.NetBIOSDebugEnable, new Boolean(ena));
m_nbDebug = ena;
}
// Return the change status
return sts;
}
/**
* Enable/disable host announcement debug output
*
* @param ena boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setHostAnnounceDebug(boolean ena)
throws InvalidConfigurationException {
// Check if the value has changed
int sts = ConfigurationListener.StsIgnored;
if ( m_announceDebug != ena) {
// Inform listeners, validate the configuration change
sts = fireConfigurationChange(ConfigId.SMBAnnceDebug, new Boolean(ena));
m_announceDebug = ena;
}
// Return the change status
return sts;
}
/**
* Enable/disbale Macintosh extension SMBs
*
* @param ena boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setMacintoshExtensions(boolean ena)
throws InvalidConfigurationException {
// Check if the value has changed
int sts = ConfigurationListener.StsIgnored;
if ( m_macExtensions != ena) {
// Inform listeners, validate the configuration change
sts = fireConfigurationChange(ConfigId.SMBMacExtEnable, new Boolean(ena));
m_macExtensions = ena;
}
// Return the change status
return sts;
}
/**
* Set the server name.
*
* @param name java.lang.String
* @return int
* @exception InvalidConfigurationException
*/
public final int setServerName(String name)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBHostName, name);
m_name = name;
// Return the change status
return sts;
}
/**
* Add a server alias name
*
* @param alias String
* @return int
* @exception InvalidConfigurationException
*/
public final int addAliasName(String alias)
throws InvalidConfigurationException {
// Check if the alias name list has been allocated
if ( m_aliasNames == null)
m_aliasNames = new StringList();
// Check if the name already exists in the list
int sts = ConfigurationListener.StsIgnored;
if ( m_aliasNames.containsString(alias) == false) {
// Inform listeners of the change
sts = fireConfigurationChange(ConfigId.SMBAliasNames, alias);
m_aliasNames.addString(alias);
}
// Return the change status
return sts;
}
/**
* Add server alias names
*
* @param names StringListr
* @return int
* @exception InvalidConfigurationException
*/
public final int addAliasNames(StringList names)
throws InvalidConfigurationException {
// Check if the alias name list has been allocated
if ( m_aliasNames == null)
m_aliasNames = new StringList();
// Add the names to the alias list
int sts = ConfigurationListener.StsIgnored;
for ( int i = 0; i < names.numberOfStrings(); i++) {
// Add the current alias
String curAlias = names.getStringAt(i);
int curSts = addAliasName(curAlias);
// Keep the highest status
if ( curSts > sts)
sts = curSts;
}
// Return the change status
return sts;
}
/**
* Set the server type flags.
*
* @param typ int
* @return int
* @exception InvalidConfigurationException
*/
public final int setServerType(int typ)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBServerType, new Integer(typ));
m_srvType = typ;
// Return the change status
return sts;
}
/**
* Set the debug flags to be used by the server.
*
* @param flags int
* @return int
* @exception InvalidConfigurationException
*/
public final int setSessionDebugFlags(int flags)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBSessionDebug, new Integer(flags));
m_sessDebug = flags;
// Return the change status
return sts;
}
/**
* Set the session port to listen on for incoming session requests.
*
* @param port int
* @return int
* @exception InvalidConfigurationException
*/
public final int setSessionPort(int port)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.NetBIOSSessionPort, new Integer(port));
m_sessPort = port;
// Return the change status
return sts;
}
/**
* Enable/disable the NetBIOS SMB support
*
* @param ena boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setNetBIOSSMB(boolean ena)
throws InvalidConfigurationException {
// Check if the value has changed
int sts = ConfigurationListener.StsIgnored;
if ( m_netBIOSEnable != ena) {
// Inform listeners, validate the configuration change
sts = fireConfigurationChange(ConfigId.SMBNetBIOSEnable, new Boolean(ena));
m_netBIOSEnable = ena;
}
// Return the change status
return sts;
}
/**
* Enable/disable the TCP/IP SMB support
*
* @param ena boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setTcpipSMB(boolean ena)
throws InvalidConfigurationException {
// Check if the value has changed
int sts = ConfigurationListener.StsIgnored;
if ( m_tcpSMBEnable != ena) {
// Inform listeners, validate the configuration change
sts = fireConfigurationChange(ConfigId.SMBTCPEnable, new Boolean(ena));
m_tcpSMBEnable = ena;
}
// Return the change status
return sts;
}
/**
* Enable/disable the Win32 NetBIOS SMB support
*
* @param ena boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setWin32NetBIOS(boolean ena)
throws InvalidConfigurationException {
// Check if the value has changed
int sts = ConfigurationListener.StsIgnored;
if ( m_win32NBEnable != ena) {
// Inform listeners, validate the configuration change
sts = fireConfigurationChange(ConfigId.SMBWin32NetBIOS, new Boolean(ena));
m_win32NBEnable = ena;
}
// Return the change status
return sts;
}
/**
* Set the Win32 NetBIOS file server name
*
* @param name String
* @return int
* @exception InvalidConfigurationException
*/
public final int setWin32NetBIOSName(String name)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBWin32NBName, name);
m_win32NBName = name;
// Return the change status
return sts;
}
/**
* Set the Win32 NetBIOS accepted client name
*
* @param name String
* @return int
* @exception InvalidConfigurationException
*/
public final int setWin32NetBIOSClientAccept(String name)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBWin32NBAccept, name);
m_win32NBAccept = name;
// Return the change status
return sts;
}
/**
* Enable/disable the Win32 NetBIOS host announcer.
*
* @param b boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setWin32HostAnnouncer(boolean b)
throws InvalidConfigurationException {
// Check if the value has changed
int sts = ConfigurationListener.StsIgnored;
if ( m_win32NBAnnounce != b) {
// Inform listeners, validate the configuration change
sts = fireConfigurationChange(ConfigId.SMBWin32NBAnnounce, new Boolean(b));
m_win32NBAnnounce = b;
}
// Return the change status
return sts;
}
/**
* Set the Win32 LANA to be used by the Win32 NetBIOS interface
*
* @param ival int
* @return int
* @throws InvalidConfigurationException
*/
public final int setWin32LANA(int ival)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBWin32NBLana, new Integer(ival));
m_win32NBLANA = ival;
// Return the change status
return sts;
}
/**
* Set the Win32 NetBIOS host announcement interval, in minutes
*
* @param ival int
* @return int
* @exception InvalidConfigurationException
*/
public final int setWin32HostAnnounceInterval(int ival)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBWin32NBAnnounce, new Integer(ival));
m_win32NBAnnounceInterval = ival;
// Return the change status
return sts;
}
/**
* Set the Win32 NetBIOS interface to use either Winsock NetBIOS or the Netbios() API calls
*
* @param useWinsock boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setWin32WinsockNetBIOS(boolean useWinsock)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBWin32NBWinsock, new Boolean(useWinsock));
m_win32NBUseWinsock = useWinsock;
// Return the change status
return sts;
}
/**
* Set the TCP/IP SMB port
*
* @param port int
* @return int
* @exception InvalidConfigurationException
*/
public final int setTcpipSMBPort(int port)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBTCPPort, new Integer(port));
m_tcpSMBPort = port;
// Return the change status
return sts;
}
/**
* Set the primary WINS server address
*
* @param addr InetAddress
* @return int
* @exception InvalidConfigurationException
*/
public final int setPrimaryWINSServer(InetAddress addr)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.NetBIOSWINSPrimary, addr);
m_winsPrimary = addr;
// Return the change status
return sts;
}
/**
* Set the secondary WINS server address
*
* @param addr InetAddress
* @return int
* @exception InvalidConfigurationException
*/
public final int setSecondaryWINSServer(InetAddress addr)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.NetBIOSWINSSecondary, addr);
m_winsSecondary = addr;
// Return the change status
return sts;
}
/**
* Set the disable NIO code flag
*
* @param disableNIO boolean
* @return int
* @exception InvalidConfigurationException
*/
public final int setDisableNIOCode(boolean disableNIO)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBDisableNIO, new Boolean( disableNIO));
m_disableNIO = disableNIO;
// Return the change status
return sts;
}
/**
* et the client socket timeout, in milliseconds
*
* @param tmo int
* @return int
* @exception InvalidConfigurationException
*/
public final int setSocketTimeout(int tmo)
throws InvalidConfigurationException {
// Inform listeners, validate the configuration change
int sts = fireConfigurationChange(ConfigId.SMBSocketTimeout, new Integer(tmo));
m_clientSocketTimeout = tmo;
// Return the change status
return sts;
}
/**
* Set the native code disabled flag, to prevent calls to the Win32NetBIOS DLL
*
* @param noNative boolean
*/
public final void setNativeCodeDisabled(boolean noNative) {
m_disableNativeCode = noNative;
}
/**
* Close the configuration section
*/
public final void closeConfig() {
// Close the authenticator
if (m_authenticator != null && m_localAuthenticator)
{
m_authenticator.closeAuthenticator();
m_authenticator = null;
}
}
}