summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/rtc_base/fake_mdns_responder.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/libwebrtc/rtc_base/fake_mdns_responder.h
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/rtc_base/fake_mdns_responder.h')
-rw-r--r--third_party/libwebrtc/rtc_base/fake_mdns_responder.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/third_party/libwebrtc/rtc_base/fake_mdns_responder.h b/third_party/libwebrtc/rtc_base/fake_mdns_responder.h
new file mode 100644
index 0000000000..706c11b913
--- /dev/null
+++ b/third_party/libwebrtc/rtc_base/fake_mdns_responder.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2018 The WebRTC Project Authors. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef RTC_BASE_FAKE_MDNS_RESPONDER_H_
+#define RTC_BASE_FAKE_MDNS_RESPONDER_H_
+
+#include <map>
+#include <memory>
+#include <string>
+
+#include "absl/strings/string_view.h"
+#include "rtc_base/ip_address.h"
+#include "rtc_base/mdns_responder_interface.h"
+#include "rtc_base/thread.h"
+
+namespace webrtc {
+
+// This class posts tasks on the given `thread` to invoke callbacks. It's the
+// callback's responsibility to be aware of potential destruction of state it
+// depends on, e.g., using WeakPtrFactory or PendingTaskSafetyFlag.
+class FakeMdnsResponder : public MdnsResponderInterface {
+ public:
+ explicit FakeMdnsResponder(rtc::Thread* thread) : thread_(thread) {}
+ ~FakeMdnsResponder() = default;
+
+ void CreateNameForAddress(const rtc::IPAddress& addr,
+ NameCreatedCallback callback) override {
+ std::string name;
+ if (addr_name_map_.find(addr) != addr_name_map_.end()) {
+ name = addr_name_map_[addr];
+ } else {
+ name = std::to_string(next_available_id_++) + ".local";
+ addr_name_map_[addr] = name;
+ }
+ thread_->PostTask([callback, addr, name]() { callback(addr, name); });
+ }
+ void RemoveNameForAddress(const rtc::IPAddress& addr,
+ NameRemovedCallback callback) override {
+ auto it = addr_name_map_.find(addr);
+ if (it != addr_name_map_.end()) {
+ addr_name_map_.erase(it);
+ }
+ bool result = it != addr_name_map_.end();
+ thread_->PostTask([callback, result]() { callback(result); });
+ }
+
+ rtc::IPAddress GetMappedAddressForName(absl::string_view name) const {
+ for (const auto& addr_name_pair : addr_name_map_) {
+ if (addr_name_pair.second == name) {
+ return addr_name_pair.first;
+ }
+ }
+ return rtc::IPAddress();
+ }
+
+ private:
+ uint32_t next_available_id_ = 0;
+ std::map<rtc::IPAddress, std::string> addr_name_map_;
+ rtc::Thread* const thread_;
+};
+
+} // namespace webrtc
+
+#endif // RTC_BASE_FAKE_MDNS_RESPONDER_H_