rename files
[iotcloud.git] / version2 / src / C / RejectedMessage.cpp
diff --git a/version2/src/C/RejectedMessage.cpp b/version2/src/C/RejectedMessage.cpp
new file mode 100644 (file)
index 0000000..261f30c
--- /dev/null
@@ -0,0 +1,39 @@
+#include "RejectedMessage.h"
+#include "ByteBuffer.h"
+
+/**
+ * Entry for tracking messages that the server rejected.  We have to
+ * make sure that all clients know that this message was rejected to
+ * prevent the server from reusing these messages in an attack.
+ * @author Brian Demsky
+ * @version 1.0
+ */
+
+Entry *RejectedMessage_decode(Slot *slot, ByteBuffer *bb) {
+       int64_t sequencenum = bb->getLong();
+       int64_t machineid = bb->getLong();
+       int64_t oldseqnum = bb->getLong();
+       int64_t newseqnum = bb->getLong();
+       char equalto = bb->get();
+       return new RejectedMessage(slot,sequencenum, machineid, oldseqnum, newseqnum, equalto == 1);
+}
+
+RejectedMessage::~RejectedMessage() {
+       if (watchset != NULL)
+               delete watchset;
+}
+
+void RejectedMessage::removeWatcher(int64_t machineid) {
+       if (watchset->remove(machineid))
+               if (watchset->isEmpty())
+                       setDead();
+}
+
+void RejectedMessage::encode(ByteBuffer *bb) {
+       bb->put(TypeRejectedMessage);
+       bb->putLong(sequencenum);
+       bb->putLong(machineid);
+       bb->putLong(oldseqnum);
+       bb->putLong(newseqnum);
+       bb->put(equalto ? (char)1 : (char)0);
+}