@Override public int compare(InetSocketAddress addr1, InetSocketAddress addr2) { if (addr1.equals(addr2)) { return 0; } if (!addr1.isUnresolved() && !addr2.isUnresolved()) { if (addr1.getAddress().getClass() == addr2.getAddress().getClass()) { return 0; } return preferredAddressType.isAssignableFrom(addr1.getAddress().getClass()) ? -1 : 1; } if (addr1.isUnresolved() && addr2.isUnresolved()) { return 0; } return addr1.isUnresolved() ? 1 : -1; } }
/** * Encodes an IP address and port to be included in URL. in particular, this method makes * sure that IPv6 addresses have the proper formatting to be included in URLs. * * @param address The socket address with the IP address and port. * @return The proper URL string encoded IP address and port. */ public static String socketAddressToUrlString(InetSocketAddress address) { if (address.isUnresolved()) { throw new IllegalArgumentException("Address cannot be resolved: " + address.getHostString()); } return ipAddressAndPortToUrlString(address.getAddress(), address.getPort()); }
void appendRemoteAddress(StringBuilder sb) { InetSocketAddress remoteAddress = timeoutsHolder.remoteAddress(); sb.append(remoteAddress.getHostName()); if (!remoteAddress.isUnresolved()) { sb.append('/').append(remoteAddress.getAddress().getHostAddress()); } sb.append(':').append(remoteAddress.getPort()); } }
if (address != null) { if ((resolveType == ResolveType.FORWARD || resolveType == ResolveType.FORWARD_AND_REVERSE) && address.isUnresolved()) { try { if (System.getSecurityManager() == null) { final InetSocketAddress resolvedAddress = new InetSocketAddress(InetAddress.getByName(address.getHostName()), address.getPort()); exchange.setSourceAddress(resolvedAddress); } else { address.getHostName(); } else { AccessController.doPrivileged(new PrivilegedAction<Object>() {
/** * Obtains a host from an {@link InetSocketAddress}. * * @param isa the socket address * * @return a host string, either as a symbolic name or * as a literal IP address string * <br/> * (TODO: determine format for IPv6 addresses, with or without [brackets]) */ protected String getHost(InetSocketAddress isa) { //@@@ Will this work with literal IPv6 addresses, or do we //@@@ need to wrap these in [] for the string representation? //@@@ Having it in this method at least allows for easy workarounds. return isa.isUnresolved() ? isa.getHostName() : isa.getAddress().getHostAddress(); }
final InetSocketAddress isa = new InetSocketAddress(detector.detect((Netty4HttpRequest) request, threadContext), ((InetSocketAddress)request.getRemoteAddress()).getPort()); if(isa.isUnresolved()) { throw new ElasticsearchSecurityException("Cannot resolve address "+isa.getHostString());
BlockingRpcConnection(BlockingRpcClient rpcClient, ConnectionId remoteId) throws IOException { super(rpcClient.conf, AbstractRpcClient.WHEEL_TIMER, remoteId, rpcClient.clusterId, rpcClient.userProvider.isHBaseSecurityEnabled(), rpcClient.codec, rpcClient.compressor); this.rpcClient = rpcClient; if (remoteId.getAddress().isUnresolved()) { throw new UnknownHostException("unknown host: " + remoteId.getAddress().getHostName()); } this.connectionHeaderPreamble = getConnectionHeaderPreamble(); ConnectionHeader header = getConnectionHeader(); ByteArrayOutputStream baos = new ByteArrayOutputStream(4 + header.getSerializedSize()); DataOutputStream dos = new DataOutputStream(baos); dos.writeInt(header.getSerializedSize()); header.writeTo(dos); assert baos.size() == 4 + header.getSerializedSize(); this.connectionHeaderWithLength = baos.getBuffer(); UserGroupInformation ticket = remoteId.ticket.getUGI(); this.threadName = "IPC Client (" + this.rpcClient.socketFactory.hashCode() + ") connection to " + remoteId.getAddress().toString() + ((ticket == null) ? " from an unknown user" : (" from " + ticket.getUserName())); if (this.rpcClient.conf.getBoolean(BlockingRpcClient.SPECIFIC_WRITE_THREAD, false)) { callSender = new CallSender(threadName, this.rpcClient.conf); callSender.start(); } else { callSender = null; } }
/** * Sets the {@code SocketAddress} for this datagram packet. * * @param sockAddr * the SocketAddress of the target host. */ public synchronized void setSocketAddress(SocketAddress sockAddr) { if (!(sockAddr instanceof InetSocketAddress)) { throw new IllegalArgumentException("Socket address not an InetSocketAddress: " + (sockAddr == null ? null : sockAddr.getClass())); } InetSocketAddress inetAddr = (InetSocketAddress) sockAddr; if (inetAddr.isUnresolved()) { throw new IllegalArgumentException("Socket address unresolved: " + sockAddr); } port = inetAddr.getPort(); address = inetAddr.getAddress(); } }
/** * Construct the service key for a token * @param addr InetSocketAddress of remote connection with a token * @return "ip:port" or "host:port" depending on the value of * hadoop.security.token.service.use_ip */ public static Text buildTokenService(InetSocketAddress addr) { String host = null; if (useIpForTokenService) { if (addr.isUnresolved()) { // host has no ip address throw new IllegalArgumentException( new UnknownHostException(addr.getHostName()) ); } host = addr.getAddress().getHostAddress(); } else { host = StringUtils.toLowerCase(addr.getHostName()); } return new Text(host + ":" + addr.getPort()); }
if (address != null) { if ((resolveType == ResolveType.FORWARD || resolveType == ResolveType.FORWARD_AND_REVERSE) && address.isUnresolved()) { try { if (System.getSecurityManager() == null) { final InetSocketAddress resolvedAddress = new InetSocketAddress(InetAddress.getByName(address.getHostName()), address.getPort()); exchange.setDestinationAddress(resolvedAddress); } else { address.getHostName(); } else { AccessController.doPrivileged(new PrivilegedAction<Object>() {
private static String getHostNameNoResolve(InetSocketAddress socketAddress) { if (Xnio.NIO2) { return socketAddress.getHostString(); } else { String hostName; if (socketAddress.isUnresolved()) { hostName = socketAddress.getHostName(); } else { final InetAddress address = socketAddress.getAddress(); final String string = address.toString(); final int slash = string.indexOf('/'); if (slash == -1 || slash == 0) { // unresolved both ways hostName = string.substring(slash + 1); } else { // has a cached host name hostName = string.substring(0, slash); } } return hostName; } } }
@Override public int compare(InetSocketAddress addr1, InetSocketAddress addr2) { if (addr1.isUnresolved() && addr2.isUnresolved()) return 0; if (addr1.isUnresolved() || addr2.isUnresolved()) return addr1.isUnresolved() ? 1 : -1; boolean addr1Loopback = addr1.getAddress().isLoopbackAddress(); // No need to reorder. if (addr1Loopback == addr2.getAddress().isLoopbackAddress()) return 0; if (sameHost) return addr1Loopback ? -1 : 1; else return addr1Loopback ? 1 : -1; } };
@Test public void testUpdateServerList_UnResolvedWithResolvedAddress_ForceDisconnect() throws UnknownHostException { // Arrange // Create a HostProvider with a list of unresolved server address(es) List<InetSocketAddress> addresses = Collections.singletonList( InetSocketAddress.createUnresolved("testhost-1.zookeepertest.zk", 1235) ); HostProvider hostProvider = new StaticHostProvider(addresses, new TestResolver()); InetSocketAddress currentHost = hostProvider.next(100); assertThat("CurrentHost not resolvable in this test case", currentHost.isUnresolved(), is(true)); // Act byte[] addr = new byte[] { 10, 0, 0, 1 }; InetSocketAddress replaceHost = new InetSocketAddress(InetAddress.getByAddress(currentHost.getHostString(), addr), currentHost.getPort()); assertThat("Replace host must be resolved in this test case", replaceHost.isUnresolved(), is(false)); boolean disconnect = hostProvider.updateServerList(new ArrayList<>( Collections.singletonList(replaceHost)), currentHost ); // Assert assertThat(disconnect, equalTo(false)); }
BlockingRpcConnection(BlockingRpcClient rpcClient, ConnectionId remoteId) throws IOException { super(rpcClient.conf, AbstractRpcClient.WHEEL_TIMER, remoteId, rpcClient.clusterId, rpcClient.userProvider.isHBaseSecurityEnabled(), rpcClient.codec, rpcClient.compressor); this.rpcClient = rpcClient; if (remoteId.getAddress().isUnresolved()) { throw new UnknownHostException("unknown host: " + remoteId.getAddress().getHostName()); } this.connectionHeaderPreamble = getConnectionHeaderPreamble(); ConnectionHeader header = getConnectionHeader(); ByteArrayOutputStream baos = new ByteArrayOutputStream(4 + header.getSerializedSize()); DataOutputStream dos = new DataOutputStream(baos); dos.writeInt(header.getSerializedSize()); header.writeTo(dos); assert baos.size() == 4 + header.getSerializedSize(); this.connectionHeaderWithLength = baos.getBuffer(); UserGroupInformation ticket = remoteId.ticket.getUGI(); this.threadName = "IPC Client (" + this.rpcClient.socketFactory.hashCode() + ") connection to " + remoteId.getAddress().toString() + ((ticket == null) ? " from an unknown user" : (" from " + ticket.getUserName())); if (this.rpcClient.conf.getBoolean(BlockingRpcClient.SPECIFIC_WRITE_THREAD, false)) { callSender = new CallSender(threadName, this.rpcClient.conf); callSender.start(); } else { callSender = null; } }
@Override protected Object newInitialMessage(ChannelHandlerContext ctx) throws Exception { InetSocketAddress raddr = destinationAddress(); String rhost; if (raddr.isUnresolved()) { rhost = raddr.getHostString(); } else { rhost = raddr.getAddress().getHostAddress(); } return new DefaultSocks4CommandRequest( Socks4CommandType.CONNECT, rhost, raddr.getPort(), username != null? username : ""); }
/** * Converts socket address into string literal, which has form: 'address:port'. Example:<br> * <ul> * <li>127.0.0.1:8080</li> * <li>dns.name.com:8080</li> * <li>[0fe:1::20]:8080</li> * <li>[::1]:8080</li> * </ul> * @param inet * @return */ public static String formatAddress(InetSocketAddress inet){ if(inet == null){ throw new NullPointerException(); } StringBuilder result = new StringBuilder(); if(inet.isUnresolved()){ result.append(inet.getHostName()); }else{ result.append(formatPossibleIpv6Address(formatAddress(inet.getAddress()))); } result.append(":").append(inet.getPort()); return result.toString(); }
InetSocketAddress resolved = addr.isUnresolved() ? new InetSocketAddress(InetAddress.getByName(addr.getHostName()), addr.getPort()) : addr;
return hostString; if (!addr.isUnresolved()) { InetAddress ia = addr.getAddress(); hostString = ia.getHostAddress(); } else { hostString = addr.getHostName();
@Override public void cache(String hostname, InetSocketAddress address, long originalTtl, EventLoop loop) { // We only cache resolved addresses. if (!address.isUnresolved()) { cache.cache(hostname, EMPTY, address.getAddress(), originalTtl, loop); } }
@Test public void shouldCreateUnresolvedAddressByHostName() { InetSocketAddress socketAddress = InetSocketAddressUtil .createUnresolved("google.com", 80); assertThat(socketAddress.isUnresolved()).isTrue(); assertThat(socketAddress.getPort()).isEqualTo(80); assertThat(socketAddress.getHostString()).isEqualTo("google.com"); }