/* * Copyright (C) 2011 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.ros.address; import java.net.InetSocketAddress; /** * A wrapper for {@link InetSocketAddress} that emphasizes the difference * between an address that should be used for binding a server port and one that * should be advertised to external entities. * * @author kwc@willowgarage.com (Ken Conley) */ public class BindAddress { private final InetSocketAddress address; private BindAddress(InetSocketAddress address) { this.address = address; } /** * @param port * the port to bind to * @return a {@link BindAddress} instance with specified port that will bind * to all network interfaces on the host */ public static BindAddress newPublic(int port) { return new BindAddress(new InetSocketAddress(port)); } public static BindAddress newPublic() { return newPublic(0); } /** * @param port * the port to bind to * @return a {@link BindAddress} instance with specified port that will bind * to the loopback interface on the host */ public static BindAddress newPrivate(int port) { return new BindAddress(new InetSocketAddress(InetAddressFactory.newLoopback(), port)); } public static BindAddress newPrivate() { return newPrivate(0); } @Override public String toString() { return "BindAddress<" + address + ">"; } public InetSocketAddress toInetSocketAddress() { return address; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((address == null) ? 0 : address.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; BindAddress other = (BindAddress) obj; if (address == null) { if (other.address != null) return false; } else if (!address.equals(other.address)) return false; return true; } }