From b800012c57b0046dc36dc74e5d26f2f2795f3ffc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Thu, 8 Sep 2022 11:04:31 -0400
Subject: [PATCH] proxyserver: add topic to msgpack

---
 include/opendht/dht_proxy_server.h | 10 ++++++++--
 src/dht_proxy_server.cpp           |  6 ++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/include/opendht/dht_proxy_server.h b/include/opendht/dht_proxy_server.h
index 63d527c2..0c004938 100644
--- a/include/opendht/dht_proxy_server.h
+++ b/include/opendht/dht_proxy_server.h
@@ -392,7 +392,7 @@ private:
         template <typename Packer>
         void msgpack_pack(Packer& p) const
         {
-            p.pack_map(2 + (sessionCtx ? 1 : 0) + (clientId.empty() ? 0 : 1) + (type == PushType::None ? 0 : 2));
+            p.pack_map(2 + (sessionCtx ? 1 : 0) + (clientId.empty() ? 0 : 1) + (type == PushType::None ? 0 : 2) + (topic.empty() ? 0 : 1));
             p.pack("value"); p.pack(value);
             p.pack("exp"); p.pack(to_time_t(expiration));
             if (not clientId.empty()) {
@@ -406,6 +406,9 @@ private:
                 p.pack("t"); p.pack(type);
                 p.pack("token"); p.pack(pushToken);
             }
+            if (not topic.empty()) {
+                p.pack("top"); p.pack(topic);
+            }
         }
 
         void msgpack_unpack(const msgpack::object& o);
@@ -437,7 +440,7 @@ private:
         template <typename Packer>
         void msgpack_pack(Packer& p) const
         {
-            p.pack_map(sessionCtx ? 4 : 3);
+            p.pack_map(3 + (sessionCtx ? 1 : 0) + (topic.empty() ? 0 : 1));
             p.pack("cid"); p.pack(clientId);
             p.pack("exp"); p.pack(to_time_t(expiration));
             if (sessionCtx) {
@@ -445,6 +448,9 @@ private:
                 p.pack("sid"); p.pack(sessionCtx->sessionId);
             }
             p.pack("t"); p.pack(type);
+            if (!topic.empty()) {
+                p.pack("top"); p.pack(topic);
+            }
         }
 
         void msgpack_unpack(const msgpack::object& o);
diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp
index 515b72c9..0ea70d4d 100644
--- a/src/dht_proxy_server.cpp
+++ b/src/dht_proxy_server.cpp
@@ -173,6 +173,9 @@ DhtProxyServer::PermanentPut::msgpack_unpack(const msgpack::object& o)
     if (auto val = findMapValue(o, "value"sv)) {
         value = std::make_shared<dht::Value>(*val);
     }
+    if (auto top = findMapValue(o, "top"sv)) {
+        topic = top->as<std::string>();
+    }
 }
 
 #ifdef OPENDHT_PUSH_NOTIFICATIONS
@@ -194,6 +197,9 @@ DhtProxyServer::Listener::msgpack_unpack(const msgpack::object& o)
     if (auto t = findMapValue(o, "t"sv)) {
         type = t->as<PushType>();
     }
+    if (auto top = findMapValue(o, "top"sv)) {
+        topic = top->as<std::string>();
+    }
 }
 #endif
 
-- 
GitLab