summaryrefslogtreecommitdiff
path: root/chromium/third_party/nearby/src/cpp/platform/base/medium_environment.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/nearby/src/cpp/platform/base/medium_environment.h')
-rw-r--r--chromium/third_party/nearby/src/cpp/platform/base/medium_environment.h321
1 files changed, 0 insertions, 321 deletions
diff --git a/chromium/third_party/nearby/src/cpp/platform/base/medium_environment.h b/chromium/third_party/nearby/src/cpp/platform/base/medium_environment.h
deleted file mode 100644
index 3924b6e611f..00000000000
--- a/chromium/third_party/nearby/src/cpp/platform/base/medium_environment.h
+++ /dev/null
@@ -1,321 +0,0 @@
-// Copyright 2020 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// https://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef PLATFORM_BASE_MEDIUM_ENVIRONMENT_H_
-#define PLATFORM_BASE_MEDIUM_ENVIRONMENT_H_
-
-#include <atomic>
-#include <memory>
-
-#include "absl/container/flat_hash_map.h"
-#include "absl/strings/string_view.h"
-#include "platform/api/ble.h"
-#include "platform/api/bluetooth_adapter.h"
-#include "platform/api/bluetooth_classic.h"
-#include "platform/api/webrtc.h"
-#include "platform/api/wifi_lan.h"
-#include "platform/base/byte_array.h"
-#include "platform/base/feature_flags.h"
-#include "platform/base/listeners.h"
-#include "platform/base/nsd_service_info.h"
-#include "platform/public/single_thread_executor.h"
-
-namespace location {
-namespace nearby {
-
-// Environment config that can control availability of certain mediums for
-// testing.
-struct EnvironmentConfig {
- // Control whether WEB_RTC medium is enabled in the environment.
- // This is currently set to false, due to http://b/139734036 that would lead
- // to flaky tests.
- bool webrtc_enabled = false;
-};
-
-// MediumEnvironment is a simulated environment which allows multiple instances
-// of simulated HW devices to "work" together as if they are physical.
-// For each medium type it provides necessary methods to implement
-// advertising, discovery and establishment of a data link.
-// NOTE: this code depends on public:types target.
-class MediumEnvironment {
- public:
- using BluetoothDiscoveryCallback =
- api::BluetoothClassicMedium::DiscoveryCallback;
- using BleDiscoveredPeripheralCallback =
- api::BleMedium::DiscoveredPeripheralCallback;
- using BleAcceptedConnectionCallback =
- api::BleMedium::AcceptedConnectionCallback;
- using OnSignalingMessageCallback =
- api::WebRtcSignalingMessenger::OnSignalingMessageCallback;
- using OnSignalingCompleteCallback =
- api::WebRtcSignalingMessenger::OnSignalingCompleteCallback;
- using WifiLanDiscoveredServiceCallback =
- api::WifiLanMedium::DiscoveredServiceCallback;
-
- MediumEnvironment(const MediumEnvironment&) = delete;
- MediumEnvironment& operator=(const MediumEnvironment&) = delete;
-
- // Creates and returns a reference to the global test environment instance.
- static MediumEnvironment& Instance();
-
- // Global ON/OFF switch for medium environment.
- // Start & Stop work as On/Off switch for this object.
- // Default state (after creation) is ON, to make it compatible with early
- // tests that are already using it and relying on it being ON.
-
- // Enables Medium environment.
- void Start(EnvironmentConfig config = EnvironmentConfig());
- // Disables Medium environment.
- void Stop();
-
- // Clears state. No notifications are sent.
- void Reset();
-
- // Waits for all previously scheduled jobs to finish.
- // This method works as a barrier that guarantees that after it returns, all
- // the activities that started before it was called, or while it was running
- // are ended. This means that system is at the state of relaxation when this
- // code returns. It requires external stimulus to get out of relaxation state.
- //
- // If enable_notifications is true (default), simulation environment
- // will send all future notification events to all registered objects,
- // whenever protocol requires that. This is expected behavior.
- // If enabled_notifications is false, future event notifications will not be
- // sent to registered instances. This is useful for protocol shutdown,
- // where we no longer care about notifications, and where notifications may
- // otherwise be delivered after the notification source or target lifeteme has
- // ended, and cause undefined behavior.
- void Sync(bool enable_notifications = true);
-
- // Adds an adapter to internal container.
- // Notify BluetoothClassicMediums if any that adapter state has changed.
- void OnBluetoothAdapterChangedState(api::BluetoothAdapter& adapter,
- api::BluetoothDevice& adapter_device,
- std::string name, bool enabled,
- api::BluetoothAdapter::ScanMode mode);
-
- // Adds medium-related info to allow for adapter discovery to work.
- // This provides acccess to this medium from other mediums, when protocol
- // expects they should communicate.
- void RegisterBluetoothMedium(api::BluetoothClassicMedium& medium,
- api::BluetoothAdapter& medium_adapter);
-
- // Updates callback info to allow for dispatch of discovery events.
- //
- // Invokes callback asynchronously when any changes happen to discoverable
- // devices, or if the defice is turned off, whether or not it is discoverable,
- // if it was ever reported as discoverable.
- //
- // This should be called when discoverable state changes.
- // with user-specified callback when discovery is enabled, and with default
- // (empty) callback otherwise.
- void UpdateBluetoothMedium(api::BluetoothClassicMedium& medium,
- BluetoothDiscoveryCallback callback);
-
- // Removes medium-related info. This should correspond to device power off.
- void UnregisterBluetoothMedium(api::BluetoothClassicMedium& medium);
-
- // Returns a Bluetooth Device object matching given mac address to nullptr.
- api::BluetoothDevice* FindBluetoothDevice(const std::string& mac_address);
-
- const EnvironmentConfig& GetEnvironmentConfig();
-
- // Registers |message_callback| to receive messages sent to device with id
- // |self_id|, and |complete_callback| to notify when signaling is complete.
- void RegisterWebRtcSignalingMessenger(
- absl::string_view self_id, OnSignalingMessageCallback message_callback,
- OnSignalingCompleteCallback complete_callback);
-
- // Unregisters the callback listening to incoming messages for |self_id|.
- void UnregisterWebRtcSignalingMessenger(absl::string_view self_id);
-
- // Simulates sending a signaling message |message| to device with id
- // |peer_id|.
- void SendWebRtcSignalingMessage(absl::string_view peer_id,
- const ByteArray& message);
-
- // Simulates sending an "signaling complete" signal to the WebRTC medium.
- void SendWebRtcSignalingComplete(absl::string_view peer_id, bool success);
-
- // Used to set if WebRtcMedium should use a valid peer connection or nullptr
- // in tests.
- void SetUseValidPeerConnection(bool use_valid_peer_connection);
-
- bool GetUseValidPeerConnection();
-
- // Used to set latency when creating the peer connection in tests.
- void SetPeerConnectionLatency(absl::Duration peer_connection_latency);
-
- absl::Duration GetPeerConnectionLatency();
-
- // Adds medium-related info to allow for scanning/advertising to work.
- // This provides acccess to this medium from other mediums, when protocol
- // expects they should communicate.
- void RegisterBleMedium(api::BleMedium& medium);
-
- // Updates advertising info to indicate the current medium is exposing
- // advertising event.
- void UpdateBleMediumForAdvertising(api::BleMedium& medium,
- api::BlePeripheral& peripheral,
- const std::string& service_id,
- bool fast_advertisement, bool enabled);
-
- // Updates discovery callback info to allow for dispatch of discovery events.
- //
- // Invokes callback asynchronously when any changes happen to discoverable
- // devices, or if the defice is turned off, whether or not it is discoverable,
- // if it was ever reported as discoverable.
- //
- // This should be called when discoverable state changes.
- // with user-specified callback when discovery is enabled, and with default
- // (empty) callback otherwise.
- void UpdateBleMediumForScanning(
- api::BleMedium& medium, const std::string& service_id,
- const std::string& fast_advertisement_service_uuid,
- BleDiscoveredPeripheralCallback callback, bool enabled);
-
- // Updates Accepted connection callback info to allow for dispatch of
- // advertising events.
- void UpdateBleMediumForAcceptedConnection(
- api::BleMedium& medium, const std::string& service_id,
- BleAcceptedConnectionCallback callback);
-
- // Removes medium-related info. This should correspond to device power off.
- void UnregisterBleMedium(api::BleMedium& medium);
-
- // Call back when advertising has created the server socket and is ready for
- // connect.
- void CallBleAcceptedConnectionCallback(api::BleMedium& medium,
- api::BleSocket& socket,
- const std::string& service_id);
-
- // Adds medium-related info to allow for discovery/advertising to work.
- // This provides acccess to this medium from other mediums, when protocol
- // expects they should communicate.
- void RegisterWifiLanMedium(api::WifiLanMedium& medium);
-
- // Updates advertising info to indicate the current medium is exposing
- // advertising event.
- void UpdateWifiLanMediumForAdvertising(api::WifiLanMedium& medium,
- const NsdServiceInfo& nsd_service_info,
- bool enabled);
-
- // Updates discovery callback info to allow for dispatch of discovery events.
- //
- // This should be called when discoverable state changes.
- // with user-specified callback when discovery is enabled, and with default
- // (empty) callback otherwise.
- void UpdateWifiLanMediumForDiscovery(
- api::WifiLanMedium& medium, WifiLanDiscoveredServiceCallback callback,
- const std::string& service_type, bool enabled);
-
- // Gets Fake IP address for WifiLan medium.
- std::string GetFakeIPAddress() const;
-
- // Gets Fake port number for WifiLan medium.
- int GetFakePort() const;
-
- // Removes medium-related info. This should correspond to device power off.
- void UnregisterWifiLanMedium(api::WifiLanMedium& medium);
-
- // Returns WifiLan medium whose advertising service matching IP address and
- // port, or nullptr.
- api::WifiLanMedium* GetWifiLanMedium(const std::string& ip_address, int port);
-
- void SetFeatureFlags(const FeatureFlags::Flags& flags);
-
- private:
- struct BluetoothMediumContext {
- BluetoothDiscoveryCallback callback;
- api::BluetoothAdapter* adapter = nullptr;
- // discovered device vs device name map.
- absl::flat_hash_map<api::BluetoothDevice*, std::string> devices;
- };
-
- struct BleMediumContext {
- BleDiscoveredPeripheralCallback discovery_callback;
- BleAcceptedConnectionCallback accepted_connection_callback;
- api::BlePeripheral* ble_peripheral = nullptr;
- bool advertising = false;
- bool fast_advertisement = false;
- };
-
- struct WifiLanMediumContext {
- // advertising service type vs NsdServiceInfo map.
- absl::flat_hash_map<std::string, NsdServiceInfo> advertising_services;
- // discovered service type vs callback map.
- absl::flat_hash_map<std::string, WifiLanDiscoveredServiceCallback>
- discovered_callbacks;
- // discovered service vs service type map.
- absl::flat_hash_map<std::string, NsdServiceInfo> discovered_services;
- };
-
- // This is a singleton object, for which destructor will never be called.
- // Constructor will be invoked once from Instance() static method.
- // Object is create in-place (with a placement new) to guarantee that
- // destructor is not scheduled for execution at exit.
- MediumEnvironment() = default;
- ~MediumEnvironment() = default;
-
- void OnBluetoothDeviceStateChanged(BluetoothMediumContext& info,
- api::BluetoothDevice& device,
- const std::string& name,
- api::BluetoothAdapter::ScanMode mode,
- bool enabled);
-
- void OnBlePeripheralStateChanged(BleMediumContext& info,
- api::BlePeripheral& peripheral,
- const std::string& service_id,
- bool fast_advertisement, bool enabled);
-
- void OnWifiLanServiceStateChanged(WifiLanMediumContext& info,
- const NsdServiceInfo& service_info,
- bool enabled);
-
- void RunOnMediumEnvironmentThread(std::function<void()> runnable);
-
- std::atomic_bool enabled_ = true;
- std::atomic_int job_count_ = 0;
- std::atomic_bool enable_notifications_ = false;
- SingleThreadExecutor executor_;
- EnvironmentConfig config_;
-
- // The following data members are accessed in the context of a private
- // executor_ thread.
- absl::flat_hash_map<api::BluetoothAdapter*, api::BluetoothDevice*>
- bluetooth_adapters_;
- absl::flat_hash_map<api::BluetoothClassicMedium*, BluetoothMediumContext>
- bluetooth_mediums_;
-
- absl::flat_hash_map<api::BleMedium*, BleMediumContext> ble_mediums_;
-
- // Maps peer id to callback for receiving signaling messages.
- absl::flat_hash_map<std::string, OnSignalingMessageCallback>
- webrtc_signaling_message_callback_;
-
- // Maps peer id to callback for signaling complete events.
- absl::flat_hash_map<std::string, OnSignalingCompleteCallback>
- webrtc_signaling_complete_callback_;
-
- absl::flat_hash_map<api::WifiLanMedium*, WifiLanMediumContext>
- wifi_lan_mediums_;
-
- bool use_valid_peer_connection_ = true;
- absl::Duration peer_connection_latency_ = absl::ZeroDuration();
-};
-
-} // namespace nearby
-} // namespace location
-
-#endif // PLATFORM_BASE_MEDIUM_ENVIRONMENT_H_