Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F2901605
D3114.id9325.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
D3114.id9325.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Sun, Oct 6, 1:29 PM (21 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2249799
Default Alt Text
D3114.id9325.diff (6 KB)
Attached To
Mode
D3114: [services] Tunnelbroker - Database entities for messages.
Attached
Detach File
Event Timeline
Log In to Comment