package com.limegroup.gnutella.guess;

import java.net.InetAddress;

/**
 * Simple host/port pair for endpoints used in GUESS.  The use of the
 * <tt>InetAddress</tt> class allows easy migration to IPv6.
 */
public final class GUESSEndpoint {

	/**
	 * Constant for the <tt>InetAddress</tt> object.
	 */
	private final InetAddress ADDRESS;

	/**
	 * Constant for the port.
	 */
	private final int PORT;

	/**
	 * Constructs a new <tt>GUESSEndpoint</tt> with the specified
	 * IP and port.
	 *
	 * @param address the ip address of the host
	 * @param port the port the host is listening on
	 */
	public GUESSEndpoint(InetAddress address, int port) {
		ADDRESS = address;
		PORT = port;
	}

	/**
	 * Accessor for the <tt>InetAddress</tt> instance for this endpoint.
	 *
	 * @return the <tt>InetAddress</tt> instance for this endpoint
	 */
	public InetAddress getAddress() {
		return ADDRESS;
	}

	/**
	 * Accessor for the port for this endpoint.
	 *
	 * @return the port for this endpoint
	 */
	public int getPort() {
		return PORT;
	}

    
    /** Returns true if two GUESSEndpoint objects are equal.
     */
    public boolean equals(Object o) {
        boolean retBool = false;
        if (o instanceof GUESSEndpoint) {
            GUESSEndpoint ep = (GUESSEndpoint) o;
            retBool = (ADDRESS.equals(ep.ADDRESS)) && (PORT == ep.PORT);
        }
        return retBool;
    }
            
    /** Returns this' hashCode.
     */
    public int hashCode() {
        int result = 79;
        result = 37*result + ADDRESS.hashCode();
        result = 37*result + PORT;
        return result;
    }

    public String toString() {
        return "GUESSEndpoint: " + getAddress() + ":" + getPort();
    }

}
