2 import java.nio.ByteBuffer;
5 * Entry for tracking messages that the server rejected. We have to
6 * make sure that all clients know that this message was rejected to
7 * prevent the server from reusing these messages in an attack.
13 class RejectedMessage extends Entry {
14 /* Machine identifier */
15 private long machineid;
16 /* Oldest sequence number in range */
17 private long oldseqnum;
18 /* Newest sequence number in range */
19 private long newseqnum;
20 /* Is the machine identifier of the relevant slots equal to (or not
21 * equal to) the specified machine identifier. */
22 private boolean equalto;
24 RejectedMessage(Slot slot, long _machineid, long _oldseqnum, long _newseqnum, boolean _equalto) {
48 static Entry decode(Slot slot, ByteBuffer bb) {
49 long machineid=bb.getLong();
50 long oldseqnum=bb.getLong();
51 long newseqnum=bb.getLong();
52 byte equalto=bb.get();
53 return new RejectedMessage(slot, machineid, oldseqnum, newseqnum, equalto==1);
56 void encode(ByteBuffer bb) {
57 bb.put(Entry.TypeRejectedMessage);
58 bb.putLong(machineid);
59 bb.putLong(oldseqnum);
60 bb.putLong(newseqnum);
61 bb.put(equalto?(byte)1:(byte)0);
65 return 3*Long.BYTES + 2*Byte.BYTES;
69 return Entry.TypeRejectedMessage;