private static void parseIpv6(AddressMatcher matcher, String addrs) { String address = addrs; if (address.indexOf('%') > -1) { String[] parts = address.split("\\%"); address = parts[0]; } final String[] parts = address.split("((?<=:)|(?=:))"); final Collection<String> ipString = parseIPV6parts(parts, address); if (ipString.size() != IPV6_LENGTH) { throw new InvalidAddressException(address); } final String[] addressParts = ipString.toArray(new String[0]); checkIfAddressPartsAreValid(addressParts, address); matcher.setAddress(addressParts); }
public static InetAddress fixScopeIdAndGetInetAddress(final InetAddress inetAddress) throws SocketException { if (!(inetAddress instanceof Inet6Address)) { return inetAddress; } if (!inetAddress.isLinkLocalAddress() && !inetAddress.isSiteLocalAddress()) { return inetAddress; } final Inet6Address inet6Address = (Inet6Address) inetAddress; if (inet6Address.getScopeId() > 0 || inet6Address.getScopedInterface() != null) { return inetAddress; } final Inet6Address resultInetAddress = findRealInet6Address(inet6Address); return resultInetAddress == null ? inetAddress : resultInetAddress; }
public static AddressHolder getAddressHolder(String address) { return getAddressHolder(address, -1); }
final NetworkConfig networkConfig = config.getNetworkConfig(); for (String possibleMember : possibleMembers) { AddressHolder addressHolder = AddressUtil.getAddressHolder(possibleMember); try { boolean portIsDefined = addressHolder.getPort() != -1 || !networkConfig.isPortAutoIncrement(); AddressMatcher addressMatcher = null; try { addressMatcher = AddressUtil.getAddressMatcher(addressHolder.getAddress()); } catch (InvalidAddressException ignore) { ignore(ignore); final Collection<String> matchedAddresses; if (addressMatcher.isIPv4()) { matchedAddresses = AddressUtil.getMatchingIpv4Addresses(addressMatcher); } else { final InetAddress[] inetAddresses = InetAddress.getAllByName(host); for (InetAddress inetAddress : inetAddresses) { if (AddressUtil.matchAnyInterface(inetAddress.getHostAddress(), interfaces.getInterfaces())) { addPossibleAddresses(possibleAddresses, host, inetAddress, port, count);
private Address getRequiredMemberAddress() { TcpIpConfig tcpIpConfig = config.getNetworkConfig().getJoin().getTcpIpConfig(); String host = tcpIpConfig.getRequiredMember(); try { AddressHolder addressHolder = AddressUtil.getAddressHolder(host, config.getNetworkConfig().getPort()); if (AddressUtil.isIpAddress(addressHolder.getAddress())) { return new Address(addressHolder.getAddress(), addressHolder.getPort()); } InterfacesConfig interfaces = config.getNetworkConfig().getInterfaces(); if (interfaces.isEnabled()) { InetAddress[] inetAddresses = InetAddress.getAllByName(addressHolder.getAddress()); if (inetAddresses.length > 1) { for (InetAddress inetAddress : inetAddresses) { if (AddressUtil.matchAnyInterface(inetAddress.getHostAddress(), interfaces.getInterfaces())) { return new Address(inetAddress, addressHolder.getPort()); } } } else if (AddressUtil.matchAnyInterface(inetAddresses[0].getHostAddress(), interfaces.getInterfaces())) { return new Address(addressHolder.getAddress(), addressHolder.getPort()); } } else { return new Address(addressHolder.getAddress(), addressHolder.getPort()); } } catch (final Exception e) { logger.warning(e); } return null; }
private Map<String, String> createAddressToDomainMap(TcpIpConfig tcpIpConfig) { if (!tcpIpConfig.isEnabled()) { return Collections.emptyMap(); } Collection<String> possibleAddresses = TcpIpJoiner.getConfigurationMembers(config); // LinkedHashMap is to guarantee order Map<String, String> addressDomainMap = createLinkedHashMap(possibleAddresses.size()); for (String possibleAddress : possibleAddresses) { String addressHolder = AddressUtil.getAddressHolder(possibleAddress).getAddress(); if (AddressUtil.isIpAddress(addressHolder)) { // there may be a domain registered for this address if (!addressDomainMap.containsKey(addressHolder)) { addressDomainMap.put(addressHolder, null); } } else { try { Collection<String> addresses = resolveDomainNames(addressHolder); for (String address : addresses) { addressDomainMap.put(address, addressHolder); } } catch (UnknownHostException e) { logger.warning("Cannot resolve hostname: '" + addressHolder + "'"); } } } return addressDomainMap; }
public static boolean isIpAddress(String address) { try { getAddressMatcher(address); return true; } catch (InvalidAddressException e) { return false; } }
private Collection<Integer> getOutboundPorts(ClientNetworkConfig networkConfig) { Collection<Integer> outboundPorts = networkConfig.getOutboundPorts(); Collection<String> outboundPortDefinitions = networkConfig.getOutboundPortDefinitions(); return AddressUtil.getOutboundPorts(outboundPorts, outboundPortDefinitions); }
final Collection<Inet6Address> possibleInetAddresses = getPossibleInetAddressesFor((Inet6Address) inetAddress); for (Inet6Address inet6Address : possibleInetAddresses) { for (int i = 0; i < portTryCount; i++) {
private AddressDefinition pickAddressDef() throws UnknownHostException, SocketException { AddressDefinition addressDef = getSystemConfiguredAddress(); if (addressDef == null) { addressDef = pickInterfaceAddressDef(); } if (addressDef != null) { // check if scope ID is set correctly addressDef.inetAddress = fixScopeIdAndGetInetAddress(addressDef.inetAddress); } if (addressDef == null) { addressDef = pickLoopbackAddress(null); } return addressDef; }
public static Collection<Inet6Address> getPossibleInetAddressesFor(final Inet6Address inet6Address) { if ((!inet6Address.isSiteLocalAddress() && !inet6Address.isLinkLocalAddress()) || inet6Address.getScopeId() > 0 || inet6Address.getScopedInterface() != null) { return Collections.singleton(inet6Address); } LinkedList<Inet6Address> possibleAddresses = new LinkedList<Inet6Address>(); try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface ni = interfaces.nextElement(); addPossibleAddress(inet6Address, possibleAddresses, ni); } } catch (IOException ignored) { ignore(ignored); } if (possibleAddresses.isEmpty()) { throw new IllegalArgumentException("Could not find a proper network interface" + " to connect to " + inet6Address); } return possibleAddresses; }
.getInetAddressFor((Inet6Address) address.getInetAddress(), thisAddress.getScopeId()); tryToConnect(new InetSocketAddress(inetAddress, address.getPort()), ioService.getSocketConnectTimeoutSeconds() * MILLIS_PER_SECOND);
final NetworkConfig networkConfig = config.getNetworkConfig(); for (String possibleMember : possibleMembers) { AddressHolder addressHolder = AddressUtil.getAddressHolder(possibleMember); try { boolean portIsDefined = addressHolder.getPort() != -1 || !networkConfig.isPortAutoIncrement(); AddressMatcher addressMatcher = null; try { addressMatcher = AddressUtil.getAddressMatcher(addressHolder.getAddress()); } catch (InvalidAddressException ignore) { ignore(ignore); final Collection<String> matchedAddresses; if (addressMatcher.isIPv4()) { matchedAddresses = AddressUtil.getMatchingIpv4Addresses(addressMatcher); } else { final InetAddress[] inetAddresses = InetAddress.getAllByName(host); for (InetAddress inetAddress : inetAddresses) { if (AddressUtil.matchAnyInterface(inetAddress.getHostAddress(), interfaces.getInterfaces())) { addPossibleAddresses(possibleAddresses, host, inetAddress, port, count);
private Address getRequiredMemberAddress() { TcpIpConfig tcpIpConfig = config.getNetworkConfig().getJoin().getTcpIpConfig(); String host = tcpIpConfig.getRequiredMember(); try { AddressHolder addressHolder = AddressUtil.getAddressHolder(host, config.getNetworkConfig().getPort()); if (AddressUtil.isIpAddress(addressHolder.getAddress())) { return new Address(addressHolder.getAddress(), addressHolder.getPort()); } InterfacesConfig interfaces = config.getNetworkConfig().getInterfaces(); if (interfaces.isEnabled()) { InetAddress[] inetAddresses = InetAddress.getAllByName(addressHolder.getAddress()); if (inetAddresses.length > 1) { for (InetAddress inetAddress : inetAddresses) { if (AddressUtil.matchAnyInterface(inetAddress.getHostAddress(), interfaces.getInterfaces())) { return new Address(inetAddress, addressHolder.getPort()); } } } else if (AddressUtil.matchAnyInterface(inetAddresses[0].getHostAddress(), interfaces.getInterfaces())) { return new Address(addressHolder.getAddress(), addressHolder.getPort()); } } else { return new Address(addressHolder.getAddress(), addressHolder.getPort()); } } catch (final Exception e) { logger.warning(e); } return null; }
private Map<String, String> createAddressToDomainMap(TcpIpConfig tcpIpConfig) { if (!tcpIpConfig.isEnabled()) { return Collections.emptyMap(); } Collection<String> possibleAddresses = TcpIpJoiner.getConfigurationMembers(config); // LinkedHashMap is to guarantee order Map<String, String> addressDomainMap = createLinkedHashMap(possibleAddresses.size()); for (String possibleAddress : possibleAddresses) { String addressHolder = AddressUtil.getAddressHolder(possibleAddress).getAddress(); if (AddressUtil.isIpAddress(addressHolder)) { // there may be a domain registered for this address if (!addressDomainMap.containsKey(addressHolder)) { addressDomainMap.put(addressHolder, null); } } else { try { Collection<String> addresses = resolveDomainNames(addressHolder); for (String address : addresses) { addressDomainMap.put(address, addressHolder); } } catch (UnknownHostException e) { logger.warning("Cannot resolve hostname: '" + addressHolder + "'"); } } } return addressDomainMap; }
public static boolean isIpAddress(String address) { try { getAddressMatcher(address); return true; } catch (InvalidAddressException e) { return false; } }
private Collection<Integer> getOutboundPorts(ClientNetworkConfig networkConfig) { Collection<Integer> outboundPorts = networkConfig.getOutboundPorts(); Collection<String> outboundPortDefinitions = networkConfig.getOutboundPortDefinitions(); return AddressUtil.getOutboundPorts(outboundPorts, outboundPortDefinitions); }
Collection<Inet6Address> possibleInetAddresses = getPossibleInetAddressesFor((Inet6Address) inetAddress); for (Inet6Address inet6Address : possibleInetAddresses) { for (int i = 0; i < portTryCount; i++) {
private AddressDefinition pickAddressDef() throws UnknownHostException, SocketException { AddressDefinition addressDef = getSystemConfiguredAddress(); if (addressDef == null) { addressDef = pickInterfaceAddressDef(); } if (addressDef != null) { // check if scope ID is set correctly addressDef.inetAddress = fixScopeIdAndGetInetAddress(addressDef.inetAddress); } if (addressDef == null) { addressDef = pickLoopbackAddress(null); } return addressDef; }
public static Collection<Inet6Address> getPossibleInetAddressesFor(final Inet6Address inet6Address) { if ((!inet6Address.isSiteLocalAddress() && !inet6Address.isLinkLocalAddress()) || inet6Address.getScopeId() > 0 || inet6Address.getScopedInterface() != null) { return Collections.singleton(inet6Address); } LinkedList<Inet6Address> possibleAddresses = new LinkedList<Inet6Address>(); try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements()) { NetworkInterface ni = interfaces.nextElement(); addPossibleAddress(inet6Address, possibleAddresses, ni); } } catch (IOException ignored) { ignore(ignored); } if (possibleAddresses.isEmpty()) { throw new IllegalArgumentException("Could not find a proper network interface" + " to connect to " + inet6Address); } return possibleAddresses; }