diff --git a/p2p-rm/include/ftl/p2p-rm.hpp b/p2p-rm/include/ftl/p2p-rm.hpp index 491309f13844e4520f90995ade5cbf999d3930b7..5e0e2ff85126ab2feb27ce10a4b9666e5de6957f 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 4fe012f59820309e23fb581fdbceed5d36855155..3b72fb1721dee6465206e9f57f47c4245c20f4e0 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 86c2b8a50286b52caa3506981f65411d6650d998..59edc3a8a9e26f323f8978147fee67e2b2ad24e0 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;