5259f68065781524da2edf1afe2cae7fce4a7bcb
[iotcloud.git] / version2 / src / C / RejectedMessage.h
1 #ifndef REJECTEDMESSAGE_H
2 #define REJECTEDMESSAGE_H
3 /**
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.
7  * @author Brian Demsky
8  * @version 1.0
9  */
10 #include "common.h"
11 #include "Entry.h"
12
13 class RejectedMessage : public Entry {
14 private:
15         /* Sequence number */
16         int64_t sequencenum;
17         /* Machine identifier */
18         int64_t machineid;
19         /* Oldest sequence number in range */
20         int64_t oldseqnum;
21         /* Newest sequence number in range */
22         int64_t newseqnum;
23         /* Is the machine identifier of the relevant slots equal to (or not
24          * equal to) the specified machine identifier. */
25         bool equalto;
26         /* Set of machines that have not received notification. */
27         Hashset<int64_t> *watchset;
28
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),
34                 equalto(_equalto) {
35         }
36
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);
49         }
50 };
51
52 Entry *RejectedMessage_decode(Slot *slot, ByteBuffer *bb);
53 #ifndef