package org.limewire.rudp.messages.impl; import java.nio.ByteBuffer; import java.nio.ByteOrder; import org.limewire.rudp.messages.MessageFormatException; import org.limewire.rudp.messages.SynMessage; /** Begins a reliable UDP connection by pinging the other host * and by communicating the desired identifying connection ID. */ public class SynMessageImplProtocolVersion0 extends RUDPMessageImpl implements SynMessage { private final byte _senderConnectionID; private final short _protocolVersionNumber; /** * Construct a new SynMessage with the specified settings and data */ SynMessageImplProtocolVersion0(byte connectionID) { super((byte)0, OpCode.OP_SYN, 0, connectionID, (short)0); _senderConnectionID = connectionID; _protocolVersionNumber = PROTOCOL_VERSION_NUMBER; } /** * Construct a new SynMessage with both my Connection ID and theirs */ SynMessageImplProtocolVersion0(byte connectionID, byte theirConnectionID) { super(theirConnectionID, OpCode.OP_SYN, 0, connectionID, (short)0); _senderConnectionID = connectionID; _protocolVersionNumber = PROTOCOL_VERSION_NUMBER; } /** * Construct a new SynMessage from the network */ SynMessageImplProtocolVersion0(byte connectionId, long sequenceNumber, ByteBuffer data1, ByteBuffer data2) throws MessageFormatException { super(OpCode.OP_SYN, connectionId, sequenceNumber, data1, data2); if (data1.remaining() < 3) { throw new MessageFormatException("Message not long enough, message length " + data1.remaining() + " < 3"); } _senderConnectionID = data1.get(); data1.order(ByteOrder.BIG_ENDIAN); _protocolVersionNumber = data1.getShort(); data1.rewind(); } /* (non-Javadoc) * @see org.limewire.rudp.messages.impl.SynMessage#getSenderConnectionID() */ public byte getSenderConnectionID() { return _senderConnectionID; } /* (non-Javadoc) * @see org.limewire.rudp.messages.impl.SynMessage#getProtocolVersionNumber() */ public int getProtocolVersionNumber() { return _protocolVersionNumber; } @Override public String toString() { return "SynMessage DestID:"+getConnectionID()+ " SrcID:"+_senderConnectionID+" vNo:"+_protocolVersionNumber; } @Override public Role getRole() { return Role.UNDEFINED; } }