Page MenuHomePhabricator

D3114.id9429.diff
No OneTemporary

D3114.id9429.diff

diff --git a/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseEntitiesTools.h b/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseEntitiesTools.h
--- a/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseEntitiesTools.h
+++ b/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseEntitiesTools.h
@@ -2,6 +2,7 @@
#include "DeviceSessionItem.h"
#include "Item.h"
+#include "MessageItem.h"
#include "PublicKeyItem.h"
#include "SessionSignItem.h"
@@ -23,6 +24,8 @@
template <> std::shared_ptr<PublicKeyItem> createItemByType<PublicKeyItem>();
+template <> std::shared_ptr<MessageItem> createItemByType<MessageItem>();
+
} // namespace database
} // namespace network
} // namespace comm
diff --git a/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseEntitiesTools.cpp b/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseEntitiesTools.cpp
--- a/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseEntitiesTools.cpp
+++ b/services/tunnelbroker/docker-server/contents/server/src/Database/DatabaseEntitiesTools.cpp
@@ -18,6 +18,10 @@
return std::make_shared<PublicKeyItem>();
}
+template <> std::shared_ptr<MessageItem> createItemByType<MessageItem>() {
+ return std::make_shared<MessageItem>();
+}
+
} // namespace database
} // namespace network
} // namespace comm
diff --git a/services/tunnelbroker/docker-server/contents/server/src/Database/MessageItem.h b/services/tunnelbroker/docker-server/contents/server/src/Database/MessageItem.h
new file mode 100644
--- /dev/null
+++ b/services/tunnelbroker/docker-server/contents/server/src/Database/MessageItem.h
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "Item.h"
+
+#include <string>
+
+namespace comm {
+namespace network {
+namespace database {
+
+class MessageItem : public Item {
+ std::string messageID;
+ std::string fromDeviceID;
+ std::string toDeviceID;
+ std::string payload;
+ std::string blobHashes;
+ uint64_t expire;
+
+ void validate() const override;
+
+public:
+ static const std::string FIELD_MESSAGE_ID;
+ static const std::string FIELD_FROM_DEVICE_ID;
+ static const std::string FIELD_TO_DEVICE_ID;
+ static const std::string FIELD_PAYLOAD;
+ static const std::string FIELD_BLOB_HASHES;
+ static const std::string FIELD_EXPIRE;
+
+ std::string getPrimaryKey() const override;
+ std::string getTableName() const override;
+ std::string getMessageID() const;
+ std::string getFromDeviceID() const;
+ std::string getToDeviceID() const;
+ std::string getPayload() const;
+ std::string getBlobHashes() const;
+ uint64_t getExpire() const;
+
+ MessageItem() {
+ }
+ MessageItem(
+ const std::string messageID,
+ const std::string fromDeviceID,
+ const std::string toDeviceID,
+ const std::string payload,
+ const std::string blobHashes,
+ const uint64_t expire);
+ MessageItem(const AttributeValues &itemFromDB);
+ void assignItemFromDatabase(const AttributeValues &itemFromDB) override;
+};
+
+} // namespace database
+} // namespace network
+} // namespace comm
diff --git a/services/tunnelbroker/docker-server/contents/server/src/Database/MessageItem.cpp b/services/tunnelbroker/docker-server/contents/server/src/Database/MessageItem.cpp
new file mode 100644
--- /dev/null
+++ b/services/tunnelbroker/docker-server/contents/server/src/Database/MessageItem.cpp
@@ -0,0 +1,101 @@
+#include "MessageItem.h"
+#include "ConfigManager.h"
+
+namespace comm {
+namespace network {
+namespace database {
+
+const std::string MessageItem::FIELD_MESSAGE_ID = "MessageID";
+const std::string MessageItem::FIELD_FROM_DEVICE_ID = "FromDeviceID";
+const std::string MessageItem::FIELD_TO_DEVICE_ID = "ToDeviceID";
+const std::string MessageItem::FIELD_PAYLOAD = "Payload";
+const std::string MessageItem::FIELD_BLOB_HASHES = "BlobHashes";
+const std::string MessageItem::FIELD_EXPIRE = "Expire";
+
+MessageItem::MessageItem(
+ const std::string messageID,
+ const std::string fromDeviceID,
+ const std::string toDeviceID,
+ const std::string payload,
+ const std::string blobHashes,
+ const uint64_t expire)
+ : messageID(messageID),
+ fromDeviceID(fromDeviceID),
+ toDeviceID(toDeviceID),
+ payload(payload),
+ blobHashes(blobHashes),
+ expire(expire) {
+ this->validate();
+}
+
+MessageItem::MessageItem(const AttributeValues &itemFromDB) {
+ this->assignItemFromDatabase(itemFromDB);
+}
+
+void MessageItem::validate() const {
+ if (!this->messageID.size()) {
+ throw std::runtime_error("Error: messageID is empty");
+ }
+ if (!this->fromDeviceID.size()) {
+ throw std::runtime_error("Error: fromDeviceID is empty");
+ }
+ if (!this->toDeviceID.size()) {
+ throw std::runtime_error("Error: toDeviceID is empty");
+ }
+ if (!this->expire == 0) {
+ throw std::runtime_error("Error: expire field not provided");
+ }
+}
+
+void MessageItem::assignItemFromDatabase(const AttributeValues &itemFromDB) {
+ try {
+ this->messageID = itemFromDB.at(MessageItem::FIELD_MESSAGE_ID).GetS();
+ this->fromDeviceID =
+ itemFromDB.at(MessageItem::FIELD_FROM_DEVICE_ID).GetS();
+ this->toDeviceID = itemFromDB.at(MessageItem::FIELD_TO_DEVICE_ID).GetS();
+ this->payload = itemFromDB.at(MessageItem::FIELD_PAYLOAD).GetS();
+ this->blobHashes = itemFromDB.at(MessageItem::FIELD_BLOB_HASHES).GetS();
+ this->expire = std::stoull(itemFromDB.at(MessageItem::FIELD_EXPIRE).GetN());
+ } catch (const std::exception &e) {
+ throw std::runtime_error(
+ "Got an exception at MessageItem: " + std::string(e.what()));
+ }
+ this->validate();
+}
+
+std::string MessageItem::getTableName() const {
+ return config::ConfigManager::getInstance().getParameter(
+ config::ConfigManager::OPTION_DYNAMODB_MESSAGES_TABLE);
+}
+
+std::string MessageItem::getPrimaryKey() const {
+ return MessageItem::FIELD_MESSAGE_ID;
+}
+
+std::string MessageItem::getMessageID() const {
+ return this->messageID;
+}
+
+std::string MessageItem::getFromDeviceID() const {
+ return this->fromDeviceID;
+}
+
+std::string MessageItem::getToDeviceID() const {
+ return this->toDeviceID;
+}
+
+std::string MessageItem::getPayload() const {
+ return this->payload;
+}
+
+std::string MessageItem::getBlobHashes() const {
+ return this->blobHashes;
+}
+
+uint64_t MessageItem::getExpire() const {
+ return this->expire;
+}
+
+} // namespace database
+} // namespace network
+} // namespace comm

File Metadata

Mime Type
text/plain
Expires
Sun, Oct 6, 1:29 PM (21 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2249799
Default Alt Text
D3114.id9429.diff (6 KB)

Event Timeline