space hacks
[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 public:
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),
35                 equalto(_equalto),
36                 watchset(NULL) {
37         }
38         ~RejectedMessage();
39         
40         int64_t getOldSeqNum() { return oldseqnum; }
41         int64_t getNewSeqNum() { return newseqnum; }
42         bool getEqual() { return equalto; }
43         int64_t getMachineID() { return machineid; }
44         int64_t getSequenceNumber() { return sequencenum; }
45         void setWatchSet(Hashset<int64_t> *_watchset) { watchset = _watchset;  }
46         void removeWatcher(int64_t machineid);
47         void encode(ByteBuffer *bb);
48         int getSize() { return 4 * sizeof(int64_t) + 2 * sizeof(char); }
49         char getType() { return TypeRejectedMessage; }
50         Entry *getCopy(Slot *s) {
51                 return new RejectedMessage(s,sequencenum, machineid, oldseqnum, newseqnum, equalto);
52         }
53 };
54
55 Entry *RejectedMessage_decode(Slot *slot, ByteBuffer *bb);
56 #endif