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;
30 RejectedMessage(Slot *slot, int64_t _sequencenum, int64_t _machineid, int64_t _oldseqnum, int64_t _newseqnum, bool _equalto) : Entry(slot),
31 sequencenum(_sequencenum),
32 machineid(_machineid),
33 oldseqnum(_oldseqnum),
34 newseqnum(_newseqnum),
38 int64_t getOldSeqNum() { return oldseqnum; }
39 int64_t getNewSeqNum() { return newseqnum; }
40 bool getEqual() { return equalto; }
41 int64_t getMachineID() { return machineid; }
42 int64_t getSequenceNumber() { return sequencenum; }
43 void setWatchSet(Hashset<int64_t> *_watchset) { watchset = _watchset; }
44 void removeWatcher(int64_t machineid);
45 void encode(ByteBuffer *bb);
46 int getSize() { return 4 * sizeof(int64_t) + 2 * sizeof(char); }
47 char getType() { return TypeRejectedMessage; }
48 Entry *getCopy(Slot *s) {
49 return new RejectedMessage(s,sequencenum, machineid, oldseqnum, newseqnum, equalto);
53 Entry *RejectedMessage_decode(Slot *slot, ByteBuffer *bb);