]> git.sesse.net Git - cubemap/blobdiff - httpinput.cpp
Add systemd service unit.
[cubemap] / httpinput.cpp
index 80daa1a8a220e1b5b4d93ca3be99145dc2f35854..c975a2497007c1d45605ce73103f5405be4c78ed 100644 (file)
@@ -8,6 +8,7 @@
 #include <string.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
+#include <sys/time.h>
 #include <time.h>
 #include <unistd.h>
 #include <map>
@@ -22,6 +23,7 @@
 #include "parse.h"
 #include "serverpool.h"
 #include "state.pb.h"
+#include "stream.h"
 #include "util.h"
 #include "version.h"
 
@@ -535,16 +537,17 @@ void HTTPInput::process_data(char *ptr, size_t bytes)
                }
 
                // Now it's safe to read the header.
-               metacube2_block_header *hdr = reinterpret_cast<metacube2_block_header *>(pending_data.data());  
-               assert(memcmp(hdr->sync, METACUBE2_SYNC, sizeof(hdr->sync)) == 0);
-               uint32_t size = ntohl(hdr->size);
-               uint16_t flags = ntohs(hdr->flags);
-               uint16_t expected_csum = metacube2_compute_crc(hdr);
-
-               if (expected_csum != ntohs(hdr->csum)) {
+               metacube2_block_header hdr;
+               memcpy(&hdr, pending_data.data(), sizeof(hdr));
+               assert(memcmp(hdr.sync, METACUBE2_SYNC, sizeof(hdr.sync)) == 0);
+               uint32_t size = ntohl(hdr.size);
+               uint16_t flags = ntohs(hdr.flags);
+               uint16_t expected_csum = metacube2_compute_crc(&hdr);
+
+               if (expected_csum != ntohs(hdr.csum)) {
                        log(WARNING, "[%s] Metacube checksum failed (expected 0x%x, got 0x%x), "
                                "not reading block claiming to be %d bytes (flags=%x).",
-                               url.c_str(), expected_csum, ntohs(hdr->csum),
+                               url.c_str(), expected_csum, ntohs(hdr.csum),
                                size, flags);
 
                        // Drop only the first byte, and let the rest of the code handle resync.