#include "metacube2.h"
+#include <arpa/inet.h>
+
/*
* https://www.ece.cmu.edu/~koopman/pubs/KoopmanCRCWebinar9May2012.pdf
* recommends this for messages as short as ours (see table at page 34).
uint16_t crc = METACUBE2_CRC_START;
int i, j;
- for (i = 0; i < data_len; ++i) {
+ for (i = 0; i < data_len; ++i) {
uint8_t c = data[i];
for (j = 0; j < 8; j++) {
int bit = crc & 0x8000;
}
}
+ /*
+ * Invert the checksum for metadata packets, so that clients that
+ * don't understand metadata will ignore it as broken. There will
+ * probably be logging, but apart from that, it's harmless.
+ */
+ if (ntohs(hdr->flags) & METACUBE_FLAGS_METADATA) {
+ crc ^= 0xffff;
+ }
+
return crc;
}