package com.limegroup.gnutella.handshaking;

import com.limegroup.gnutella.http.ConstantHTTPHeaderValue;
import com.limegroup.gnutella.http.HTTPHeaderName;

/**
 * Provides names for the headers used in the gnutella connection handshake
 * @author Anurag Singla
 */
public final class HeaderNames {
    
    /**
     * Private constructor to ensure that other classes cannot mistakenly
     * construct an instance of this class.
     */
    private HeaderNames() {}

    /** Obsolete; use X_LISTEN_IP instead */
    public static final String X_MY_ADDRESS         = "X-My-Address";
    /** The replacement for X_MY_ADDRESS */
    public static final String LISTEN_IP            = "Listen-IP";
    public static final String X_ULTRAPEER          = "X-Ultrapeer";
    public static final String X_TRY_ULTRAPEERS     = "X-Try-Ultrapeers";
    public static final String X_QUERY_ROUTING      = "X-Query-Routing";

    /**
     * Constant string for the header indicating support for pong
     * caching.
     */
    public static final String X_PONG_CACHING       = "Pong-Caching";
    public static final String X_ULTRAPEER_NEEDED   = "X-Ultrapeer-Needed";
    public static final String USER_AGENT           = "User-Agent";
    public static final String X_TEMP_CONNECTION    = "X-Temp-Connection";
    public static final String REMOTE_IP            = "Remote-IP";

    public static final String GGEP                 = "GGEP";
    
    /** Requerying exclamation. */
   public static final String X_REQUERIES = "X-Requeries";

	/**
	 * Header name for the GUESS version.
	 */
    public static final String X_GUESS = "X-Guess";
    public static final String X_VERSION = "X-Version";

	/**
	 * Header name for the degree of intra-Ultrapeer connections the
	 * host tries to maintain.
	 */
	public static final String X_DEGREE = "X-Degree";

	/**
	 * Header for the version of query routing supported at the Ultrapeer level.
	 */
	public static final String X_ULTRAPEER_QUERY_ROUTING = 
		"X-Ultrapeer-Query-Routing";

    /**
     * Constant for the header advertising support for vendor messages.
     */
    public static final String X_VENDOR_MESSAGE = "Vendor-Message";

    /**
     * Constant for the header advertising support of extendible probe queries.
     */
    public static final String X_PROBE_QUERIES = "X-Ext-Probes";

    /**
     * Send by new hosts using dynamic-query style searching to denote the
     * maximum TTL that should be sent to them.  This is only for queries
     * coming directly from this host, and is affected by degree.
     */
    public static final String X_MAX_TTL = "X-Max-TTL";

    /**
     * Header to indicate the version of dynamic querying in use.
     */
    public static final String X_DYNAMIC_QUERY = "X-Dynamic-Querying";

    /**
     * Header to indicate the locale that the client is running
     */
    public static final String X_LOCALE_PREF = "X-Locale-Pref";
    
    /**
     * Header for Content-Encoding. Useful because typing
     * HTTPHeaderName.CONTENT_ENCODING.httpStringValue()
     * in all handshaking classes is cumbersome.
     */
    public static final String CONTENT_ENCODING =
        HTTPHeaderName.CONTENT_ENCODING.httpStringValue();
        
    /**
     * Header for Accept-Encoding. Useful because typing
     * HTTPHeaderName.ACCEPT_ENCODING.httpStringValue()
     * in all handshaking classes is cumbersome.
     */
    public static final String ACCEPT_ENCODING =
        HTTPHeaderName.ACCEPT_ENCODING.httpStringValue();
        
    /**
     * The value for deflate -- the type of encoding we can read & write.
     * Useful because typing
     * ConstantHTTPHeaderValue.DEFLATE_VALUE.httpStringValue()
     * in all handshaking classes is cumbersome.
     */
    public static final String DEFLATE_VALUE =
        ConstantHTTPHeaderValue.DEFLATE_VALUE.httpStringValue();
        
    /**
     * Constant for the header indicating that the crawler is connecting.
     */
	public static final String CRAWLER = "Crawler";
	
	/**
	 * Constant for the header indicating the number of leaf connections to
	 * the crawler.
	 */
	public static final String LEAVES = "Leaves";
		
	/**
	 * Constant for the header indicating the number of ultrapeer connections
	 * to the crawler.
	 */
	public static final String PEERS = "Peers";
}
