package com.limegroup.gnutella.dht.messages; import java.io.IOException; import java.io.OutputStream; import org.limewire.mojito.messages.DHTMessage; import org.limewire.mojito.messages.MessageID; import org.limewire.mojito.routing.Contact; import org.limewire.mojito.routing.Version; import com.limegroup.gnutella.messages.AbstractMessage; /** * An abstract class that extends from <code>AbstractMessage</code> and takes a * <code>DHTMessage</code> as a delegate argument. */ abstract class AbstractMessageWire<T extends DHTMessage> extends AbstractMessage implements DHTMessage { /** * An empty GUID, it's never written to Network. * See overwritten write-methods for more info! */ private static final byte[] GUID = new byte[16]; /** Default TTL */ private static final byte TTL = (byte)0x01; /** Default HOPS */ private static final byte HOPS = (byte)0x00; protected final T delegate; AbstractMessageWire(T delegate) { super(GUID, (byte)DHTMessage.F_DHT_MESSAGE, TTL, HOPS, delegate.getLength(), Network.UNKNOWN); this.delegate = delegate; } public Contact getContact() { return delegate.getContact(); } public MessageID getMessageID() { return delegate.getMessageID(); } public OpCode getOpCode() { return delegate.getOpCode(); } public Version getMessageVersion() { return delegate.getMessageVersion(); } @Override public void write(OutputStream out) throws IOException { delegate.write(out); } @Override public final void write(OutputStream out, byte[] buf) throws IOException { write(out); } @Override public final void writeQuickly(OutputStream out) throws IOException { write(out); } @Override protected final void writePayload(OutputStream out) throws IOException { throw new UnsupportedOperationException(); } @Override public String toString() { return delegate.toString(); } }