package com.limegroup.gnutella.handshaking; import java.io.IOException; /** * Exception thrown when someone understands responds with a handshaking * code other than 200 or 401. */ public final class NoGnutellaOkException extends IOException { /** * Constant for whether or not the <tt>NoGnutellaOkException</tt> * came from us. */ private final boolean wasMe; /** * Constant for the status code of the handshake header that * caused the exception. */ private final int code; /** * Constant for the default message for exceptions due to fatal * server responses. */ private static final String FATAL_SERVER_MSG = "Server sent fatal response: "; /** * Constant for the default message for exceptions due to fatal * responses from us when we reject connections. */ private static final String FATAL_CLIENT_MSG = "We sent fatal response: "; /** * Cached <tt>NoGnutellaOkException</tt> for the case where * the server rejected the connection with a 503. */ public static final NoGnutellaOkException SERVER_REJECT = new NoGnutellaOkException(false, HandshakeResponse.SLOTS_FULL, FATAL_SERVER_MSG+ HandshakeResponse.SLOTS_FULL); /** * Cached <tt>NoGnutellaOkException</tt> for the case where * we as the client are rejecting the connection with a 503. */ public static final NoGnutellaOkException CLIENT_REJECT = new NoGnutellaOkException(false, HandshakeResponse.SLOTS_FULL, FATAL_CLIENT_MSG+ HandshakeResponse.SLOTS_FULL); /** * reject exception for the case when a connection is rejected * due to unmatching locales */ public static final NoGnutellaOkException CLIENT_REJECT_LOCALE = new NoGnutellaOkException(false, HandshakeResponse.LOCALE_NO_MATCH, FATAL_CLIENT_MSG + HandshakeResponse.LOCALE_NO_MATCH); /** * Cached <tt>NoGnutellaOkException</tt> for the case where * the handshake never resolved successfully on the cleint * side. */ public static final NoGnutellaOkException UNRESOLVED_CLIENT = new NoGnutellaOkException(true, "Too much handshaking, no conclusion"); /** * Cached <tt>NoGnutellaOkException</tt> for the case where * the handshake never resolved successfully on the server * side. */ public static final NoGnutellaOkException UNRESOLVED_SERVER = new NoGnutellaOkException(false, "Too much handshaking, no conclusion"); /** * Creates a new <tt>NoGnutellaOkException</tt> from an unknown * client response. * * @param code the response code from the server */ public static NoGnutellaOkException createClientUnknown(int code) { return new NoGnutellaOkException(true, code, FATAL_SERVER_MSG+code); } /** * Creates a new <tt>NoGnutellaOkException</tt> from an unknown * server response. * * @param code the response code from the server */ public static NoGnutellaOkException createServerUnknown(int code) { return new NoGnutellaOkException(false, code, FATAL_SERVER_MSG+code); } /** * @param wasMe true if I returned the non-standard code. * False if the remote host did. * @param code non-standard code * @param message a human-readable message for debugging purposes * NOT necessarily the message given during the interaction. */ private NoGnutellaOkException(boolean wasMe, int code, String message) { super(message); this.wasMe=wasMe; this.code=code; } /** * Constructor for codeless exception. */ private NoGnutellaOkException(boolean wasMe, String message) { this(wasMe, -1, message); } /** * Returns true if the exception was caused by something this host * wrote. */ public boolean wasMe() { return wasMe; } /** * The offending status code. */ public int getCode() { return code; } }