From baad0b4ce7292e268c7d3ca399973ed9920cbe7b Mon Sep 17 00:00:00 2001 From: Adrien Beraud Date: Wed, 6 Nov 2024 16:50:08 -0500 Subject: [PATCH] proxy client: resubscribe on token change --- include/opendht/dht_proxy_client.h | 8 +------- src/dht_proxy_client.cpp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/include/opendht/dht_proxy_client.h b/include/opendht/dht_proxy_client.h index c85ef9c83..f7dd0fead 100644 --- a/include/opendht/dht_proxy_client.h +++ b/include/opendht/dht_proxy_client.h @@ -67,13 +67,7 @@ class OPENDHT_PUBLIC DhtProxyClient final : public DhtInterface { void setHeaderFields(http::Request& request); - virtual void setPushNotificationToken(const std::string& token) override { -#ifdef OPENDHT_PUSH_NOTIFICATIONS - deviceKey_ = token; -#else - (void) token; -#endif - } + virtual void setPushNotificationToken(const std::string& token) override; virtual void setPushNotificationTopic(const std::string& topic) override { #ifdef OPENDHT_PUSH_NOTIFICATIONS diff --git a/src/dht_proxy_client.cpp b/src/dht_proxy_client.cpp index 21dd6730c..e73e95462 100644 --- a/src/dht_proxy_client.cpp +++ b/src/dht_proxy_client.cpp @@ -1394,4 +1394,25 @@ DhtProxyClient::fillBody(bool resubscribe) } #endif // OPENDHT_PUSH_NOTIFICATIONS +void +DhtProxyClient::setPushNotificationToken([[maybe_unused]] const std::string& token) { +#ifdef OPENDHT_PUSH_NOTIFICATIONS + std::unique_lock l(lockCurrentProxyInfos_); + if (deviceKey_ != token) { + deviceKey_ = token; + auto status = ; + if (statusIpv4_ == NodeStatus::Connected || statusIpv6_ == NodeStatus::Connected) { + if (logger_) + logger_->d("[proxy:client] [push] token changed, resubscribing"); + for (auto& search : searches_) { + for (auto& listener : search.second.listeners) { + resubscribe(search.first, listener.first, listener.second); + } + } + } + } +#endif +} + + } // namespace dht