diff --git a/CMakeLists.txt b/CMakeLists.txt index af9d25f6..4fffd9cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,10 +11,11 @@ add_executable(hpcore src/crypto.cpp src/conf.cpp src/hplog.cpp + src/fbschema/common_helpers.cpp + src/fbschema/p2pmsg_helpers.cpp src/sock/socket_client.cpp src/sock/socket_server.cpp src/sock/socket_session.cpp - src/p2p/peer_message_handler.cpp src/p2p/peer_session_handler.cpp src/p2p/p2p.cpp src/usr/user_session_handler.cpp diff --git a/src/cons/cons.cpp b/src/cons/cons.cpp index e8ecfb8d..57014c64 100644 --- a/src/cons/cons.cpp +++ b/src/cons/cons.cpp @@ -4,13 +4,15 @@ #include "../conf.hpp" #include "../usr/usr.hpp" #include "../p2p/p2p.hpp" -#include "../p2p/peer_message_handler.hpp" +#include "../fbschema/p2pmsg_helpers.hpp" #include "../p2p/peer_session_handler.hpp" #include "../hplog.hpp" #include "../crypto.hpp" #include "../proc.hpp" #include "cons.hpp" +namespace p2pmsg = fbschema::p2pmsg; + namespace cons { @@ -313,12 +315,12 @@ p2p::proposal create_stage123_proposal(vote_counter &votes) /** * Broadcasts the given proposal to all connected peers. - * @return 0 on success. -1 if not peers to broadcast. + * @return 0 on success. -1 if no peers to broadcast. */ int broadcast_proposal(const p2p::proposal &p) { p2p::peer_outbound_message msg(std::make_shared(1024)); - p2p::create_msg_from_proposal(msg.builder(), p); + p2pmsg::create_msg_from_proposal(msg.builder(), p); { //Broadcast while locking the peer_connections. diff --git a/src/fbschema/common_helpers.cpp b/src/fbschema/common_helpers.cpp new file mode 100644 index 00000000..88813f83 --- /dev/null +++ b/src/fbschema/common_helpers.cpp @@ -0,0 +1,93 @@ +#include "common_helpers.hpp" + +namespace fbschema +{ + +//---Conversion helpers from flatbuffers data types to std data types---// + +/** + * Returns string_view from flat buffer data pointer and length. + */ +std::string_view flatbuff_bytes_to_sv(const uint8_t *data, flatbuffers::uoffset_t length) +{ + const char *signature_content_str = reinterpret_cast(data); + return std::string_view(signature_content_str, length); +} + +/** + * Returns return string_view from Flat Buffer vector of bytes. + */ +std::string_view flatbuff_bytes_to_sv(const flatbuffers::Vector *buffer) +{ + return flatbuff_bytes_to_sv(buffer->Data(), buffer->size()); +} + +/** + * Returns set from Flatbuffer vector of ByteArrays. + */ +const std::unordered_set flatbuf_bytearrayvector_to_stringlist(const flatbuffers::Vector> *fbvec) +{ + std::unordered_set set; + set.reserve(fbvec->size()); + for (auto el : *fbvec) + set.emplace(std::string(flatbuff_bytes_to_sv(el->array()))); + return set; +} + +/** + * Returns a map from Flatbuffer vector of key value pairs. + */ +const std::unordered_map +flatbuf_pairvector_to_stringmap(const flatbuffers::Vector> *fbvec) +{ + std::unordered_map map; + map.reserve(fbvec->size()); + for (auto el : *fbvec) + map.emplace(flatbuff_bytes_to_sv(el->key()), flatbuff_bytes_to_sv(el->value())); + return map; +} + +//---Conversion helpers from std data types to flatbuffers data types---// +//---These are used in constructing Flatbuffer messages using builders---// + +/** + * Returns Flatbuffer bytes vector from string_view. + */ +const flatbuffers::Offset> +sv_to_flatbuff_bytes(flatbuffers::FlatBufferBuilder &builder, std::string_view sv) +{ + return builder.CreateVector(reinterpret_cast(sv.data()), sv.size()); +} + +/** + * Returns Flatbuffer vector of ByteArrays from given set of strings. + */ +const flatbuffers::Offset>> +stringlist_to_flatbuf_bytearrayvector(flatbuffers::FlatBufferBuilder &builder, const std::unordered_set &set) +{ + std::vector> fbvec; + fbvec.reserve(set.size()); + for (std::string_view str : set) + fbvec.push_back(CreateByteArray(builder, sv_to_flatbuff_bytes(builder, str))); + return builder.CreateVector(fbvec); +} + +/** + * Returns Flatbuffer vector of key value pairs from given map. + */ +const flatbuffers::Offset>> +stringmap_to_flatbuf_bytepairvector(flatbuffers::FlatBufferBuilder &builder, const std::unordered_map &map) +{ + std::vector> fbvec; + fbvec.reserve(map.size()); + for (auto const &[key, value] : map) + { + fbvec.push_back(CreateBytesKeyValuePair( + builder, + sv_to_flatbuff_bytes(builder, key), + sv_to_flatbuff_bytes(builder, value))); + } + return builder.CreateVector(fbvec); +} + +} // namespace fbschema \ No newline at end of file diff --git a/src/fbschema/common_helpers.hpp b/src/fbschema/common_helpers.hpp new file mode 100644 index 00000000..03b2158d --- /dev/null +++ b/src/fbschema/common_helpers.hpp @@ -0,0 +1,40 @@ +#ifndef _HP_FBSCHEMA_COMMON_HELPERS_H_ +#define _HP_FBSCHEMA_COMMON_HELPERS_H_ + +#include +#include +#include +#include "common_schema_generated.h" + +namespace fbschema +{ +/** + * This section contains common Flatbuffer message reading/writing helpers. + */ + +//---Conversion helpers from flatbuffers data types to std data types---// + +std::string_view flatbuff_bytes_to_sv(const uint8_t *data, flatbuffers::uoffset_t length); + +std::string_view flatbuff_bytes_to_sv(const flatbuffers::Vector *buffer); + +const std::unordered_set +flatbuf_bytearrayvector_to_stringlist(const flatbuffers::Vector> *fbvec); + +const std::unordered_map +flatbuf_pairvector_to_stringmap(const flatbuffers::Vector> *fbvec); + +//---Conversion helpers from std data types to flatbuffers data types---// + +const flatbuffers::Offset> +sv_to_flatbuff_bytes(flatbuffers::FlatBufferBuilder &builder, std::string_view sv); + +const flatbuffers::Offset>> +stringlist_to_flatbuf_bytearrayvector(flatbuffers::FlatBufferBuilder &builder, const std::unordered_set &set); + +const flatbuffers::Offset>> +stringmap_to_flatbuf_bytepairvector(flatbuffers::FlatBufferBuilder &builder, const std::unordered_map &map); + +} // namespace fbschema + +#endif \ No newline at end of file diff --git a/src/fbschema/common_schema.fbs b/src/fbschema/common_schema.fbs new file mode 100644 index 00000000..85fb7a4c --- /dev/null +++ b/src/fbschema/common_schema.fbs @@ -0,0 +1,11 @@ +//IDL file for common types. +namespace fbschema; + +table BytesKeyValuePair { //A key, value pair of byte[]. + key:[ubyte]; + value:[ubyte]; +} + +table ByteArray { //To represent list of byte arrays + array:[ubyte]; +} diff --git a/src/fbschema/common_schema_generated.h b/src/fbschema/common_schema_generated.h new file mode 100644 index 00000000..1e94fdb6 --- /dev/null +++ b/src/fbschema/common_schema_generated.h @@ -0,0 +1,140 @@ +// automatically generated by the FlatBuffers compiler, do not modify + + +#ifndef FLATBUFFERS_GENERATED_COMMONSCHEMA_FBSCHEMA_H_ +#define FLATBUFFERS_GENERATED_COMMONSCHEMA_FBSCHEMA_H_ + +#include "flatbuffers/flatbuffers.h" + +namespace fbschema { + +struct BytesKeyValuePair; + +struct ByteArray; + +struct BytesKeyValuePair FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_KEY = 4, + VT_VALUE = 6 + }; + const flatbuffers::Vector *key() const { + return GetPointer *>(VT_KEY); + } + flatbuffers::Vector *mutable_key() { + return GetPointer *>(VT_KEY); + } + const flatbuffers::Vector *value() const { + return GetPointer *>(VT_VALUE); + } + flatbuffers::Vector *mutable_value() { + return GetPointer *>(VT_VALUE); + } + bool Verify(flatbuffers::Verifier &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_KEY) && + verifier.VerifyVector(key()) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyVector(value()) && + verifier.EndTable(); + } +}; + +struct BytesKeyValuePairBuilder { + flatbuffers::FlatBufferBuilder &fbb_; + flatbuffers::uoffset_t start_; + void add_key(flatbuffers::Offset> key) { + fbb_.AddOffset(BytesKeyValuePair::VT_KEY, key); + } + void add_value(flatbuffers::Offset> value) { + fbb_.AddOffset(BytesKeyValuePair::VT_VALUE, value); + } + explicit BytesKeyValuePairBuilder(flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + BytesKeyValuePairBuilder &operator=(const BytesKeyValuePairBuilder &); + flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = flatbuffers::Offset(end); + return o; + } +}; + +inline flatbuffers::Offset CreateBytesKeyValuePair( + flatbuffers::FlatBufferBuilder &_fbb, + flatbuffers::Offset> key = 0, + flatbuffers::Offset> value = 0) { + BytesKeyValuePairBuilder builder_(_fbb); + builder_.add_value(value); + builder_.add_key(key); + return builder_.Finish(); +} + +inline flatbuffers::Offset CreateBytesKeyValuePairDirect( + flatbuffers::FlatBufferBuilder &_fbb, + const std::vector *key = nullptr, + const std::vector *value = nullptr) { + auto key__ = key ? _fbb.CreateVector(*key) : 0; + auto value__ = value ? _fbb.CreateVector(*value) : 0; + return fbschema::CreateBytesKeyValuePair( + _fbb, + key__, + value__); +} + +struct ByteArray FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_ARRAY = 4 + }; + const flatbuffers::Vector *array() const { + return GetPointer *>(VT_ARRAY); + } + flatbuffers::Vector *mutable_array() { + return GetPointer *>(VT_ARRAY); + } + bool Verify(flatbuffers::Verifier &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_ARRAY) && + verifier.VerifyVector(array()) && + verifier.EndTable(); + } +}; + +struct ByteArrayBuilder { + flatbuffers::FlatBufferBuilder &fbb_; + flatbuffers::uoffset_t start_; + void add_array(flatbuffers::Offset> array) { + fbb_.AddOffset(ByteArray::VT_ARRAY, array); + } + explicit ByteArrayBuilder(flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ByteArrayBuilder &operator=(const ByteArrayBuilder &); + flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = flatbuffers::Offset(end); + return o; + } +}; + +inline flatbuffers::Offset CreateByteArray( + flatbuffers::FlatBufferBuilder &_fbb, + flatbuffers::Offset> array = 0) { + ByteArrayBuilder builder_(_fbb); + builder_.add_array(array); + return builder_.Finish(); +} + +inline flatbuffers::Offset CreateByteArrayDirect( + flatbuffers::FlatBufferBuilder &_fbb, + const std::vector *array = nullptr) { + auto array__ = array ? _fbb.CreateVector(*array) : 0; + return fbschema::CreateByteArray( + _fbb, + array__); +} + +} // namespace fbschema + +#endif // FLATBUFFERS_GENERATED_COMMONSCHEMA_FBSCHEMA_H_ diff --git a/src/p2p/message_container.fbs b/src/fbschema/p2pmsg_container.fbs similarity index 87% rename from src/p2p/message_container.fbs rename to src/fbschema/p2pmsg_container.fbs index 0b14fab5..a76958b3 100644 --- a/src/p2p/message_container.fbs +++ b/src/fbschema/p2pmsg_container.fbs @@ -2,8 +2,8 @@ /*Message content need to be serialised and parsed into container, we need two root types in flatbuffs to generat needed api methods. Since Flatbuff only support one rrot at each IDL files, we had to seperate message schema to 2 files. */ -include "message_content.fbs"; -namespace p2p; +include "p2pmsg_content.fbs"; +namespace fbschema.p2pmsg; table Container { //root type for message version:uint16; diff --git a/src/p2p/message_container_generated.h b/src/fbschema/p2pmsg_container_generated.h similarity index 83% rename from src/p2p/message_container_generated.h rename to src/fbschema/p2pmsg_container_generated.h index 459be17d..d5cf5a72 100644 --- a/src/p2p/message_container_generated.h +++ b/src/fbschema/p2pmsg_container_generated.h @@ -1,14 +1,16 @@ // automatically generated by the FlatBuffers compiler, do not modify -#ifndef FLATBUFFERS_GENERATED_MESSAGECONTAINER_P2P_H_ -#define FLATBUFFERS_GENERATED_MESSAGECONTAINER_P2P_H_ +#ifndef FLATBUFFERS_GENERATED_P2PMSGCONTAINER_FBSCHEMA_P2PMSG_H_ +#define FLATBUFFERS_GENERATED_P2PMSGCONTAINER_FBSCHEMA_P2PMSG_H_ #include "flatbuffers/flatbuffers.h" -#include "message_content_generated.h" +#include "common_schema_generated.h" +#include "p2pmsg_content_generated.h" -namespace p2p { +namespace fbschema { +namespace p2pmsg { struct Container; @@ -120,7 +122,7 @@ inline flatbuffers::Offset CreateContainerDirect( auto pubkey__ = pubkey ? _fbb.CreateVector(*pubkey) : 0; auto signature__ = signature ? _fbb.CreateVector(*signature) : 0; auto content__ = content ? _fbb.CreateVector(*content) : 0; - return p2p::CreateContainer( + return fbschema::p2pmsg::CreateContainer( _fbb, version, timestamp, @@ -129,12 +131,12 @@ inline flatbuffers::Offset CreateContainerDirect( content__); } -inline const p2p::Container *GetContainer(const void *buf) { - return flatbuffers::GetRoot(buf); +inline const fbschema::p2pmsg::Container *GetContainer(const void *buf) { + return flatbuffers::GetRoot(buf); } -inline const p2p::Container *GetSizePrefixedContainer(const void *buf) { - return flatbuffers::GetSizePrefixedRoot(buf); +inline const fbschema::p2pmsg::Container *GetSizePrefixedContainer(const void *buf) { + return flatbuffers::GetSizePrefixedRoot(buf); } inline Container *GetMutableContainer(void *buf) { @@ -143,26 +145,27 @@ inline Container *GetMutableContainer(void *buf) { inline bool VerifyContainerBuffer( flatbuffers::Verifier &verifier) { - return verifier.VerifyBuffer(nullptr); + return verifier.VerifyBuffer(nullptr); } inline bool VerifySizePrefixedContainerBuffer( flatbuffers::Verifier &verifier) { - return verifier.VerifySizePrefixedBuffer(nullptr); + return verifier.VerifySizePrefixedBuffer(nullptr); } inline void FinishContainerBuffer( flatbuffers::FlatBufferBuilder &fbb, - flatbuffers::Offset root) { + flatbuffers::Offset root) { fbb.Finish(root); } inline void FinishSizePrefixedContainerBuffer( flatbuffers::FlatBufferBuilder &fbb, - flatbuffers::Offset root) { + flatbuffers::Offset root) { fbb.FinishSizePrefixed(root); } -} // namespace p2p +} // namespace p2pmsg +} // namespace fbschema -#endif // FLATBUFFERS_GENERATED_MESSAGECONTAINER_P2P_H_ +#endif // FLATBUFFERS_GENERATED_P2PMSGCONTAINER_FBSCHEMA_P2PMSG_H_ diff --git a/src/p2p/message_content.fbs b/src/fbschema/p2pmsg_content.fbs similarity index 86% rename from src/p2p/message_content.fbs rename to src/fbschema/p2pmsg_content.fbs index 063d2946..d89848e4 100644 --- a/src/p2p/message_content.fbs +++ b/src/fbschema/p2pmsg_content.fbs @@ -1,10 +1,6 @@ //IDL file for p2p message content schema. -namespace p2p; - -table BytesKeyValuePair { //A key, value pair of byte[]. - key:[ubyte]; - value:[ubyte]; -} +include "common_schema.fbs"; +namespace fbschema.p2pmsg; table RawInputList { //Pubkey bytes with an array of key value pairs. pubkey:[ubyte]; @@ -16,10 +12,6 @@ table RawOutput { //Pubkey bytes with a output key value pair. output:BytesKeyValuePair; } -table ByteArray { //To represent list of byte arrays - array:[ubyte]; -} - union Message { Proposal_Message, Npl_Message } //message content type table Content { diff --git a/src/p2p/message_content_generated.h b/src/fbschema/p2pmsg_content_generated.h similarity index 73% rename from src/p2p/message_content_generated.h rename to src/fbschema/p2pmsg_content_generated.h index d032d9b1..a72f97fa 100644 --- a/src/p2p/message_content_generated.h +++ b/src/fbschema/p2pmsg_content_generated.h @@ -1,21 +1,20 @@ // automatically generated by the FlatBuffers compiler, do not modify -#ifndef FLATBUFFERS_GENERATED_MESSAGECONTENT_P2P_H_ -#define FLATBUFFERS_GENERATED_MESSAGECONTENT_P2P_H_ +#ifndef FLATBUFFERS_GENERATED_P2PMSGCONTENT_FBSCHEMA_P2PMSG_H_ +#define FLATBUFFERS_GENERATED_P2PMSGCONTENT_FBSCHEMA_P2PMSG_H_ #include "flatbuffers/flatbuffers.h" -namespace p2p { +#include "common_schema_generated.h" -struct BytesKeyValuePair; +namespace fbschema { +namespace p2pmsg { struct RawInputList; struct RawOutput; -struct ByteArray; - struct Content; struct Proposal_Message; @@ -74,76 +73,6 @@ template<> struct MessageTraits { bool VerifyMessage(flatbuffers::Verifier &verifier, const void *obj, Message type); bool VerifyMessageVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector> *values, const flatbuffers::Vector *types); -struct BytesKeyValuePair FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { - VT_KEY = 4, - VT_VALUE = 6 - }; - const flatbuffers::Vector *key() const { - return GetPointer *>(VT_KEY); - } - flatbuffers::Vector *mutable_key() { - return GetPointer *>(VT_KEY); - } - const flatbuffers::Vector *value() const { - return GetPointer *>(VT_VALUE); - } - flatbuffers::Vector *mutable_value() { - return GetPointer *>(VT_VALUE); - } - bool Verify(flatbuffers::Verifier &verifier) const { - return VerifyTableStart(verifier) && - VerifyOffset(verifier, VT_KEY) && - verifier.VerifyVector(key()) && - VerifyOffset(verifier, VT_VALUE) && - verifier.VerifyVector(value()) && - verifier.EndTable(); - } -}; - -struct BytesKeyValuePairBuilder { - flatbuffers::FlatBufferBuilder &fbb_; - flatbuffers::uoffset_t start_; - void add_key(flatbuffers::Offset> key) { - fbb_.AddOffset(BytesKeyValuePair::VT_KEY, key); - } - void add_value(flatbuffers::Offset> value) { - fbb_.AddOffset(BytesKeyValuePair::VT_VALUE, value); - } - explicit BytesKeyValuePairBuilder(flatbuffers::FlatBufferBuilder &_fbb) - : fbb_(_fbb) { - start_ = fbb_.StartTable(); - } - BytesKeyValuePairBuilder &operator=(const BytesKeyValuePairBuilder &); - flatbuffers::Offset Finish() { - const auto end = fbb_.EndTable(start_); - auto o = flatbuffers::Offset(end); - return o; - } -}; - -inline flatbuffers::Offset CreateBytesKeyValuePair( - flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset> key = 0, - flatbuffers::Offset> value = 0) { - BytesKeyValuePairBuilder builder_(_fbb); - builder_.add_value(value); - builder_.add_key(key); - return builder_.Finish(); -} - -inline flatbuffers::Offset CreateBytesKeyValuePairDirect( - flatbuffers::FlatBufferBuilder &_fbb, - const std::vector *key = nullptr, - const std::vector *value = nullptr) { - auto key__ = key ? _fbb.CreateVector(*key) : 0; - auto value__ = value ? _fbb.CreateVector(*value) : 0; - return p2p::CreateBytesKeyValuePair( - _fbb, - key__, - value__); -} - struct RawInputList FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_PUBKEY = 4, @@ -155,11 +84,11 @@ struct RawInputList FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { flatbuffers::Vector *mutable_pubkey() { return GetPointer *>(VT_PUBKEY); } - const flatbuffers::Vector> *inputs() const { - return GetPointer> *>(VT_INPUTS); + const flatbuffers::Vector> *inputs() const { + return GetPointer> *>(VT_INPUTS); } - flatbuffers::Vector> *mutable_inputs() { - return GetPointer> *>(VT_INPUTS); + flatbuffers::Vector> *mutable_inputs() { + return GetPointer> *>(VT_INPUTS); } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && @@ -178,7 +107,7 @@ struct RawInputListBuilder { void add_pubkey(flatbuffers::Offset> pubkey) { fbb_.AddOffset(RawInputList::VT_PUBKEY, pubkey); } - void add_inputs(flatbuffers::Offset>> inputs) { + void add_inputs(flatbuffers::Offset>> inputs) { fbb_.AddOffset(RawInputList::VT_INPUTS, inputs); } explicit RawInputListBuilder(flatbuffers::FlatBufferBuilder &_fbb) @@ -196,7 +125,7 @@ struct RawInputListBuilder { inline flatbuffers::Offset CreateRawInputList( flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset> pubkey = 0, - flatbuffers::Offset>> inputs = 0) { + flatbuffers::Offset>> inputs = 0) { RawInputListBuilder builder_(_fbb); builder_.add_inputs(inputs); builder_.add_pubkey(pubkey); @@ -206,10 +135,10 @@ inline flatbuffers::Offset CreateRawInputList( inline flatbuffers::Offset CreateRawInputListDirect( flatbuffers::FlatBufferBuilder &_fbb, const std::vector *pubkey = nullptr, - const std::vector> *inputs = nullptr) { + const std::vector> *inputs = nullptr) { auto pubkey__ = pubkey ? _fbb.CreateVector(*pubkey) : 0; - auto inputs__ = inputs ? _fbb.CreateVector>(*inputs) : 0; - return p2p::CreateRawInputList( + auto inputs__ = inputs ? _fbb.CreateVector>(*inputs) : 0; + return fbschema::p2pmsg::CreateRawInputList( _fbb, pubkey__, inputs__); @@ -226,11 +155,11 @@ struct RawOutput FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { flatbuffers::Vector *mutable_pubkey() { return GetPointer *>(VT_PUBKEY); } - const BytesKeyValuePair *output() const { - return GetPointer(VT_OUTPUT); + const fbschema::BytesKeyValuePair *output() const { + return GetPointer(VT_OUTPUT); } - BytesKeyValuePair *mutable_output() { - return GetPointer(VT_OUTPUT); + fbschema::BytesKeyValuePair *mutable_output() { + return GetPointer(VT_OUTPUT); } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && @@ -248,7 +177,7 @@ struct RawOutputBuilder { void add_pubkey(flatbuffers::Offset> pubkey) { fbb_.AddOffset(RawOutput::VT_PUBKEY, pubkey); } - void add_output(flatbuffers::Offset output) { + void add_output(flatbuffers::Offset output) { fbb_.AddOffset(RawOutput::VT_OUTPUT, output); } explicit RawOutputBuilder(flatbuffers::FlatBufferBuilder &_fbb) @@ -266,7 +195,7 @@ struct RawOutputBuilder { inline flatbuffers::Offset CreateRawOutput( flatbuffers::FlatBufferBuilder &_fbb, flatbuffers::Offset> pubkey = 0, - flatbuffers::Offset output = 0) { + flatbuffers::Offset output = 0) { RawOutputBuilder builder_(_fbb); builder_.add_output(output); builder_.add_pubkey(pubkey); @@ -276,67 +205,14 @@ inline flatbuffers::Offset CreateRawOutput( inline flatbuffers::Offset CreateRawOutputDirect( flatbuffers::FlatBufferBuilder &_fbb, const std::vector *pubkey = nullptr, - flatbuffers::Offset output = 0) { + flatbuffers::Offset output = 0) { auto pubkey__ = pubkey ? _fbb.CreateVector(*pubkey) : 0; - return p2p::CreateRawOutput( + return fbschema::p2pmsg::CreateRawOutput( _fbb, pubkey__, output); } -struct ByteArray FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { - VT_ARRAY = 4 - }; - const flatbuffers::Vector *array() const { - return GetPointer *>(VT_ARRAY); - } - flatbuffers::Vector *mutable_array() { - return GetPointer *>(VT_ARRAY); - } - bool Verify(flatbuffers::Verifier &verifier) const { - return VerifyTableStart(verifier) && - VerifyOffset(verifier, VT_ARRAY) && - verifier.VerifyVector(array()) && - verifier.EndTable(); - } -}; - -struct ByteArrayBuilder { - flatbuffers::FlatBufferBuilder &fbb_; - flatbuffers::uoffset_t start_; - void add_array(flatbuffers::Offset> array) { - fbb_.AddOffset(ByteArray::VT_ARRAY, array); - } - explicit ByteArrayBuilder(flatbuffers::FlatBufferBuilder &_fbb) - : fbb_(_fbb) { - start_ = fbb_.StartTable(); - } - ByteArrayBuilder &operator=(const ByteArrayBuilder &); - flatbuffers::Offset Finish() { - const auto end = fbb_.EndTable(start_); - auto o = flatbuffers::Offset(end); - return o; - } -}; - -inline flatbuffers::Offset CreateByteArray( - flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset> array = 0) { - ByteArrayBuilder builder_(_fbb); - builder_.add_array(array); - return builder_.Finish(); -} - -inline flatbuffers::Offset CreateByteArrayDirect( - flatbuffers::FlatBufferBuilder &_fbb, - const std::vector *array = nullptr) { - auto array__ = array ? _fbb.CreateVector(*array) : 0; - return p2p::CreateByteArray( - _fbb, - array__); -} - struct Content FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_MESSAGE_TYPE = 4, @@ -439,11 +315,11 @@ struct Proposal_Message FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { flatbuffers::Vector *mutable_lcl() { return GetPointer *>(VT_LCL); } - const flatbuffers::Vector> *users() const { - return GetPointer> *>(VT_USERS); + const flatbuffers::Vector> *users() const { + return GetPointer> *>(VT_USERS); } - flatbuffers::Vector> *mutable_users() { - return GetPointer> *>(VT_USERS); + flatbuffers::Vector> *mutable_users() { + return GetPointer> *>(VT_USERS); } const flatbuffers::Vector> *raw_inputs() const { return GetPointer> *>(VT_RAW_INPUTS); @@ -451,11 +327,11 @@ struct Proposal_Message FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { flatbuffers::Vector> *mutable_raw_inputs() { return GetPointer> *>(VT_RAW_INPUTS); } - const flatbuffers::Vector> *hash_inputs() const { - return GetPointer> *>(VT_HASH_INPUTS); + const flatbuffers::Vector> *hash_inputs() const { + return GetPointer> *>(VT_HASH_INPUTS); } - flatbuffers::Vector> *mutable_hash_inputs() { - return GetPointer> *>(VT_HASH_INPUTS); + flatbuffers::Vector> *mutable_hash_inputs() { + return GetPointer> *>(VT_HASH_INPUTS); } const flatbuffers::Vector> *raw_outputs() const { return GetPointer> *>(VT_RAW_OUTPUTS); @@ -463,11 +339,11 @@ struct Proposal_Message FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { flatbuffers::Vector> *mutable_raw_outputs() { return GetPointer> *>(VT_RAW_OUTPUTS); } - const flatbuffers::Vector> *hash_outputs() const { - return GetPointer> *>(VT_HASH_OUTPUTS); + const flatbuffers::Vector> *hash_outputs() const { + return GetPointer> *>(VT_HASH_OUTPUTS); } - flatbuffers::Vector> *mutable_hash_outputs() { - return GetPointer> *>(VT_HASH_OUTPUTS); + flatbuffers::Vector> *mutable_hash_outputs() { + return GetPointer> *>(VT_HASH_OUTPUTS); } const State *state() const { return GetPointer(VT_STATE); @@ -514,19 +390,19 @@ struct Proposal_MessageBuilder { void add_lcl(flatbuffers::Offset> lcl) { fbb_.AddOffset(Proposal_Message::VT_LCL, lcl); } - void add_users(flatbuffers::Offset>> users) { + void add_users(flatbuffers::Offset>> users) { fbb_.AddOffset(Proposal_Message::VT_USERS, users); } void add_raw_inputs(flatbuffers::Offset>> raw_inputs) { fbb_.AddOffset(Proposal_Message::VT_RAW_INPUTS, raw_inputs); } - void add_hash_inputs(flatbuffers::Offset>> hash_inputs) { + void add_hash_inputs(flatbuffers::Offset>> hash_inputs) { fbb_.AddOffset(Proposal_Message::VT_HASH_INPUTS, hash_inputs); } void add_raw_outputs(flatbuffers::Offset>> raw_outputs) { fbb_.AddOffset(Proposal_Message::VT_RAW_OUTPUTS, raw_outputs); } - void add_hash_outputs(flatbuffers::Offset>> hash_outputs) { + void add_hash_outputs(flatbuffers::Offset>> hash_outputs) { fbb_.AddOffset(Proposal_Message::VT_HASH_OUTPUTS, hash_outputs); } void add_state(flatbuffers::Offset state) { @@ -549,11 +425,11 @@ inline flatbuffers::Offset CreateProposal_Message( int8_t stage = 0, uint64_t time = 0, flatbuffers::Offset> lcl = 0, - flatbuffers::Offset>> users = 0, + flatbuffers::Offset>> users = 0, flatbuffers::Offset>> raw_inputs = 0, - flatbuffers::Offset>> hash_inputs = 0, + flatbuffers::Offset>> hash_inputs = 0, flatbuffers::Offset>> raw_outputs = 0, - flatbuffers::Offset>> hash_outputs = 0, + flatbuffers::Offset>> hash_outputs = 0, flatbuffers::Offset state = 0) { Proposal_MessageBuilder builder_(_fbb); builder_.add_time(time); @@ -573,19 +449,19 @@ inline flatbuffers::Offset CreateProposal_MessageDirect( int8_t stage = 0, uint64_t time = 0, const std::vector *lcl = nullptr, - const std::vector> *users = nullptr, + const std::vector> *users = nullptr, const std::vector> *raw_inputs = nullptr, - const std::vector> *hash_inputs = nullptr, + const std::vector> *hash_inputs = nullptr, const std::vector> *raw_outputs = nullptr, - const std::vector> *hash_outputs = nullptr, + const std::vector> *hash_outputs = nullptr, flatbuffers::Offset state = 0) { auto lcl__ = lcl ? _fbb.CreateVector(*lcl) : 0; - auto users__ = users ? _fbb.CreateVector>(*users) : 0; + auto users__ = users ? _fbb.CreateVector>(*users) : 0; auto raw_inputs__ = raw_inputs ? _fbb.CreateVector>(*raw_inputs) : 0; - auto hash_inputs__ = hash_inputs ? _fbb.CreateVector>(*hash_inputs) : 0; + auto hash_inputs__ = hash_inputs ? _fbb.CreateVector>(*hash_inputs) : 0; auto raw_outputs__ = raw_outputs ? _fbb.CreateVector>(*raw_outputs) : 0; - auto hash_outputs__ = hash_outputs ? _fbb.CreateVector>(*hash_outputs) : 0; - return p2p::CreateProposal_Message( + auto hash_outputs__ = hash_outputs ? _fbb.CreateVector>(*hash_outputs) : 0; + return fbschema::p2pmsg::CreateProposal_Message( _fbb, stage, time, @@ -692,7 +568,7 @@ inline flatbuffers::Offset CreateNpl_MessageDirect( auto pubkey__ = pubkey ? _fbb.CreateVector(*pubkey) : 0; auto data__ = data ? _fbb.CreateVector(*data) : 0; auto lcl__ = lcl ? _fbb.CreateVector(*lcl) : 0; - return p2p::CreateNpl_Message( + return fbschema::p2pmsg::CreateNpl_Message( _fbb, pubkey__, timestamp, @@ -706,23 +582,23 @@ struct StateDifference FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { VT_UPDATED = 6, VT_DELETED = 8 }; - const flatbuffers::Vector> *created() const { - return GetPointer> *>(VT_CREATED); + const flatbuffers::Vector> *created() const { + return GetPointer> *>(VT_CREATED); } - flatbuffers::Vector> *mutable_created() { - return GetPointer> *>(VT_CREATED); + flatbuffers::Vector> *mutable_created() { + return GetPointer> *>(VT_CREATED); } - const flatbuffers::Vector> *updated() const { - return GetPointer> *>(VT_UPDATED); + const flatbuffers::Vector> *updated() const { + return GetPointer> *>(VT_UPDATED); } - flatbuffers::Vector> *mutable_updated() { - return GetPointer> *>(VT_UPDATED); + flatbuffers::Vector> *mutable_updated() { + return GetPointer> *>(VT_UPDATED); } - const flatbuffers::Vector> *deleted() const { - return GetPointer> *>(VT_DELETED); + const flatbuffers::Vector> *deleted() const { + return GetPointer> *>(VT_DELETED); } - flatbuffers::Vector> *mutable_deleted() { - return GetPointer> *>(VT_DELETED); + flatbuffers::Vector> *mutable_deleted() { + return GetPointer> *>(VT_DELETED); } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && @@ -742,13 +618,13 @@ struct StateDifference FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { struct StateDifferenceBuilder { flatbuffers::FlatBufferBuilder &fbb_; flatbuffers::uoffset_t start_; - void add_created(flatbuffers::Offset>> created) { + void add_created(flatbuffers::Offset>> created) { fbb_.AddOffset(StateDifference::VT_CREATED, created); } - void add_updated(flatbuffers::Offset>> updated) { + void add_updated(flatbuffers::Offset>> updated) { fbb_.AddOffset(StateDifference::VT_UPDATED, updated); } - void add_deleted(flatbuffers::Offset>> deleted) { + void add_deleted(flatbuffers::Offset>> deleted) { fbb_.AddOffset(StateDifference::VT_DELETED, deleted); } explicit StateDifferenceBuilder(flatbuffers::FlatBufferBuilder &_fbb) @@ -765,9 +641,9 @@ struct StateDifferenceBuilder { inline flatbuffers::Offset CreateStateDifference( flatbuffers::FlatBufferBuilder &_fbb, - flatbuffers::Offset>> created = 0, - flatbuffers::Offset>> updated = 0, - flatbuffers::Offset>> deleted = 0) { + flatbuffers::Offset>> created = 0, + flatbuffers::Offset>> updated = 0, + flatbuffers::Offset>> deleted = 0) { StateDifferenceBuilder builder_(_fbb); builder_.add_deleted(deleted); builder_.add_updated(updated); @@ -777,13 +653,13 @@ inline flatbuffers::Offset CreateStateDifference( inline flatbuffers::Offset CreateStateDifferenceDirect( flatbuffers::FlatBufferBuilder &_fbb, - const std::vector> *created = nullptr, - const std::vector> *updated = nullptr, - const std::vector> *deleted = nullptr) { - auto created__ = created ? _fbb.CreateVector>(*created) : 0; - auto updated__ = updated ? _fbb.CreateVector>(*updated) : 0; - auto deleted__ = deleted ? _fbb.CreateVector>(*deleted) : 0; - return p2p::CreateStateDifference( + const std::vector> *created = nullptr, + const std::vector> *updated = nullptr, + const std::vector> *deleted = nullptr) { + auto created__ = created ? _fbb.CreateVector>(*created) : 0; + auto updated__ = updated ? _fbb.CreateVector>(*updated) : 0; + auto deleted__ = deleted ? _fbb.CreateVector>(*deleted) : 0; + return fbschema::p2pmsg::CreateStateDifference( _fbb, created__, updated__, @@ -815,11 +691,11 @@ struct State FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { StateDifference *mutable_difference() { return GetPointer(VT_DIFFERENCE); } - const flatbuffers::Vector> *patch() const { - return GetPointer> *>(VT_PATCH); + const flatbuffers::Vector> *patch() const { + return GetPointer> *>(VT_PATCH); } - flatbuffers::Vector> *mutable_patch() { - return GetPointer> *>(VT_PATCH); + flatbuffers::Vector> *mutable_patch() { + return GetPointer> *>(VT_PATCH); } bool Verify(flatbuffers::Verifier &verifier) const { return VerifyTableStart(verifier) && @@ -848,7 +724,7 @@ struct StateBuilder { void add_difference(flatbuffers::Offset difference) { fbb_.AddOffset(State::VT_DIFFERENCE, difference); } - void add_patch(flatbuffers::Offset>> patch) { + void add_patch(flatbuffers::Offset>> patch) { fbb_.AddOffset(State::VT_PATCH, patch); } explicit StateBuilder(flatbuffers::FlatBufferBuilder &_fbb) @@ -868,7 +744,7 @@ inline flatbuffers::Offset CreateState( flatbuffers::Offset> previous = 0, flatbuffers::Offset> current = 0, flatbuffers::Offset difference = 0, - flatbuffers::Offset>> patch = 0) { + flatbuffers::Offset>> patch = 0) { StateBuilder builder_(_fbb); builder_.add_patch(patch); builder_.add_difference(difference); @@ -882,11 +758,11 @@ inline flatbuffers::Offset CreateStateDirect( const std::vector *previous = nullptr, const std::vector *current = nullptr, flatbuffers::Offset difference = 0, - const std::vector> *patch = nullptr) { + const std::vector> *patch = nullptr) { auto previous__ = previous ? _fbb.CreateVector(*previous) : 0; auto current__ = current ? _fbb.CreateVector(*current) : 0; - auto patch__ = patch ? _fbb.CreateVector>(*patch) : 0; - return p2p::CreateState( + auto patch__ = patch ? _fbb.CreateVector>(*patch) : 0; + return fbschema::p2pmsg::CreateState( _fbb, previous__, current__, @@ -923,12 +799,12 @@ inline bool VerifyMessageVector(flatbuffers::Verifier &verifier, const flatbuffe return true; } -inline const p2p::Content *GetContent(const void *buf) { - return flatbuffers::GetRoot(buf); +inline const fbschema::p2pmsg::Content *GetContent(const void *buf) { + return flatbuffers::GetRoot(buf); } -inline const p2p::Content *GetSizePrefixedContent(const void *buf) { - return flatbuffers::GetSizePrefixedRoot(buf); +inline const fbschema::p2pmsg::Content *GetSizePrefixedContent(const void *buf) { + return flatbuffers::GetSizePrefixedRoot(buf); } inline Content *GetMutableContent(void *buf) { @@ -937,26 +813,27 @@ inline Content *GetMutableContent(void *buf) { inline bool VerifyContentBuffer( flatbuffers::Verifier &verifier) { - return verifier.VerifyBuffer(nullptr); + return verifier.VerifyBuffer(nullptr); } inline bool VerifySizePrefixedContentBuffer( flatbuffers::Verifier &verifier) { - return verifier.VerifySizePrefixedBuffer(nullptr); + return verifier.VerifySizePrefixedBuffer(nullptr); } inline void FinishContentBuffer( flatbuffers::FlatBufferBuilder &fbb, - flatbuffers::Offset root) { + flatbuffers::Offset root) { fbb.Finish(root); } inline void FinishSizePrefixedContentBuffer( flatbuffers::FlatBufferBuilder &fbb, - flatbuffers::Offset root) { + flatbuffers::Offset root) { fbb.FinishSizePrefixed(root); } -} // namespace p2p +} // namespace p2pmsg +} // namespace fbschema -#endif // FLATBUFFERS_GENERATED_MESSAGECONTENT_P2P_H_ +#endif // FLATBUFFERS_GENERATED_P2PMSGCONTENT_FBSCHEMA_P2PMSG_H_ diff --git a/src/p2p/peer_message_handler.cpp b/src/fbschema/p2pmsg_helpers.cpp similarity index 81% rename from src/p2p/peer_message_handler.cpp rename to src/fbschema/p2pmsg_helpers.cpp index 5f92091e..d8550145 100644 --- a/src/p2p/peer_message_handler.cpp +++ b/src/fbschema/p2pmsg_helpers.cpp @@ -4,11 +4,13 @@ #include "../crypto.hpp" #include "../util.hpp" #include "../hplog.hpp" -#include "peer_message_handler.hpp" -#include "message_content_generated.h" -#include "message_container_generated.h" +#include "../p2p/p2p.hpp" +#include "p2pmsg_container_generated.h" +#include "p2pmsg_content_generated.h" +#include "common_helpers.hpp" +#include "p2pmsg_helpers.hpp" -namespace p2p +namespace fbschema::p2pmsg { /** @@ -160,9 +162,9 @@ int validate_and_extract_content(const Content **content_ref, const uint8_t *con * @param The Flatbuffer poporal received from the peer. * @return A proposal struct representing the message. */ -const proposal create_proposal_from_msg(const Proposal_Message &msg, const flatbuffers::Vector *pubkey) +const p2p::proposal create_proposal_from_msg(const Proposal_Message &msg, const flatbuffers::Vector *pubkey) { - proposal p; + p2p::proposal p; p.pubkey = flatbuff_bytes_to_sv(pubkey); p.time = msg.time(); @@ -196,7 +198,7 @@ const proposal create_proposal_from_msg(const Proposal_Message &msg, const flatb * @param container_builder Flatbuffer builder for the container message. * @param p The proposal struct to be placed in the container message. */ -void create_msg_from_proposal(flatbuffers::FlatBufferBuilder &container_builder, const proposal &p) +void create_msg_from_proposal(flatbuffers::FlatBufferBuilder &container_builder, const p2p::proposal &p) { // todo:get a average propsal message size and allocate content builder based on that. flatbuffers::FlatBufferBuilder builder(1024); @@ -264,48 +266,6 @@ void create_containermsg_from_content( //---Conversion helpers from flatbuffers data types to std data types---// -/** - * Returns string_view from flat buffer data pointer and length. - */ -std::string_view flatbuff_bytes_to_sv(const uint8_t *data, flatbuffers::uoffset_t length) -{ - const char *signature_content_str = reinterpret_cast(data); - return std::string_view(signature_content_str, length); -} - -/** - * Returns return string_view from Flat Buffer vector of bytes. - */ -std::string_view flatbuff_bytes_to_sv(const flatbuffers::Vector *buffer) -{ - return flatbuff_bytes_to_sv(buffer->Data(), buffer->size()); -} - -/** - * Returns set from Flatbuffer vector of ByteArrays. - */ -const std::unordered_set flatbuf_bytearrayvector_to_stringlist(const flatbuffers::Vector> *fbvec) -{ - std::unordered_set set; - set.reserve(fbvec->size()); - for (auto el : *fbvec) - set.emplace(std::string(flatbuff_bytes_to_sv(el->array()))); - return set; -} - -/** - * Returns a map from Flatbuffer vector of key value pairs. - */ -const std::unordered_map -flatbuf_pairvector_to_stringmap(const flatbuffers::Vector> *fbvec) -{ - std::unordered_map map; - map.reserve(fbvec->size()); - for (auto el : *fbvec) - map.emplace(flatbuff_bytes_to_sv(el->key()), flatbuff_bytes_to_sv(el->value())); - return map; -} - /** * Returns a hash buffer map from Flatbuffer proposal raw inputs. */ @@ -355,46 +315,6 @@ flatbuf_rawoutputs_to_hashbuffermap(const flatbuffers::Vector> -sv_to_flatbuff_bytes(flatbuffers::FlatBufferBuilder &builder, std::string_view sv) -{ - return builder.CreateVector(reinterpret_cast(sv.data()), sv.size()); -} - -/** - * Returns Flatbuffer vector of ByteArrays from given set of strings. - */ -const flatbuffers::Offset>> -stringlist_to_flatbuf_bytearrayvector(flatbuffers::FlatBufferBuilder &builder, const std::unordered_set &set) -{ - std::vector> fbvec; - fbvec.reserve(set.size()); - for (std::string_view str : set) - fbvec.push_back(CreateByteArray(builder, sv_to_flatbuff_bytes(builder, str))); - return builder.CreateVector(fbvec); -} - -/** - * Returns Flatbuffer vector of key value pairs from given map. - */ -const flatbuffers::Offset>> -stringmap_to_flatbuf_bytepairvector(flatbuffers::FlatBufferBuilder &builder, const std::unordered_map &map) -{ - std::vector> fbvec; - fbvec.reserve(map.size()); - for (auto const &[key, value] : map) - { - fbvec.push_back(CreateBytesKeyValuePair( - builder, - sv_to_flatbuff_bytes(builder, key), - sv_to_flatbuff_bytes(builder, value))); - } - return builder.CreateVector(fbvec); -} - /** * Returns Flatbuffer vector of RawInputs from a given map of hash buffer lists. */ diff --git a/src/p2p/peer_message_handler.hpp b/src/fbschema/p2pmsg_helpers.hpp similarity index 52% rename from src/p2p/peer_message_handler.hpp rename to src/fbschema/p2pmsg_helpers.hpp index e7f2fb41..7b6f9dab 100644 --- a/src/p2p/peer_message_handler.hpp +++ b/src/fbschema/p2pmsg_helpers.hpp @@ -1,16 +1,16 @@ -#ifndef _HP_PEER_MESSAGE_HANDLER_H_ -#define _HP_PEER_MESSAGE_HANDLER_H_ +#ifndef _HP_FBSCHEMA_P2PMSG_HELPERS_H_ +#define _HP_FBSCHEMA_P2PMSG_HELPERS_H_ #include #include -#include "message_content_generated.h" -#include "message_container_generated.h" -#include "p2p.hpp" +#include "p2pmsg_container_generated.h" +#include "p2pmsg_content_generated.h" +#include "../p2p/p2p.hpp" -namespace p2p +namespace fbschema::p2pmsg { /** - * This section contains Flatbuffer message reading/writing helpers. + * This section contains Flatbuffer p2p message reading/writing helpers. */ //---Message validation and reading helpers---/ @@ -21,27 +21,17 @@ int validate_container_trust(const Container *container); int validate_and_extract_content(const Content **content_ref, const uint8_t *content_ptr, flatbuffers::uoffset_t content_size); -const proposal create_proposal_from_msg(const Proposal_Message &msg, const flatbuffers::Vector *pubkey); +const p2p::proposal create_proposal_from_msg(const Proposal_Message &msg, const flatbuffers::Vector *pubkey); //---Message creation helpers---// -void create_msg_from_proposal(flatbuffers::FlatBufferBuilder &container_builder, const proposal &p); +void create_msg_from_proposal(flatbuffers::FlatBufferBuilder &container_builder, const p2p::proposal &p); void create_containermsg_from_content( flatbuffers::FlatBufferBuilder &container_builder, const flatbuffers::FlatBufferBuilder &content_builder, bool sign); //---Conversion helpers from flatbuffers data types to std data types---// -std::string_view flatbuff_bytes_to_sv(const uint8_t *data, flatbuffers::uoffset_t length); - -std::string_view flatbuff_bytes_to_sv(const flatbuffers::Vector *buffer); - -const std::unordered_set -flatbuf_bytearrayvector_to_stringlist(const flatbuffers::Vector> *fbvec); - -const std::unordered_map -flatbuf_pairvector_to_stringmap(const flatbuffers::Vector> *fbvec); - const std::unordered_map> flatbuf_rawinputs_to_hashbuffermap(const flatbuffers::Vector> *fbvec); @@ -50,15 +40,6 @@ flatbuf_rawoutputs_to_hashbuffermap(const flatbuffers::Vector> -sv_to_flatbuff_bytes(flatbuffers::FlatBufferBuilder &builder, std::string_view sv); - -const flatbuffers::Offset>> -stringlist_to_flatbuf_bytearrayvector(flatbuffers::FlatBufferBuilder &builder, const std::unordered_set &set); - -const flatbuffers::Offset>> -stringmap_to_flatbuf_bytepairvector(flatbuffers::FlatBufferBuilder &builder, const std::unordered_map &map); - const flatbuffers::Offset>> hashbuffermap_to_flatbuf_rawinputs(flatbuffers::FlatBufferBuilder &builder, const std::unordered_map> &map); diff --git a/src/p2p/p2p.cpp b/src/p2p/p2p.cpp index 9d766ec6..3b0a580a 100644 --- a/src/p2p/p2p.cpp +++ b/src/p2p/p2p.cpp @@ -6,6 +6,7 @@ #include "../util.hpp" #include "../hplog.hpp" #include "p2p.hpp" +#include "peer_session_handler.hpp" namespace ssl = boost::asio::ssl; // from diff --git a/src/p2p/peer_session_handler.cpp b/src/p2p/peer_session_handler.cpp index 4efd81f5..8d5db921 100644 --- a/src/p2p/peer_session_handler.cpp +++ b/src/p2p/peer_session_handler.cpp @@ -4,11 +4,13 @@ #include "../crypto.hpp" #include "../util.hpp" #include "../hplog.hpp" +#include "../fbschema/p2pmsg_container_generated.h" +#include "../fbschema/p2pmsg_content_generated.h" +#include "../fbschema/p2pmsg_helpers.hpp" #include "p2p.hpp" #include "peer_session_handler.hpp" -#include "peer_message_handler.hpp" -#include "message_content_generated.h" -#include "message_container_generated.h" + +namespace p2pmsg = fbschema::p2pmsg; namespace p2p { @@ -40,7 +42,7 @@ void peer_session_handler::on_connect(sock::socket_sessionflags[util::SESSION_FLAG::INBOUND]) { - // We init the session unique id to associate with the challenge. + // We init the session unique id to associate with the peer. session->init_uniqueid(); { std::lock_guard lock(p2p::peer_connections_mutex); @@ -48,23 +50,14 @@ void peer_session_handler::on_connect(sock::socket_sessionuniqueid; } - else - { - // todo: set container builder defualt builder size to combination of serialized content length + signature length(which is fixed) - // peer_outbound_message msg(std::make_shared(1024)); - - // proposal p; - // create_msg_from_proposal(msg.builder(), p); - // session->send(msg); - } } //peer session on message callback method //validate and handle each type of peer messages. void peer_session_handler::on_message(sock::socket_session *session, std::string_view message) { - const Container *container; - if (validate_and_extract_container(&container, message) != 0) + const p2pmsg::Container *container; + if (p2pmsg::validate_and_extract_container(&container, message) != 0) return; //Get serialised message content. @@ -74,16 +67,16 @@ void peer_session_handler::on_message(sock::socket_sessionData(); flatbuffers::uoffset_t content_size = container_content->size(); - const Content *content; - if (validate_and_extract_content(&content, content_ptr, content_size) != 0) + const p2pmsg::Content *content; + if (p2pmsg::validate_and_extract_content(&content, content_ptr, content_size) != 0) return; - p2p::Message content_message_type = content->message_type(); //i.e - proposal, npl, state request, state response, etc + p2pmsg::Message content_message_type = content->message_type(); //i.e - proposal, npl, state request, state response, etc - if (content_message_type == Message_Proposal_Message) //message is a proposal message + if (content_message_type == p2pmsg::Message_Proposal_Message) //message is a proposal message { // We only trust proposals coming from trusted peers. - if (validate_container_trust(container) != 0) + if (p2pmsg::validate_container_trust(container) != 0) { LOG_DBG << "Proposal rejected due to trust failure."; return; @@ -92,11 +85,11 @@ void peer_session_handler::on_message(sock::socket_session lock(collected_msgs.proposals_mutex); // Insert proposal with lock. collected_msgs.proposals.push_back( - create_proposal_from_msg(*content->message_as_Proposal_Message(), container->pubkey())); + p2pmsg::create_proposal_from_msg(*content->message_as_Proposal_Message(), container->pubkey())); } - else if (content_message_type == Message_Npl_Message) //message is a NPL message + else if (content_message_type == p2pmsg::Message_Npl_Message) //message is a NPL message { - const Npl_Message *npl = content->message_as_Npl_Message(); + const p2pmsg::Npl_Message *npl = content->message_as_Npl_Message(); // execute npl logic here. //broadcast message. }