#ifndef SLOT_H
#define SLOT_H
+#include "common.h"
+#include "Liveness.h"
+
+
#define SLOT_SIZE 2048
#define HMAC_SIZE 32
class Slot : public Liveness {
- private:
+private:
/** Sequence number of the slot. */
int64_t seqnum;
/** HMAC of previous slot. */
- char* prevhmac;
+ Array<char> *prevhmac;
/** HMAC of this slot. */
- char* hmac;
+ Array<char> *hmac;
/** Machine that sent this slot. */
- int64_t machineid;
+ int64_t machineid;
/** Vector of entries in this slot. */
- Vector<Entry *> * entries;
+ Vector<Entry *> *entries;
/** Pieces of information that are live. */
int livecount;
/** Flag that indicates whether this slot is still live for
* recording the machine that sent it. */
- bool seqnumlive;
+ bool seqnumlive;
/** Number of chars of free space. */
int freespace;
/** Reference to Table */
- Table * table;
+ Table *table;
int64_t localSequenceNumber;
- void addShallowEntry(Entry * e);
-
- public:
- Slot(Table * _table, int64_t _seqnum, int64_t _machineid, char* _prevhmac, char* _hmac, int64_t _localSequenceNumber);
- Slot(Table _table, int64_t _seqnum, int64_t _machineid, char* _prevhmac, int64_t _localSequenceNumber);
- Slot(Table _table, int64_t _seqnum, int64_t _machineid, int64_t _localSequenceNumber);
-
- char* getHMAC() { return hmac; }
- char* getPrevHMAC() { return prevhmac; }
- Entry * addEntry(Entry * e);
- void removeEntry(Entry * e);
- bool hasSpace(Entry * e);
- Vector<Entry *> * getEntries();
- char* encode(Mac * mac);
+ void addShallowEntry(Entry *e);
+
+public:
+ Slot(Table *_table, int64_t _seqnum, int64_t _machineid, Array<char> *_prevhmac, Array<char> *_hmac, int64_t _localSequenceNumber);
+ Slot(Table *_table, int64_t _seqnum, int64_t _machineid, Array<char> *_prevhmac, int64_t _localSequenceNumber);
+ Slot(Table *_table, int64_t _seqnum, int64_t _machineid, int64_t _localSequenceNumber);
+
+ Array<char> *getHMAC() { return hmac; }
+ Array<char> *getPrevHMAC() { return prevhmac; }
+ Entry *addEntry(Entry *e);
+ void removeEntry(Entry *e);
+ bool hasSpace(Entry *e);
+ Vector<Entry *> *getEntries();
+ Array<char> *encode(Mac *mac);
int getBaseSize() { return 2 * HMAC_SIZE + 2 * sizeof(int64_t) + sizeof(int); }
- Vector<Entry *> * getLiveEntries(bool resize);
+ Vector<Entry *> *getLiveEntries(bool resize);
int64_t getSequenceNumber() { return seqnum; }
int64_t getMachineID() { return machineid; }
void setDead();
void decrementLiveCount();
bool isLive() { return livecount > 0; }
- char* getSlotCryptIV();
+ Array<char> *getSlotCryptIV();
+ friend Slot *Slotdecode(Table *table, Array<char> *array, Mac *mac);
};
-Slot * Slotdecode(Table * table, char* array, Mac *mac);
+Slot *Slotdecode(Table *table, Array<char> *array, Mac *mac);
#endif