package com.limegroup.gnutella.udpconnect; import com.limegroup.gnutella.messages.BadPacketException; /** The Syn message begins a reliable udp connection by pinging the other host * and by communicating the desired identifying connectionID. */ public class SynMessage extends UDPConnectionMessage { private byte _senderConnectionID; private int _protocolVersionNumber; /** * Construct a new SynMessage with the specified settings and data */ public SynMessage(byte connectionID) { super( /* his connectionID */ (byte)0, /* opcode */ OP_SYN, /* sequenceNumber */ 0, /* my data is my connectionID and the protocol version number */ buildByteArray(connectionID, PROTOCOL_VERSION_NUMBER), /* data length */ 3 ); _senderConnectionID = connectionID; _protocolVersionNumber = PROTOCOL_VERSION_NUMBER; } /** * Construct a new SynMessage with both my Connection ID and theirs */ public SynMessage(byte connectionID, byte theirConnectionID) { super( /* his connectionID */ theirConnectionID, /* opcode */ OP_SYN, /* sequenceNumber */ 0, /* my data is my connectionID and the protocol version number */ buildByteArray(connectionID, PROTOCOL_VERSION_NUMBER), /* data length */ 3 ); _senderConnectionID = connectionID; _protocolVersionNumber = PROTOCOL_VERSION_NUMBER; } /** * Construct a new SynMessage from the network */ public SynMessage( byte[] guid, byte ttl, byte hops, byte[] payload) throws BadPacketException { super(guid, ttl, hops, payload); _senderConnectionID = guid[GUID_DATA_START]; _protocolVersionNumber = getShortInt(guid[GUID_DATA_START+1],guid[GUID_DATA_START+2]); } public byte getSenderConnectionID() { return _senderConnectionID; } public int getProtocolVersionNumber() { return _protocolVersionNumber; } public String toString() { return "SynMessage DestID:"+getConnectionID()+ " SrcID:"+_senderConnectionID+" vNo:"+_protocolVersionNumber; } }