From 8d7077d22656792455177cb8bac121a0c2cf4ed6 Mon Sep 17 00:00:00 2001 From: Nick Pope <nwpope@gmail.com> Date: Tue, 19 Feb 2019 23:31:25 +0200 Subject: [PATCH] Pack blobs with a header structure --- p2p-rm/include/ftl/p2p-rm.hpp | 2 ++ p2p-rm/include/ftl/p2p-rm/blob.hpp | 11 +++++++++++ p2p-rm/src/p2prm.cpp | 12 ++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/p2p-rm/include/ftl/p2p-rm.hpp b/p2p-rm/include/ftl/p2p-rm.hpp index 491309f13..5e0e2ff85 100644 --- a/p2p-rm/include/ftl/p2p-rm.hpp +++ b/p2p-rm/include/ftl/p2p-rm.hpp @@ -7,6 +7,8 @@ namespace ftl { namespace rm { void reset(); + void destroy() { reset(); } + ftl::rm::Blob *_lookupBlob(const char *uri); ftl::rm::Blob *_createBlob(const char *uri, size_t size); diff --git a/p2p-rm/include/ftl/p2p-rm/blob.hpp b/p2p-rm/include/ftl/p2p-rm/blob.hpp index 4fe012f59..3b72fb172 100644 --- a/p2p-rm/include/ftl/p2p-rm/blob.hpp +++ b/p2p-rm/include/ftl/p2p-rm/blob.hpp @@ -8,8 +8,19 @@ namespace ftl { namespace rm { +struct Header { + char magic[4]; + uint32_t version; + size_t size; + uint32_t format; + uint32_t blobid; +}; + /* NOT TO BE USED DIRECTLY */ struct Blob { + Blob(); + ~Blob(); + ftl::net::raw::Socket *socket_; char *data_; size_t size_; diff --git a/p2p-rm/src/p2prm.cpp b/p2p-rm/src/p2prm.cpp index 86c2b8a50..59edc3a8a 100644 --- a/p2p-rm/src/p2prm.cpp +++ b/p2p-rm/src/p2prm.cpp @@ -6,7 +6,9 @@ static std::map<std::string, ftl::rm::Blob*> blobs; void ftl::rm::reset() { - // TODO Loop delete + for (auto x : blobs) { + delete x; + } blobs.clear(); } @@ -28,8 +30,14 @@ ftl::rm::Blob *ftl::rm::_createBlob(const char *uri, size_t size) { if (blobs[u.getBaseURI()] != NULL) return NULL; ftl::rm::Blob *b = new ftl::rm::Blob; - b->data_ = new char[size]; + + char *raw = new char[size+sizeof(ftl::rm::Header)]; + + b->raw_ = raw; + b->header_ = (ftl::rm::Header*)raw; + b->data_ = raw+sizeof(ftl::rm::Header); b->size_ = size; + b->rawsize = size++sizeof(ftl::rm::Header); b->socket_ = NULL; blobs[u.getBaseURI()] = b; return b; -- GitLab