List of usage examples for java.net InetAddress getAllByName
public static InetAddress[] getAllByName(String host) throws UnknownHostException
From source file:com.mirth.connect.server.api.MirthServlet.java
private boolean isRequestLocal() { String remoteAddr = request.getRemoteAddr(); try {//from w w w. j a v a 2 s. c o m if (StringUtils.equals(InetAddress.getLocalHost().getHostAddress(), remoteAddr)) { return true; } } catch (UnknownHostException e) { } try { for (InetAddress inetAddress : InetAddress.getAllByName("localhost")) { if (StringUtils.equals(inetAddress.getHostAddress(), remoteAddr)) { return true; } } } catch (UnknownHostException e) { } return false; }
From source file:com.radicaldynamic.groupinform.services.DatabaseService.java
synchronized public ReplicationStatus replicate(String db, int mode) { final String tt = t + "replicate(): "; if (Collect.Log.DEBUG) Log.d(Collect.LOGTAG, tt + "about to replicate " + db); // Will not replicate unless signed in if (!Collect.getInstance().getIoService().isSignedIn()) { if (Collect.Log.DEBUG) Log.d(Collect.LOGTAG, tt + "aborting replication: not signed in"); return null; }/* ww w .jav a 2 s . c o m*/ if (Collect.getInstance().getInformOnlineState().isOfflineModeEnabled()) { if (Collect.Log.DEBUG) Log.d(Collect.LOGTAG, tt + "aborting replication: offline mode is enabled"); return null; } /* * Lookup master cluster by IP. Do this instead of relying on Erlang's internal resolver * (and thus Google's public DNS). Our builds of Erlang for Android do not yet use * Android's native DNS resolver. */ String masterClusterIP = null; try { InetAddress[] clusterInetAddresses = InetAddress .getAllByName(getString(R.string.tf_default_ionline_server)); masterClusterIP = clusterInetAddresses[new Random().nextInt(clusterInetAddresses.length)] .getHostAddress(); } catch (UnknownHostException e) { if (Collect.Log.ERROR) Log.e(Collect.LOGTAG, tt + "unable to lookup master cluster IP addresses: " + e.toString()); e.printStackTrace(); } // Create local instance of database boolean dbCreated = false; // User may not have connected to local database yet - start up the connection for them try { if (mLocalDbInstance == null) { connectToLocalServer(); } } catch (DbUnavailableException e) { if (Collect.Log.ERROR) Log.e(Collect.LOGTAG, tt + "cannot connect to local database server"); e.printStackTrace(); } if (mLocalDbInstance.getAllDatabases().indexOf("db_" + db) == -1) { switch (mode) { case REPLICATE_PULL: if (Collect.Log.INFO) Log.i(Collect.LOGTAG, tt + "creating local database " + db); mLocalDbInstance.createDatabase("db_" + db); dbCreated = true; break; case REPLICATE_PUSH: // If the database does not exist client side then there is no point in continuing if (Collect.Log.WARN) Log.w(Collect.LOGTAG, tt + "cannot find local database " + db + " to push"); return null; } } // Configure replication direction String source = null; String target = null; String deviceId = Collect.getInstance().getInformOnlineState().getDeviceId(); String deviceKey = Collect.getInstance().getInformOnlineState().getDeviceKey(); String localServer = "http://" + mLocalHost + ":" + mLocalPort + "/db_" + db; String remoteServer = "http://" + deviceId + ":" + deviceKey + "@" + masterClusterIP + ":5984/db_" + db; // Should we use encrypted transfers? SharedPreferences settings = PreferenceManager .getDefaultSharedPreferences(Collect.getInstance().getBaseContext()); if (settings.getBoolean(PreferencesActivity.KEY_ENCRYPT_SYNCHRONIZATION, true)) { remoteServer = "https://" + deviceId + ":" + deviceKey + "@" + masterClusterIP + ":6984/db_" + db; } switch (mode) { case REPLICATE_PUSH: source = localServer; target = remoteServer; break; case REPLICATE_PULL: source = remoteServer; target = localServer; break; } ReplicationCommand cmd = new ReplicationCommand.Builder().source(source).target(target).build(); ReplicationStatus status = null; try { status = mLocalDbInstance.replicate(cmd); } catch (Exception e) { // Remove a recently created DB if the replication failed if (dbCreated) { if (Collect.Log.ERROR) Log.e(Collect.LOGTAG, t + "replication exception: " + e.toString()); e.printStackTrace(); mLocalDbInstance.deleteDatabase("db_" + db); } } return status; }
From source file:co.runrightfast.vertx.demo.testHarness.jmx.DemoMXBeanImpl.java
@Override public String[] getIPAddresses(final String host) { try {//w w w . j a v a 2 s. co m return Arrays.stream(InetAddress.getAllByName(host)).map(InetAddress::getHostAddress) .toArray(String[]::new); } catch (UnknownHostException ex) { throw new RuntimeException(ex); } }
From source file:com.ebay.jetstream.messaging.transport.zookeeper.ZooKeeperTransport.java
private String findDNSResolvableZkHosts(String origCnxnStr) { String[] hostporttuple = origCnxnStr.split(","); StringBuffer newcnxStr = new StringBuffer(); int count = 1; //reset resolvable list m_resolvablehosts.clear();//from w w w .j a v a2 s . c o m m_nonresolvablehosts.clear(); for (String hostport : hostporttuple) { String host = hostport.split(":")[0]; String port = hostport.split(":")[1]; try { InetAddress.getAllByName(host); if (count != 1) newcnxStr.append(","); newcnxStr.append(host); newcnxStr.append(":"); newcnxStr.append(port); m_resolvablehosts.add(host); count++; } catch (UnknownHostException ukhe) { String trace = ExceptionUtils.getStackTrace(ukhe); m_nonresolvablehosts.add(host); LOGGER.error(" Non Resolvable HostName : " + host + " : " + trace); } catch (Throwable t) { String trace = ExceptionUtils.getStackTrace(t); m_nonresolvablehosts.add(host); LOGGER.error(" Got other exception while resolving hostname : " + host + " : " + trace); } } return newcnxStr.toString(); }
From source file:nl.strohalm.cyclos.services.services.ServiceClientServiceImpl.java
private boolean resolveAddress(final ServiceClient client) { final String hostname = client.getHostname(); final AddressType addressType = InternetAddressHelper.resolveAddressType(hostname); if (addressType == null) { // Invalid ?!? return false; }//w ww. j a v a2 s . co m final String addressBegin = client.getAddressBegin(); final String addressEnd = client.getAddressBegin(); switch (addressType) { case HOSTNAME: try { // Resolve the ip address final InetAddress[] addr = InetAddress.getAllByName(hostname); final String ip = InternetAddressHelper.padAddress(addr[0].getHostAddress()); client.setAddressBegin(ip); client.setAddressEnd(ip); } catch (final UnknownHostException e) { // Error resolving ip address. Leave the previous one } break; case SIMPLE_IP: // It's a fixed ip final String paddedAddress = InternetAddressHelper.padAddress(hostname); client.setAddressBegin(paddedAddress); client.setAddressEnd(paddedAddress); break; case IP_RANGE: // An ip range final String[] range = InternetAddressHelper.getRangeBoundaries(hostname); client.setAddressBegin(InternetAddressHelper.padAddress(range[0])); client.setAddressEnd(InternetAddressHelper.padAddress(range[1])); break; } return !ObjectUtils.equals(client.getAddressBegin(), addressBegin) || !ObjectUtils.equals(client.getAddressEnd(), addressEnd); }
From source file:edu.amc.sakai.user.PooledLDAPConnectionFactory.java
/** * Get the host to connect to. Attempt to resolve all addresses for a hostname when round robin DNS * is used.//w w w .j ava 2s .com * * We do this resolution low down in the stack as we don't want the results cached at all. * Unless configured otherwise the JVM will cache DNS lookups. Even if this is just for 30 seconds * (default in 1.6/1.7) it means when the pool is getting prebuilt at startup the connections will * all point to the same server. * * @return A hostname or a space separated string of IP addresses to connect to. */ protected String getHost() { List<InetAddress> addresses = new ArrayList<InetAddress>(); // The host may already be space separated. StringTokenizer hosts = new StringTokenizer(host, " "); while (hosts.hasMoreTokens()) { try { addresses.addAll(Arrays.asList(InetAddress.getAllByName(hosts.nextToken()))); } catch (UnknownHostException e) { if (log.isDebugEnabled()) { log.debug("Failed to resolve " + host + " not handling now, will deal with later."); } } } if (addresses.size() > 1) { StringBuilder resolvedHosts = new StringBuilder(); // So that we don't always connect to the same host. // Is need on platforms that don't do round robin DNS well. Collections.shuffle(addresses); for (InetAddress address : addresses) { resolvedHosts.append(address.getHostAddress() + " "); } return resolvedHosts.toString(); } else { // Just return the configured hostname and let it be resolved when making the connection. return host; } }
From source file:com.bigstep.datalake.DLFileSystem.java
private URI selectDatalakeEndpointURI(URI uri, Configuration conf) throws UnknownHostException { String dataLakeDatanodesDomain = conf.get(FS_DL_IMPL_DATALAKE_DATANODES_DOMAIN); InetAddress addresses[] = InetAddress.getAllByName(dataLakeDatanodesDomain); ArrayList<String> datalakeEndpoints = new ArrayList<String>(); for (InetAddress address : addresses) { datalakeEndpoints.add(address.getCanonicalHostName()); }/*from w w w. j av a2 s. co m*/ int rnd = new Random().nextInt(addresses.length); String homeDirectory = conf.get(FS_DL_IMPL_HOME_DIRECTORY); return URI.create("dl://" + datalakeEndpoints.get(rnd) + ":" + DATALAKE_PORT + homeDirectory); }
From source file:studio.ui.Studio.java
private void createConnectionsTree() { if (treeConnections == null) { treeConnections = new KdbServicesTree(tabEditors); tools.setConnectionsView((KdbServicesTree) treeConnections); tabEditors.addFireDataListener((DataListener) treeConnections); }/*from ww w .j a va 2 s .c om*/ DefaultMutableTreeNode top = null; if (!(treeConnections.getModel() instanceof DefaultMutableTreeNode)) { top = new DefaultMutableTreeNode("KDB+ servers"); treeConnections.setModel(new KdbServicesTreeModel(top)); treeConnections.setCellRenderer(new KdbServicesTreeCellRender()); Collection<String> hostnames = studioConfig.getHosts(); if (hostnames != null && !hostnames.isEmpty()) { for (String hostname : hostnames) { try { InetAddress.getAllByName(hostname); top.add(new HostTreeNode(hostname, studioConfig.getConnections(hostname))); } catch (UnknownHostException ignored) { } } } } treeConnections.expandPath(new TreePath(top)); treeConnections.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); }
From source file:com.groupon.odo.proxylib.BackupService.java
/** * Get a list of strings(scheme + host + port) that the specified connector is running on * * @param name/*from w w w . j av a 2 s. co m*/ * @return */ private ArrayList<String> getConnectorStrings(String name) { ArrayList<String> connectorStrings = new ArrayList<String>(); try { MBeanServer mbeanServer = getServerForName(name); Set<ObjectName> objs = mbeanServer.queryNames(new ObjectName("*:type=Connector,*"), null); String hostname = InetAddress.getLocalHost().getHostName(); InetAddress[] addresses = InetAddress.getAllByName(hostname); for (Iterator<ObjectName> i = objs.iterator(); i.hasNext();) { ObjectName obj = i.next(); String scheme = mbeanServer.getAttribute(obj, "scheme").toString(); String port = obj.getKeyProperty("port"); connectorStrings.add(scheme + "://localhost:" + port); logger.info("Adding: {}", scheme + "://localhost:" + port); } } catch (Exception e) { } return connectorStrings; }
From source file:org.alfresco.filesys.config.ServerConfigurationBean.java
/** * Process the CIFS server configuration *///from www . j a v a 2s . c o m protected void processCIFSServerConfig() { // If the configuration section is not valid then CIFS is disabled if (cifsConfigBean == null) { removeConfigSection(CIFSConfigSection.SectionName); return; } // Check if the server has been disabled if (!cifsConfigBean.getServerEnabled()) { removeConfigSection(CIFSConfigSection.SectionName); return; } // Before we go any further, let's make sure there's a compatible authenticator in the authentication chain. ICifsAuthenticator authenticator = cifsConfigBean.getAuthenticator(); if (authenticator == null || authenticator instanceof ActivateableBean && !((ActivateableBean) authenticator).isActive()) { logger.error("No enabled CIFS authenticator found in authentication chain. CIFS Server disabled"); removeConfigSection(CIFSConfigSection.SectionName); return; } // Create the CIFS server configuration section CIFSConfigSection cifsConfig = new CIFSConfigSection(this); try { // Check if native code calls should be disabled on Windows if (cifsConfigBean.getDisableNativeCode()) { // Disable native code calls so that the JNI DLL is not required cifsConfig.setNativeCodeDisabled(true); m_disableNativeCode = true; // Warning logger.warn("CIFS server native calls disabled, JNI code will not be used"); } // Get the network broadcast address // // Note: We need to set this first as the call to getLocalDomainName() may use a NetBIOS // name lookup, so the broadcast mask must be set before then. String broadcastAddess = cifsConfigBean.getBroadcastAddress(); if (broadcastAddess != null && broadcastAddess.length() > 0) { // Check if the broadcast mask is a valid numeric IP address if (IPAddress.isNumericAddress(broadcastAddess) == false) { throw new AlfrescoRuntimeException("CIFS Invalid broadcast mask, must be n.n.n.n format"); } // Set the network broadcast mask cifsConfig.setBroadcastMask(broadcastAddess); } // Get the terminal server address List<String> terminalServerList = cifsConfigBean.getTerminalServerList(); if (terminalServerList != null && terminalServerList.size() > 0) { // Check if the terminal server address is a valid numeric IP address for (String terminalServerAddress : terminalServerList) { if (IPAddress.isNumericAddress(terminalServerAddress) == false) throw new AlfrescoRuntimeException( "Invalid terminal server address, must be n.n.n.n format"); } // Set the terminal server address cifsConfig.setTerminalServerList(terminalServerList); } // Get the load balancer address List<String> loadBalancerList = cifsConfigBean.getLoadBalancerList(); if (loadBalancerList != null && loadBalancerList.size() > 0) { // Check if the load balancer address is a valid numeric IP address for (String loadBalancerAddress : loadBalancerList) { if (IPAddress.isNumericAddress(loadBalancerAddress) == false) throw new AlfrescoRuntimeException("Invalid load balancer address, must be n.n.n.n format"); } // Set the terminal server address cifsConfig.setLoadBalancerList(loadBalancerList); } // Get the host configuration String hostName = cifsConfigBean.getServerName(); if (hostName == null || hostName.length() == 0) { throw new AlfrescoRuntimeException("CIFS Host name not specified or invalid"); } // Get the local server name String srvName = getLocalServerName(true); // Check if the host name contains the local name token int pos = hostName.indexOf(TokenLocalName); if (pos != -1) { // Rebuild the host name substituting the token with the local server name StringBuilder hostStr = new StringBuilder(); hostStr.append(hostName.substring(0, pos)); hostStr.append(srvName); pos += TokenLocalName.length(); if (pos < hostName.length()) { hostStr.append(hostName.substring(pos)); } hostName = hostStr.toString(); } // Make sure the CIFS server name does not match the local server name if (hostName.toUpperCase().equals(srvName.toUpperCase()) && getPlatformType() == Platform.Type.WINDOWS) { throw new AlfrescoRuntimeException("CIFS server name must be unique"); } // Check if the host name is longer than 15 characters. NetBIOS only allows a maximum of 16 characters in // the // server name with the last character reserved for the service type. if (hostName.length() > 15) { // Truncate the CIFS server name hostName = hostName.substring(0, 15); // Output a warning logger.warn("CIFS server name is longer than 15 characters, truncated to " + hostName); } // Set the CIFS server name cifsConfig.setServerName(hostName.toUpperCase()); setServerName(hostName.toUpperCase()); // Get the domain/workgroup name String domain = cifsConfigBean.getDomainName(); if (domain != null && domain.length() > 0) { // Set the domain/workgroup name cifsConfig.setDomainName(domain.toUpperCase()); } else { // Get the local domain/workgroup name String localDomain = getLocalDomainName(); if (localDomain == null && (getPlatformType() != Platform.Type.WINDOWS || isNativeCodeDisabled())) { // Use a default domain/workgroup name localDomain = "WORKGROUP"; // Output a warning logger.warn("CIFS, Unable to get local domain/workgroup name, using default of " + localDomain + ". This may be due to firewall settings or incorrect <broadcast> setting)"); } // Set the local domain/workgroup that the CIFS server belongs to cifsConfig.setDomainName(localDomain); } // Check for a server comment String comment = cifsConfigBean.getServerComment(); if (comment != null && comment.length() > 0) { cifsConfig.setComment(comment); } // Set the maximum virtual circuits per session if (cifsConfigBean.getMaximumVirtualCircuits() < VirtualCircuitList.MinCircuits || cifsConfigBean.getMaximumVirtualCircuits() > VirtualCircuitList.MaxCircuits) throw new AlfrescoRuntimeException("Invalid virtual circuits value, valid range is " + VirtualCircuitList.MinCircuits + " - " + VirtualCircuitList.MaxCircuits); else cifsConfig.setMaximumVirtualCircuits(cifsConfigBean.getMaximumVirtualCircuits()); // Check for a bind address // Check if the network adapter name has been specified String bindToAdapter = cifsConfigBean.getBindToAdapter(); String bindTo; if (bindToAdapter != null && bindToAdapter.length() > 0) { // Get the IP address for the adapter InetAddress bindAddr = parseAdapterName(bindToAdapter); // Set the bind address for the server cifsConfig.setSMBBindAddress(bindAddr); } else if ((bindTo = cifsConfigBean.getBindToAddress()) != null && bindTo.length() > 0 && !bindTo.equals(BIND_TO_IGNORE)) { // Validate the bind address try { // Check the bind address InetAddress bindAddr = InetAddress.getByName(bindTo); // Set the bind address for the server cifsConfig.setSMBBindAddress(bindAddr); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("CIFS Unable to bind to address :" + bindTo, ex); } } // Get the authenticator if (authenticator != null) { cifsConfig.setAuthenticator(authenticator); } else { throw new AlfrescoRuntimeException("CIFS authenticator not specified"); } // Check if the host announcer has been disabled if (!cifsConfigBean.getHostAccouncerEnabled()) { // Switch off the host announcer cifsConfig.setHostAnnouncer(false); // Log that host announcements are not enabled logger.info("CIFS Host announcements not enabled"); } else { // Check for an announcement interval Integer interval = cifsConfigBean.getHostAccounceInterval(); if (interval != null) { cifsConfig.setHostAnnounceInterval(interval); } // Check if the domain name has been set, this is required if the // host announcer is enabled if (cifsConfig.getDomainName() == null) { throw new AlfrescoRuntimeException( "CIFS Domain name must be specified if host announcement is enabled"); } // Enable host announcement cifsConfig.setHostAnnouncer(true); } // Check if NetBIOS SMB is enabled NetBIOSSMBConfigBean netBIOSSMBConfigBean = cifsConfigBean.getNetBIOSSMB(); if (netBIOSSMBConfigBean != null) { // Check if NetBIOS over TCP/IP is enabled for the current platform String platformsStr = netBIOSSMBConfigBean.getPlatforms(); boolean platformOK = false; if (platformsStr != null && platformsStr.length() > 0) { // Parse the list of platforms that NetBIOS over TCP/IP is to be enabled for and // check if the current platform is included EnumSet<Platform.Type> enabledPlatforms = parsePlatformString(platformsStr); if (enabledPlatforms.contains(getPlatformType())) platformOK = true; } else { // No restriction on platforms platformOK = true; } // Enable the NetBIOS SMB support, if enabled for this platform cifsConfig.setNetBIOSSMB(platformOK); // Parse/check NetBIOS settings, if enabled if (cifsConfig.hasNetBIOSSMB()) { // Check if the broadcast mask has been specified if (cifsConfig.getBroadcastMask() == null) { throw new AlfrescoRuntimeException("CIFS Network broadcast mask not specified"); } // Check for a bind address String bindto = netBIOSSMBConfigBean.getBindTo(); if (bindto != null && bindto.length() > 0 && !bindto.equals(BIND_TO_IGNORE)) { // Validate the bind address try { // Check the bind address InetAddress bindAddr = InetAddress.getByName(bindto); // Set the bind address for the NetBIOS name server cifsConfig.setNetBIOSBindAddress(bindAddr); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("CIFS Invalid NetBIOS bind address:" + bindto, ex); } } else if (cifsConfig.hasSMBBindAddress()) { // Use the SMB bind address for the NetBIOS name server cifsConfig.setNetBIOSBindAddress(cifsConfig.getSMBBindAddress()); } else { // Get a list of all the local addresses InetAddress[] addrs = null; try { // Get the local server IP address list addrs = InetAddress.getAllByName(InetAddress.getLocalHost().getHostName()); } catch (UnknownHostException ex) { logger.error("CIFS Failed to get local address list", ex); } // Check the address list for one or more valid local addresses filtering out the loopback // address int addrCnt = 0; if (addrs != null) { for (int i = 0; i < addrs.length; i++) { // Check for a valid address, filter out '127.0.0.1' and '0.0.0.0' addresses if (addrs[i].getHostAddress().equals("127.0.0.1") == false && addrs[i].getHostAddress().equals("0.0.0.0") == false) addrCnt++; } } // Check if any addresses were found if (addrCnt == 0) { // Enumerate the network adapter list Enumeration<NetworkInterface> niEnum = null; try { niEnum = NetworkInterface.getNetworkInterfaces(); } catch (SocketException ex) { } if (niEnum != null) { while (niEnum.hasMoreElements()) { // Get the current network interface NetworkInterface ni = niEnum.nextElement(); // Enumerate the addresses for the network adapter Enumeration<InetAddress> niAddrs = ni.getInetAddresses(); if (niAddrs != null) { // Check for any valid addresses while (niAddrs.hasMoreElements()) { InetAddress curAddr = niAddrs.nextElement(); if (curAddr.getHostAddress().equals("127.0.0.1") == false && curAddr.getHostAddress().equals("0.0.0.0") == false) addrCnt++; } } } // DEBUG if (addrCnt > 0 && logger.isDebugEnabled()) logger.debug("Found valid IP address from interface list"); } // Check if we found any valid network addresses if (addrCnt == 0) { // Log the available IP addresses if (logger.isDebugEnabled()) { logger.debug("Local address list dump :-"); if (addrs != null) { for (int i = 0; i < addrs.length; i++) logger.debug(" Address: " + addrs[i]); } else { logger.debug(" No addresses"); } } // Throw an exception to stop the CIFS/NetBIOS name server from starting throw new AlfrescoRuntimeException( "Failed to get IP address(es) for the local server, check hosts file and/or DNS setup"); } } } // Check if the session port has been specified Integer portNum = netBIOSSMBConfigBean.getSessionPort(); if (portNum != null) { cifsConfig.setSessionPort(portNum); if (cifsConfig.getSessionPort() <= 0 || cifsConfig.getSessionPort() >= 65535) throw new AlfrescoRuntimeException("NetBIOS session port out of valid range"); } // Check if the name port has been specified portNum = netBIOSSMBConfigBean.getNamePort(); if (portNum != null) { cifsConfig.setNameServerPort(portNum); if (cifsConfig.getNameServerPort() <= 0 || cifsConfig.getNameServerPort() >= 65535) throw new AlfrescoRuntimeException("NetBIOS name port out of valid range"); } // Check if the datagram port has been specified portNum = netBIOSSMBConfigBean.getDatagramPort(); if (portNum != null) { cifsConfig.setDatagramPort(portNum); if (cifsConfig.getDatagramPort() <= 0 || cifsConfig.getDatagramPort() >= 65535) throw new AlfrescoRuntimeException("NetBIOS datagram port out of valid range"); } // Check for a bind address String attr = netBIOSSMBConfigBean.getBindTo(); if (attr != null && attr.length() > 0 && !attr.equals(BIND_TO_IGNORE)) { // Validate the bind address try { // Check the bind address InetAddress bindAddr = InetAddress.getByName(attr); // Set the bind address for the NetBIOS name server cifsConfig.setNetBIOSBindAddress(bindAddr); } catch (UnknownHostException ex) { throw new InvalidConfigurationException(ex.toString()); } } // Check for a bind address using the adapter name else if ((attr = netBIOSSMBConfigBean.getAdapter()) != null && attr.length() > 0) { // Get the bind address via the network adapter name InetAddress bindAddr = parseAdapterName(attr); cifsConfig.setNetBIOSBindAddress(bindAddr); } else if (cifsConfig.hasSMBBindAddress()) { // Use the SMB bind address for the NetBIOS name server cifsConfig.setNetBIOSBindAddress(cifsConfig.getSMBBindAddress()); } } } else { // Disable NetBIOS SMB support cifsConfig.setNetBIOSSMB(false); } // Check if TCP/IP SMB is enabled TcpipSMBConfigBean tcpipSMBConfigBean = cifsConfigBean.getTcpipSMB(); if (tcpipSMBConfigBean != null) { // Check if native SMB is enabled for the current platform String platformsStr = tcpipSMBConfigBean.getPlatforms(); boolean platformOK = false; if (platformsStr != null) { // Parse the list of platforms that native SMB is to be enabled for and // check if the current platform is included EnumSet<Platform.Type> enabledPlatforms = parsePlatformString(platformsStr); if (enabledPlatforms.contains(getPlatformType())) platformOK = true; } else { // No restriction on platforms platformOK = true; } // Enable the TCP/IP SMB support, if enabled for this platform cifsConfig.setTcpipSMB(platformOK); // Check if the port has been specified Integer portNum = tcpipSMBConfigBean.getPort(); if (portNum != null) { cifsConfig.setTcpipSMBPort(portNum); if (cifsConfig.getTcpipSMBPort() <= 0 || cifsConfig.getTcpipSMBPort() >= 65535) throw new AlfrescoRuntimeException("TCP/IP SMB port out of valid range"); } // Check if IPv6 support should be enabled if (tcpipSMBConfigBean.getIpv6Enabled()) { try { // Use the IPv6 bind all address cifsConfig.setSMBBindAddress(InetAddress.getByName("::")); // DEBUG if (logger.isInfoEnabled()) { logger.info("Enabled CIFS IPv6 bind address for native SMB"); } } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException( "CIFS Failed to enable IPv6 bind address, " + ex.getMessage()); } } } else { // Disable TCP/IP SMB support cifsConfig.setTcpipSMB(false); } // Check if Win32 NetBIOS is enabled Win32NetBIOSConfigBean win32NetBIOSConfigBean = cifsConfigBean.getWin32NetBIOS(); if (win32NetBIOSConfigBean != null) { // Check if the Win32 NetBIOS server name has been specified String win32Name = win32NetBIOSConfigBean.getName(); if (win32Name != null && win32Name.length() > 0) { // Validate the name if (win32Name.length() > 16) throw new AlfrescoRuntimeException("Invalid Win32 NetBIOS name, " + win32Name); // Set the Win32 NetBIOS file server name cifsConfig.setWin32NetBIOSName(win32Name); } // Check if the Win32 NetBIOS LANA has been specified String lanaStr = win32NetBIOSConfigBean.getLana(); if (lanaStr != null && lanaStr.length() > 0) { // Check if the LANA has been specified as an IP address or adapter name int lana = -1; if (IPAddress.isNumericAddress(lanaStr)) { // Convert the IP address to a LANA id lana = Win32NetBIOS.getLANAForIPAddress(lanaStr); if (lana == -1) throw new AlfrescoRuntimeException( "Failed to convert IP address " + lanaStr + " to a LANA"); } else if (lanaStr.length() > 1 && Character.isLetter(lanaStr.charAt(0))) { // Convert the network adapter to a LANA id lana = Win32NetBIOS.getLANAForAdapterName(lanaStr); if (lana == -1) throw new AlfrescoRuntimeException( "Failed to convert network adapter " + lanaStr + " to a LANA"); } else { try { lana = Integer.parseInt(lanaStr); } catch (NumberFormatException ex) { throw new AlfrescoRuntimeException("Invalid win32 NetBIOS LANA specified"); } } // LANA should be in the range 0-255 if (lana < 0 || lana > 255) throw new AlfrescoRuntimeException("Invalid Win32 NetBIOS LANA number, " + lana); // Set the LANA number cifsConfig.setWin32LANA(lana); } // Check if the native NetBIOS interface has been specified, either 'winsock' or 'netbios' String nativeAPI = win32NetBIOSConfigBean.getApi(); if (nativeAPI != null && nativeAPI.length() > 0) { // Validate the API type boolean useWinsock = true; if (nativeAPI.equalsIgnoreCase("netbios")) useWinsock = false; else if (nativeAPI.equalsIgnoreCase("winsock") == false) throw new AlfrescoRuntimeException( "Invalid NetBIOS API type, spefify 'winsock' or 'netbios'"); // Set the NetBIOS API to use cifsConfig.setWin32WinsockNetBIOS(useWinsock); } // Force the older NetBIOS API code to be used on 64Bit Windows if (cifsConfig.useWinsockNetBIOS() == true && X64.isWindows64()) { // Debug if (logger.isDebugEnabled()) logger.debug("Using older Netbios() API code"); // Use the older NetBIOS API code cifsConfig.setWin32WinsockNetBIOS(false); } // Check if the current operating system is supported by the Win32 // NetBIOS handler String osName = System.getProperty("os.name"); if (osName.startsWith("Windows") && (osName.endsWith("95") == false && osName.endsWith("98") == false && osName.endsWith("ME") == false) && isNativeCodeDisabled() == false) { // Call the Win32NetBIOS native code to make sure it is initialized if (Win32NetBIOS.LanaEnumerate() != null) { // Enable Win32 NetBIOS cifsConfig.setWin32NetBIOS(true); } else { logger.warn("No NetBIOS LANAs available"); } } else { // Win32 NetBIOS not supported on the current operating system cifsConfig.setWin32NetBIOS(false); } } else { // Disable Win32 NetBIOS cifsConfig.setWin32NetBIOS(false); } // Check if the Win32 host announcer has been disabled if (!cifsConfigBean.getWin32HostAnnouncerEnabled()) { // Switch off the Win32 host announcer cifsConfig.setWin32HostAnnouncer(false); // Log that host announcements are not enabled logger.info("Win32 host announcements not enabled"); } else { // Check for an announcement interval Integer interval = cifsConfigBean.getWin32HostAnnounceInterval(); if (interval != null) { cifsConfig.setWin32HostAnnounceInterval(interval); } // Check if the domain name has been set, this is required if the // host announcer is enabled if (cifsConfig.getDomainName() == null) throw new AlfrescoRuntimeException( "Domain name must be specified if host announcement is enabled"); // Enable Win32 NetBIOS host announcement cifsConfig.setWin32HostAnnouncer(true); } // Check if NetBIOS and/or TCP/IP SMB have been enabled if (cifsConfig.hasNetBIOSSMB() == false && cifsConfig.hasTcpipSMB() == false && cifsConfig.hasWin32NetBIOS() == false) throw new AlfrescoRuntimeException("NetBIOS SMB, TCP/IP SMB or Win32 NetBIOS must be enabled"); // Check if WINS servers are configured WINSConfigBean winsConfigBean = cifsConfigBean.getWINSConfig(); if (winsConfigBean != null && !winsConfigBean.isAutoDetectEnabled()) { // Get the primary WINS server String priWins = winsConfigBean.getPrimary(); if (priWins == null || priWins.length() == 0) throw new AlfrescoRuntimeException("No primary WINS server configured"); // Validate the WINS server address InetAddress primaryWINS = null; try { primaryWINS = InetAddress.getByName(priWins); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("Invalid primary WINS server address, " + priWins); } // Check if a secondary WINS server has been specified String secWins = winsConfigBean.getSecondary(); InetAddress secondaryWINS = null; if (secWins != null && secWins.length() > 0) { // Validate the secondary WINS server address try { secondaryWINS = InetAddress.getByName(secWins); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("Invalid secondary WINS server address, " + secWins); } } // Set the WINS server address(es) cifsConfig.setPrimaryWINSServer(primaryWINS); if (secondaryWINS != null) cifsConfig.setSecondaryWINSServer(secondaryWINS); // Pass the setting to the NetBIOS session class NetBIOSSession.setDefaultWINSServer(primaryWINS); } // Check if WINS is configured, if we are running on Windows and socket based NetBIOS is enabled else if (cifsConfig.hasNetBIOSSMB() && getPlatformType() == Platform.Type.WINDOWS && !isNativeCodeDisabled()) { // Get the WINS server list String winsServers = Win32NetBIOS.getWINSServerList(); if (winsServers != null) { // Use the first WINS server address for now StringTokenizer tokens = new StringTokenizer(winsServers, ","); String addr = tokens.nextToken(); try { // Convert to a network address and check if the WINS server is accessible InetAddress winsAddr = InetAddress.getByName(addr); Socket winsSocket = new Socket(); InetSocketAddress sockAddr = new InetSocketAddress(winsAddr, RFCNetBIOSProtocol.NAME_PORT); winsSocket.connect(sockAddr, 3000); winsSocket.close(); // Set the primary WINS server address cifsConfig.setPrimaryWINSServer(winsAddr); // Debug if (logger.isDebugEnabled()) logger.debug("Configuring to use WINS server " + addr); } catch (UnknownHostException ex) { throw new AlfrescoRuntimeException("Invalid auto WINS server address, " + addr); } catch (IOException ex) { if (logger.isDebugEnabled()) logger.debug("Failed to connect to auto WINS server " + addr); } } } // Check for session debug flags String flags = cifsConfigBean.getSessionDebugFlags(); int sessDbg = 0; if (flags != null && flags.length() > 0) { // Parse the flags flags = flags.toUpperCase(); StringTokenizer token = new StringTokenizer(flags, ","); while (token.hasMoreTokens()) { // Get the current debug flag token String dbg = token.nextToken().trim(); // Find the debug flag name int idx = 0; while (idx < m_sessDbgStr.length && m_sessDbgStr[idx].equalsIgnoreCase(dbg) == false) idx++; if (idx > m_sessDbgStr.length) throw new AlfrescoRuntimeException("Invalid session debug flag, " + dbg); // Set the debug flag sessDbg += 1 << idx; } } // Set the session debug flags cifsConfig.setSessionDebugFlags(sessDbg); // Check if NIO based socket code should be disabled if (cifsConfigBean.getDisableNIO()) { // Disable NIO based code cifsConfig.setDisableNIOCode(true); // DEBUG if (logger.isDebugEnabled()) logger.debug("NIO based code disabled for CIFS server"); } // Check if a session timeout is configured Integer tmo = cifsConfigBean.getSessionTimeout(); if (tmo != null) { // Validate the session timeout value cifsConfigBean.validateSessionTimeout(tmo); // Convert the session timeout to milliseconds cifsConfig.setSocketTimeout(tmo * 1000); } } catch (InvalidConfigurationException ex) { throw new AlfrescoRuntimeException(ex.getMessage()); } }