summaryrefslogtreecommitdiff
path: root/chromium/third_party/nearby/src/internal/platform/implementation/wifi_lan.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/nearby/src/internal/platform/implementation/wifi_lan.h')
-rw-r--r--chromium/third_party/nearby/src/internal/platform/implementation/wifi_lan.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/chromium/third_party/nearby/src/internal/platform/implementation/wifi_lan.h b/chromium/third_party/nearby/src/internal/platform/implementation/wifi_lan.h
new file mode 100644
index 00000000000..4d32c7a1428
--- /dev/null
+++ b/chromium/third_party/nearby/src/internal/platform/implementation/wifi_lan.h
@@ -0,0 +1,157 @@
+// 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_API_WIFI_LAN_H_
+#define PLATFORM_API_WIFI_LAN_H_
+
+#include <string>
+
+#include "internal/platform/cancellation_flag.h"
+#include "internal/platform/input_stream.h"
+#include "internal/platform/listeners.h"
+#include "internal/platform/nsd_service_info.h"
+#include "internal/platform/output_stream.h"
+
+namespace location {
+namespace nearby {
+namespace api {
+
+class WifiLanSocket {
+ public:
+ virtual ~WifiLanSocket() = default;
+
+ // Returns the InputStream of the WifiLanSocket.
+ // On error, returned stream will report Exception::kIo on any operation.
+ //
+ // The returned object is not owned by the caller, and can be invalidated once
+ // the WifiLanSocket object is destroyed.
+ virtual InputStream& GetInputStream() = 0;
+
+ // Returns the OutputStream of the WifiLanSocket.
+ // On error, returned stream will report Exception::kIo on any operation.
+ //
+ // The returned object is not owned by the caller, and can be invalidated once
+ // the WifiLanSocket object is destroyed.
+ virtual OutputStream& GetOutputStream() = 0;
+
+ // Returns Exception::kIo on error, Exception::kSuccess otherwise.
+ virtual Exception Close() = 0;
+};
+
+class WifiLanServerSocket {
+ public:
+ virtual ~WifiLanServerSocket() = default;
+
+ // Returns ip address.
+ virtual std::string GetIPAddress() const = 0;
+
+ // Returns port.
+ virtual int GetPort() const = 0;
+
+ // Blocks until either:
+ // - at least one incoming connection request is available, or
+ // - ServerSocket is closed.
+ // On success, returns connected socket, ready to exchange data.
+ // Returns nullptr on error.
+ // Once error is reported, it is permanent, and ServerSocket has to be closed.
+ virtual std::unique_ptr<WifiLanSocket> Accept() = 0;
+
+ // Returns Exception::kIo on error, Exception::kSuccess otherwise.
+ virtual Exception Close() = 0;
+};
+
+// Container of operations that can be performed over the WifiLan medium.
+class WifiLanMedium {
+ public:
+ virtual ~WifiLanMedium() = default;
+
+ // Starts WifiLan advertising.
+ //
+ // nsd_service_info - NsdServiceInfo data that's advertised through mDNS
+ // service.
+ // On success if the service is now advertising.
+ // On error if the service cannot start to advertise or the service type in
+ // NsdServiceInfo has been passed previously which StopAdvertising is not
+ // been called.
+ virtual bool StartAdvertising(const NsdServiceInfo& nsd_service_info) = 0;
+
+ // Stops WifiLan advertising.
+ //
+ // nsd_service_info - NsdServiceInfo data that's advertised through mDNS
+ // service.
+ // On success if the service stops advertising.
+ // On error if the service cannot stop advertising or the service type in
+ // NsdServiceInfo cannot be found.
+ virtual bool StopAdvertising(const NsdServiceInfo& nsd_service_info) = 0;
+
+ // Callback that is invoked when a discovered service is found or lost.
+ struct DiscoveredServiceCallback {
+ std::function<void(NsdServiceInfo service_info)> service_discovered_cb =
+ DefaultCallback<NsdServiceInfo>();
+ std::function<void(NsdServiceInfo service_info)> service_lost_cb =
+ DefaultCallback<NsdServiceInfo>();
+ };
+
+ // Starts the discovery of nearby WifiLan services.
+ //
+ // service_type - mDNS service type.
+ // callback - the instance of DiscoveredServiceCallback.
+ // Returns true once the WifiLan discovery has been initiated. The
+ // service_type is associated with callback.
+ virtual bool StartDiscovery(const std::string& service_type,
+ DiscoveredServiceCallback callback) = 0;
+
+ // Stops the discovery of nearby WifiLan services.
+ //
+ // service_type - The one assigned in StartDiscovery.
+ // On success if the service_type is matched to the callback and will be
+ // removed from the list. If list is empty then stops the WifiLan
+ // discovery service.
+ // On error if the service_type is not existed, then return immediately.
+ virtual bool StopDiscovery(const std::string& service_type) = 0;
+
+ // Connects to a WifiLan service.
+ // On success, returns a new WifiLanSocket.
+ // On error, returns nullptr.
+ virtual std::unique_ptr<WifiLanSocket> ConnectToService(
+ const NsdServiceInfo& remote_service_info,
+ CancellationFlag* cancellation_flag) = 0;
+
+ // Connects to a WifiLan service by ip address and port.
+ // On success, returns a new WifiLanSocket.
+ // On error, returns nullptr.
+ virtual std::unique_ptr<WifiLanSocket> ConnectToService(
+ const std::string& ip_address, int port,
+ CancellationFlag* cancellation_flag) = 0;
+
+ // Listens for incoming connection.
+ //
+ // port - A port number.
+ // 0 : use a random port.
+ // 1~65536 : open a server socket on that exact port.
+ // On success, returns a new WifiLanServerSocket.
+ // On error, returns nullptr.
+ virtual std::unique_ptr<WifiLanServerSocket> ListenForService(
+ int port = 0) = 0;
+
+ // Returns the port range as a pair of min and max port.
+ virtual absl::optional<std::pair<std::int32_t, std::int32_t>>
+ GetDynamicPortRange() = 0;
+};
+
+} // namespace api
+} // namespace nearby
+} // namespace location
+
+#endif // PLATFORM_API_WIFI_LAN_H_