diff --git a/include/opendht/dht_proxy_client.h b/include/opendht/dht_proxy_client.h index c85ef9c839d2be19c5bfd52a150c6dbe02b9d741..f7dd0feadfdd9c23f58a0a488337b13251f73c58 100644 --- a/include/opendht/dht_proxy_client.h +++ b/include/opendht/dht_proxy_client.h @@ -67,13 +67,7 @@ public: 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 21dd6730c23ca76acf42aebe588b9d4054e1aaf2..6a1e6c54fb95694fe4127bb2c372ae70724fa8b4 100644 --- a/src/dht_proxy_client.cpp +++ b/src/dht_proxy_client.cpp @@ -1394,4 +1394,24 @@ DhtProxyClient::fillBody(bool resubscribe) } #endif // OPENDHT_PUSH_NOTIFICATIONS +void +DhtProxyClient::setPushNotificationToken([[maybe_unused]] const std::string& token) { +#ifdef OPENDHT_PUSH_NOTIFICATIONS + std::unique_lock<std::mutex> l(lockCurrentProxyInfos_); + if (deviceKey_ != token) { + deviceKey_ = token; + 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