1 #ifndef REJECTEDMESSAGE_H
2 #define REJECTEDMESSAGE_H
4 * Entry for tracking messages that the server rejected. We have to
5 * make sure that all clients know that this message was rejected to
6 * prevent the server from reusing these messages in an attack.
13 class RejectedMessage : public Entry {
17 /* Machine identifier */
19 /* Oldest sequence number in range */
21 /* Newest sequence number in range */
23 /* Is the machine identifier of the relevant slots equal to (or not
24 * equal to) the specified machine identifier. */
26 /* Set of machines that have not received notification. */
27 Hashset<int64_t> * watchset;
29 RejectedMessage(Slot * slot, int64_t _sequencenum, int64_t _machineid, int64_t _oldseqnum, int64_t _newseqnum, bool _equalto) : Entry(slot),
30 sequencenum(_sequencenum),
31 machineid(_machineid),
32 oldseqnum(_oldseqnum),
33 newseqnum(_newseqnum),
37 int64_t getOldSeqNum() { return oldseqnum; }
38 int64_t getNewSeqNum() { return newseqnum; }
39 bool getEqual() { return equalto; }
40 int64_t getMachineID() { return machineid; }
41 int64_t getSequenceNumber() { return sequencenum; }
42 void setWatchSet(HashSet<int64_t> * _watchset) { watchset=_watchset; }
43 void removeWatcher(int64_t machineid);
44 void encode(ByteBuffer * bb);
45 int getSize() { return 4*sizeof(int64_t) + 2*sizeof(char); }
46 char getType() { return TypeRejectedMessage; }
47 Entry * getCopy(Slot * s) {
48 return new RejectedMessage(s,sequencenum, machineid, oldseqnum, newseqnum, equalto);
52 Entry * RejectedMessage_decode(Slot * slot, ByteBuffer * bb);