package com.limegroup.gnutella.handshaking;
import java.util.Properties;
import org.limewire.core.settings.ApplicationSettings;
import org.limewire.core.settings.ConnectionSettings;
import org.limewire.io.IpPort;
import org.limewire.io.NetworkUtils;
import com.limegroup.gnutella.util.LimeWireUtils;
/**
* This class contains the headers that all LimeWires pass in connection
* handshakes.
*/
public abstract class DefaultHeaders extends Properties {
/**
* Constant for the version of query routing we use.
*/
private static final String QUERY_ROUTING_VERSION = "0.1";
protected DefaultHeaders(String remoteIP, IpPort localIp) {
if (NetworkUtils.isValidIpPort(localIp)) {
put(HeaderNames.LISTEN_IP, localIp.getAddress() + ":" + localIp.getPort());
}
if (remoteIP != null) {
put(HeaderNames.REMOTE_IP, remoteIP);
}
addCommonHeaders(this);
}
/**
* Writes the common headers -- headers that all LimeWires should send, like
* Query-Routing and User-Agent.
*/
private static void addCommonHeaders(Properties props) {
props.put(HeaderNames.X_QUERY_ROUTING, QUERY_ROUTING_VERSION);
props.put(HeaderNames.USER_AGENT, LimeWireUtils.getHttpServer());
props.put(HeaderNames.GGEP, "0.5");
props.put(HeaderNames.X_GUESS, "0.1");
props.put(HeaderNames.X_VENDOR_MESSAGE, "0.2");
props.put(HeaderNames.X_REQUERIES, "false");
// even though these are only really used by Ultrapeers, we
// include them with leaves to as an indication that they
// understand these protocols
props.put(HeaderNames.X_DEGREE, Integer.toString(ConnectionSettings.NUM_CONNECTIONS
.getValue()));
props.put(HeaderNames.X_ULTRAPEER_QUERY_ROUTING, QUERY_ROUTING_VERSION);
props.put(HeaderNames.X_MAX_TTL, "3");
props.put(HeaderNames.X_DYNAMIC_QUERY, "0.1");
props.put(HeaderNames.X_LOCALE_PREF, ApplicationSettings.LANGUAGE.get());
if (ConnectionSettings.ACCEPT_DEFLATE.getValue())
props.put(HeaderNames.ACCEPT_ENCODING, HeaderNames.DEFLATE_VALUE);
props.put(HeaderNames.X_PONG_CACHING, "0.1");
}
}