package com.limegroup.gnutella.rudp.messages;
import java.io.IOException;
import java.io.OutputStream;
import org.limewire.rudp.messages.RUDPMessage;
import com.limegroup.gnutella.messages.AbstractMessage;
import com.limegroup.gnutella.util.DataUtils;
/**
* An abstract class that extends from Message and takes a
* DHTMessage as a delegate argument.
*/
public abstract class AbstractLimeRUDPMessage<T extends RUDPMessage>
extends AbstractMessage implements RUDPMessage {
/**
* An empty GUID, it's never written to Network.
* See overwritten write-methods for more info!
*/
private static final byte[] GUID = DataUtils.EMPTY_GUID;
/** Default TTL */
private static final byte TTL = (byte)0x01;
/** Default HOPS */
private static final byte HOPS = (byte)0x00;
/** The message this is wrapping. */
protected final T delegate;
AbstractLimeRUDPMessage(T delegate) {
super(GUID, RUDPMessage.F_RUDP_MESSAGE, TTL, HOPS, 0, Network.UDP);
this.delegate = delegate;
}
public OpCode getOpCode() {
return delegate.getOpCode();
}
@Override
public int getTotalLength() {
return delegate.getLength();
}
@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();
}
public void extendSequenceNumber(long seqNo) {
delegate.extendSequenceNumber(seqNo);
}
public byte getConnectionID() {
return delegate.getConnectionID();
}
public int getDataLength() {
return delegate.getDataLength();
}
public long getSequenceNumber() {
return delegate.getSequenceNumber();
}
}