diff --git a/connections/c/BUILD b/connections/c/BUILD index 87d68c1b..ca715b06 100644 --- a/connections/c/BUILD +++ b/connections/c/BUILD @@ -12,9 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -load("@bazel_skylib//:bzl_library.bzl", "bzl_library") load("//third_party/cpptoolchains/windows_llvm/build_defs:windows.bzl", "windows") -load("expand_version_template.bzl", "expand_version_template") package(default_visibility = [ "//connections:__subpackages__", @@ -23,95 +21,6 @@ package(default_visibility = [ licenses(["notice"]) -cc_library( - name = "types", - hdrs = [ - "dll_config.h", - ], - defines = ["CORE_ADAPTER_DLL"], - visibility = ["//visibility:private"], - deps = ["@com_google_absl//absl/strings"], -) - -bzl_library( - name = "expand_version_template_bzl", - srcs = ["expand_version_template.bzl"], - parse_tests = False, - visibility = ["//visibility:private"], -) - -# Default version if none is provided. -vardef("VERSION", "1.0.0.0") - -# When built with rapid, a version value will be passed down from the build config via blaze -# When built manually, invoke blaze with --define=VERSION=1.2.3.4 -# If VERSION is not passed from blaze, the default value defined above will be used. -expand_version_template( - name = "version_expanded", - out = "version.rc", - template = "version.rc.tpl", - version = varref("VERSION"), -) - -windows.resource_files( - name = "resources", - rc_files = [ - ":version_expanded", - ], -) - -cc_library( - name = "c", - srcs = [ - "advertising_options_w.cc", - "connection_options_w.cc", - "core_adapter.cc", - "discovery_options_w.cc", - "file_w.cc", - "listeners_w.cc", - "payload_w.cc", - "strategy_w.cc", - ], - hdrs = [ - "advertising_options_w.h", - "connection_options_w.h", - "core_adapter.h", - "discovery_options_w.h", - "file_w.h", - "listeners_w.h", - "medium_selector_w.h", - "options_base_w.h", - "out_of_band_connection_metadata_w.h", - "params_w.h", - "payload_w.h", - "strategy_w.h", - ], - deps = [ - ":types", - "//connections:core", - "//connections:core_types", - "//internal/platform:base", - "//internal/platform:types", - "//proto:connections_enums_cc_proto", - "@com_google_absl//absl/log", - "@com_google_absl//absl/strings:str_format", - "@com_google_absl//absl/strings:string_view", - "@com_google_absl//absl/types:span", - ], -) - -# Build with --config=windows -windows.cc_windows_dll( - name = "nearby_connections", - tags = ["windows-dll"], - deps = [ - ":c", - ":types", - "//internal/platform/implementation/windows", - "@com_google_absl//absl/strings", - ], -) - cc_library( name = "nc_types", hdrs = [ @@ -158,18 +67,3 @@ windows.cc_windows_dll( "@com_google_absl//absl/strings", ], ) - -cc_test( - name = "connections_test", - size = "small", - srcs = [ - "bluetooth_classic_server_socket_test.cc", - ], - deps = [ - "//connections:core", - "//internal/platform:types", - "//internal/platform/implementation/windows", - "@com_github_protobuf_matchers//protobuf-matchers", - "@com_google_googletest//:gtest_main", - ], -) diff --git a/connections/c/advertising_options_w.cc b/connections/c/advertising_options_w.cc deleted file mode 100644 index 22d83c0f..00000000 --- a/connections/c/advertising_options_w.cc +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2022 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. - -#include "connections/c/advertising_options_w.h" - -#include - -namespace nearby::windows { - -// Returns a copy and normalizes allowed mediums: -// (1) If is_out_of_band_connection is true, verifies that there is only one -// medium allowed, defaulting to only Bluetooth if unspecified. -// (2) If no mediums are allowed, allow all mediums. -AdvertisingOptionsW AdvertisingOptionsW::CompatibleOptions() const { - AdvertisingOptionsW result = *this; - - // Out-of-band connections initiate connections via an injected endpoint - // rather than through the normal discovery flow. These types of connections - // can only be injected via a single medium. - if (is_out_of_band_connection) { - int num_enabled = result.allowed.Count(true); - - // Default to allow only Bluetooth if no single medium is specified. - if (num_enabled != 1) { - result.allowed.SetAll(false); - result.allowed.bluetooth = true; - } - return result; - } - - // Normal connections (i.e., not out-of-band) connections can specify - // multiple mediums. If none are specified, default to allowing all mediums. - if (!allowed.Any(true)) result.allowed.SetAll(true); - return result; -} - -} // namespace nearby::windows diff --git a/connections/c/advertising_options_w.h b/connections/c/advertising_options_w.h deleted file mode 100644 index 984b53a9..00000000 --- a/connections/c/advertising_options_w.h +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_ADVERTISING_OPTIONS_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_ADVERTISING_OPTIONS_W_H_ - -#include "connections/c/options_base_w.h" - -namespace nearby::windows { - -extern "C" { - -// Advertising Options: used for Advertising. -// All fields are mutable, to make the type copy-assignable. -struct DLL_API AdvertisingOptionsW : public OptionsBaseW { - bool auto_upgrade_bandwidth = true; - bool enforce_topology_constraints; - bool low_power; - - // Whether this is intended to be used in conjunction with InjectEndpoint(). - bool is_out_of_band_connection = false; - const char* fast_advertisement_service_uuid; - - // The information about this device (eg. name, device type), - // to appear on the remote device. - // Defined by client/application. - const char* device_info; - - // Returns a copy and normalizes allowed mediums: - // (1) If is_out_of_band_connection is true, verifies that there is only one - // medium allowed, defaulting to only Bluetooth if unspecified. - // (2) If no mediums are allowed, allow all mediums. - AdvertisingOptionsW CompatibleOptions() const; -}; - -} // extern "C" -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_ADVERTISING_OPTIONS_W_H_ diff --git a/connections/c/bluetooth_classic_server_socket_test.cc b/connections/c/bluetooth_classic_server_socket_test.cc deleted file mode 100644 index 2b0e1394..00000000 --- a/connections/c/bluetooth_classic_server_socket_test.cc +++ /dev/null @@ -1,612 +0,0 @@ -// Copyright 2022 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. - -#include - -#include -#include - -#include "gtest/gtest.h" -#include "absl/synchronization/notification.h" -#include "connections/advertising_options.h" -#include "connections/core.h" -#include "connections/implementation/service_controller_router.h" -#include "connections/listeners.h" -#include "connections/status.h" -#include "connections/strategy.h" -#include "internal/platform/byte_array.h" -#include "internal/platform/count_down_latch.h" - -namespace nearby::windows { - -using ::nearby::ByteArray; -using ::nearby::connections::AdvertisingOptions; -using ::nearby::connections::ConnectionListener; -using ::nearby::connections::ConnectionRequestInfo; -using ::nearby::connections::Core; -using ::nearby::connections::ServiceControllerRouter; -using ::nearby::connections::Status; -using ::nearby::connections::Strategy; - -constexpr absl::string_view SERVICE_ID = - "com.google.location.nearby.apps.helloconnections"; - -constexpr int TimeoutSeconds = 3; -constexpr int LoopCount = 10; -constexpr absl::string_view device_name = "12345678901"; - -AdvertisingOptions AdvertiseOptions{ - { - // Strategy - { - Strategy::kP2pPointToPoint, - }, - // Allowed: - { - true, // bluetooth - true, // ble - true, // webrtc - true, // wifi_lan - true, // wifi_hotspot - }, - }, - true, // auto_upgrade_bandwidth - true, // enforce_topology_constraints - false, // low_power - false, // enable_bluetooth_listening - false, // enable_webrtc_listening - false, // is_out_of_band_connection - "", // fast_advertisement_service_uuid -}; - -class PerformanceTimer { - public: - static void start() { - QueryPerformanceFrequency(&frequency_); - QueryPerformanceCounter(&starting_time_); - } - static void stop() { - QueryPerformanceCounter(&ending_time_); - elapsed_microseconds_.QuadPart = - ending_time_.QuadPart - starting_time_.QuadPart; - elapsed_milliseconds_ = elapsed_microseconds_.QuadPart / 100; - } - - static uint64_t ElapsedMilliseconds() { return elapsed_milliseconds_; } - - private: - static uint64_t elapsed_milliseconds_; - static LARGE_INTEGER starting_time_; - static LARGE_INTEGER ending_time_; - static LARGE_INTEGER elapsed_microseconds_; - static LARGE_INTEGER frequency_; -}; - -uint64_t PerformanceTimer::elapsed_milliseconds_; -LARGE_INTEGER PerformanceTimer::starting_time_; -LARGE_INTEGER PerformanceTimer::ending_time_; -LARGE_INTEGER PerformanceTimer::elapsed_microseconds_; -LARGE_INTEGER PerformanceTimer::frequency_; - -TEST(BluetoothClassicServerSocketTest, - DISABLED_SingleRunWithTimeoutReproStuck) { - ServiceControllerRouter router; - Core core(&router); - - ConnectionListener listener; - - ConnectionRequestInfo request_info; - - request_info.endpoint_info = ByteArray(std::string(device_name)); - request_info.listener = listener; - - Status request_result; - absl::Notification notification; - - PerformanceTimer::start(); - - core.StartAdvertising(SERVICE_ID, AdvertiseOptions, request_info, - [&](Status status) { - request_result = status; - notification.Notify(); - }); - - if (notification.WaitForNotificationWithTimeout( - absl::Seconds(TimeoutSeconds))) { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Started advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "StartAdvertising started once:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising started once:" - << request_result.ToString(); - } else { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Timeout on starting advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - - EXPECT_TRUE(false) << "Timeout on starting advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - - std::cout << "StartAdvertising failed to start once:" - << request_result.ToString() << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising failed to start once:" - << request_result.ToString(); - } - - absl::Notification notification2; - - PerformanceTimer::start(); - - core.StartAdvertising(SERVICE_ID, AdvertiseOptions, request_info, - [&](Status status) { - request_result = status; - notification2.Notify(); - }); - - if (notification2.WaitForNotificationWithTimeout( - absl::Seconds(TimeoutSeconds))) { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Started advertising second time elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "StartAdvertising started twice:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising started twice:" - << request_result.ToString(); - } else { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) - << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Timeout on starting advertising the second time elapsed time: " - << std::to_string(PerformanceTimer::ElapsedMilliseconds()); - - EXPECT_TRUE(false) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Timeout for started advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - - std::cout << "StartAdvertising failed to start twice:" - << request_result.ToString() << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising failed to start twice:" - << request_result.ToString(); - } - - absl::Notification notification3; - - PerformanceTimer::start(); - - core.StopAdvertising([&](Status status) { - request_result = status; - notification3.Notify(); - }); - - if (notification3.WaitForNotificationWithTimeout( - absl::Seconds(TimeoutSeconds))) { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Stopped advertising first time elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising elapsed time: " - << std::to_string(elapsed_microseconds); -#endif - - std::cout << "StopAdvertising called once:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "StopAdvertising called once:" - << request_result.ToString(); - } else { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) - << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Timeout on stopping advertising the first time elapsed time: " - << std::to_string(PerformanceTimer::ElapsedMilliseconds()); - - EXPECT_TRUE(false) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Timeout on stop advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - - std::cout << "StopAdvertising failed to stop once:" - << request_result.ToString() << std::endl; - NEARBY_LOGS(INFO) << "StopAdvertising failed to stop once:" - << request_result.ToString(); - } - - std::cout << "Test completed." << std::endl; - NEARBY_LOGS(INFO) << "Test completed."; -} - -TEST(BluetoothClassicServerSocketTest, DISABLED_MultiRunWithTimeoutReproStuck) { - ServiceControllerRouter router; - Core core(&router); - - ConnectionListener listener; - - ConnectionRequestInfo request_info; - - request_info.endpoint_info = ByteArray(std::string(device_name)); - request_info.listener = listener; - - for (int loop_count = 0; loop_count < LoopCount; ++loop_count) { - Status request_result; - absl::Notification notification; - - PerformanceTimer::start(); - - core.StartAdvertising(SERVICE_ID, AdvertiseOptions, request_info, - [&](Status status) { - request_result = status; - notification.Notify(); - }); - - if (notification.WaitForNotificationWithTimeout( - absl::Seconds(TimeoutSeconds))) { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Started advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising elapsed time : " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "StartAdvertising started once:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising started once:" - << request_result.ToString(); - } else { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Timeout on starting advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - - EXPECT_TRUE(false) << "Timeout on starting advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - - std::cout << "StartAdvertising failed to start once:" - << request_result.ToString() << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising failed to start once:" - << request_result.ToString(); - } - - absl::Notification notification2; - - PerformanceTimer::start(); - - core.StartAdvertising(SERVICE_ID, AdvertiseOptions, request_info, - [&](Status status) { - request_result = status; - notification2.Notify(); - }); - - if (notification2.WaitForNotificationWithTimeout( - absl::Seconds(TimeoutSeconds))) { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Started advertising second time elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - // EXPECT_TRUE(false) - // << "Started advertising elapsed time: " - // << std::to_string(ElapsedMilliseconds); - std::cout << "StartAdvertising started twice:" - << request_result.ToString() << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising started twice:" - << request_result.ToString(); - } else { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) - << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Timeout on starting advertising the second time elapsed time: " - << std::to_string(PerformanceTimer::ElapsedMilliseconds()); - - EXPECT_TRUE(false) - << "Timeout on starting advertising the second time elapsed time: " - << std::to_string(PerformanceTimer::ElapsedMilliseconds()); - - std::cout << "StartAdvertising failed to start twice:" - << request_result.ToString() << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising failed to start twice:" - << request_result.ToString(); - } - - absl::Notification notification3; - - PerformanceTimer::start(); - - core.StopAdvertising([&](Status status) { - request_result = status; - notification3.Notify(); - }); - - if (notification3.WaitForNotificationWithTimeout( - absl::Seconds(TimeoutSeconds))) { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Stopped advertising first time elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "StopAdvertising called once:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "StopAdvertising called once:" - << request_result.ToString(); - } else { - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) - << "SingleRunWithTimeoutReproStuck Line: " << __LINE__ - << " Timeout on stopping advertising the first time elapsed time: " - << std::to_string(PerformanceTimer::ElapsedMilliseconds()); - - EXPECT_TRUE(false) << "Timeout on started advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - - std::cout << "StopAdvertising failed to stop once:" - << request_result.ToString() << std::endl; - NEARBY_LOGS(INFO) << "StopAdvertising failed to stop once:" - << request_result.ToString(); - } - } - - std::cout << "Test completed." << std::endl; - NEARBY_LOGS(INFO) << "Test completed."; -} - -TEST(BluetoothClassicServerSocketTest, DISABLED_SingleRunNoTimeoutReproStuck) { - ServiceControllerRouter router; - Core core(&router); - - ConnectionListener listener; - - ConnectionRequestInfo request_info; - - request_info.endpoint_info = ByteArray(std::string(device_name)); - request_info.listener = listener; - - Status request_result; - absl::Notification notification; - - PerformanceTimer::start(); - - core.StartAdvertising(SERVICE_ID, AdvertiseOptions, request_info, - [&](Status status) { - request_result = status; - notification.Notify(); - }); - - notification.WaitForNotification(); - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunNoTimeoutReproStuck Line: " << __LINE__ - << " Started advertising first time elapsed time: " - << std::to_string(PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising first time elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "StartAdvertising started once:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising started once:" - << request_result.ToString(); - - absl::Notification notification2; - - PerformanceTimer::start(); - - core.StartAdvertising(SERVICE_ID, AdvertiseOptions, request_info, - [&](Status status) { - request_result = status; - notification2.Notify(); - }); - - notification2.WaitForNotification(); - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunNoTimeoutReproStuck Line: " << __LINE__ - << " Started advertising first time elapsed time: " - << std::to_string(PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising first time elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "StartAdvertising started twice:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising started twice:" - << request_result.ToString(); - - absl::Notification notification3; - - PerformanceTimer::start(); - - core.StopAdvertising([&](Status status) { - request_result = status; - notification3.Notify(); - }); - - notification3.WaitForNotification(); - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "SingleRunNoTimeoutReproStuck " << __LINE__ - << "Stopped advertising elapsed time: " - << std::to_string(PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Stopped advertising elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "StopAdvertising called once:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "StopAdvertising called once:" - << request_result.ToString(); - - std::cout << "Test completed." << std::endl; - NEARBY_LOGS(INFO) << "Test completed."; -} - -TEST(BluetoothClassicServerSocketTest, DISABLED_MultiRunNoTimeoutReproStuck) { - ServiceControllerRouter router; - Core core(&router); - - ConnectionListener listener; - - ConnectionRequestInfo request_info; - - request_info.endpoint_info = ByteArray(std::string(device_name)); - request_info.listener = listener; - - for (int loop_count = 0; loop_count < LoopCount; ++loop_count) { - Status request_result; - absl::Notification notification; - - PerformanceTimer::start(); - - core.StartAdvertising(SERVICE_ID, AdvertiseOptions, request_info, - [&](Status status) { - request_result = status; - notification.Notify(); - }); - - notification.WaitForNotification(); - - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "MultiRunNoTimeoutReproStuck " << __LINE__ - << "Started advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "MultiRunNoTimeoutReproStuck " << __LINE__ - << " : StartAdvertising started once: " - << request_result.ToString() << std::endl; - NEARBY_LOGS(INFO) << "StartAdvertising started once:" - << request_result.ToString(); - - absl::Notification notification2; - - PerformanceTimer::start(); - - core.StartAdvertising(SERVICE_ID, AdvertiseOptions, request_info, - [&](Status status) { - request_result = status; - notification2.Notify(); - }); - - notification2.WaitForNotification(); - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "MultiRunNoTimeoutReproStuck " << __LINE__ - << "Started advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Started advertising elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "MultiRunNoTimeoutReproStuck " << __LINE__ - << "StartAdvertising started twice:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "MultiRunNoTimeoutReproStuck " << __LINE__ - << "StartAdvertising started twice:" - << request_result.ToString(); - - absl::Notification notification3; - - PerformanceTimer::start(); - - core.StopAdvertising([&](Status status) { - request_result = status; - notification3.Notify(); - }); - - notification3.WaitForNotification(); - PerformanceTimer::stop(); - - NEARBY_LOGS(INFO) << "MultiRunNoTimeoutReproStuck " << __LINE__ - << "Stopped advertising elapsed time: " - << std::to_string( - PerformanceTimer::ElapsedMilliseconds()); - -#ifdef TEST_OUTPUT - EXPECT_TRUE(false) << "Stop advertising elapsed time: " - << std::to_string(ElapsedMilliseconds); -#endif - - std::cout << "StopAdvertising called once:" << request_result.ToString() - << std::endl; - NEARBY_LOGS(INFO) << "MultiRunNoTimeoutReproStuck " << __LINE__ - << "StopAdvertising called once:" - << request_result.ToString(); - } - - std::cout << "Test completed." << std::endl; - NEARBY_LOGS(INFO) << "Test completed."; -} - -} // namespace nearby::windows diff --git a/connections/c/connection_options_w.cc b/connections/c/connection_options_w.cc deleted file mode 100644 index 0d673664..00000000 --- a/connections/c/connection_options_w.cc +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2021-2022 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. - -#include "connections/c/connection_options_w.h" - -#include - -namespace nearby::windows { - -void ConnectionOptionsW::GetMediums(const MediumW* mediums, - size_t* mediums_size) const { - // Create a collection of enabled mediums - auto allowedMediums = allowed.GetMediums(true); - auto iter = allowedMediums.begin(); - int index = 0; - // There is a fixed buffer of 5 for these, fill it up and leave. - while (iter != allowedMediums.end() && index < MAX_MEDIUMS) { - *mediums_[index++] = iter[index]; - } - *mediums_size = allowed.GetMediums(true).size(); - return; -} - -} // namespace nearby::windows diff --git a/connections/c/connection_options_w.h b/connections/c/connection_options_w.h deleted file mode 100644 index 2312b04c..00000000 --- a/connections/c/connection_options_w.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2021-2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_CONNECTION_OPTIONS_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_CONNECTION_OPTIONS_W_H_ -#include - -#include "connections/c/dll_config.h" -#include "connections/c/medium_selector_w.h" -#include "connections/c/options_base_w.h" - -namespace nearby::windows { - -extern "C" { - -#define MAX_MEDIUMS 6 - -// Connection Options: used for both Advertising and Discovery. -// All fields are mutable, to make the type copy-assignable. -struct DLL_API ConnectionOptionsW : public OptionsBaseW { - bool auto_upgrade_bandwidth = true; - bool enforce_topology_constraints; - bool low_power; - - // Whether this is intended to be used in conjunction with InjectEndpoint(). - bool is_out_of_band_connection = false; - const char* remote_bluetooth_mac_address; - const char* fast_advertisement_service_uuid; - int keep_alive_interval_millis = 0; - int keep_alive_timeout_millis = 0; - - void GetMediums(const MediumW*, size_t*) const; - - private: - MediumW* mediums_[MAX_MEDIUMS]; - size_t mediums_size; -}; - -} // extern "C" -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_CONNECTION_OPTIONS_W_H_ diff --git a/connections/c/core_adapter.cc b/connections/c/core_adapter.cc deleted file mode 100644 index 3a87378c..00000000 --- a/connections/c/core_adapter.cc +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2021-2022 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. - -#include "connections/c/core_adapter.h" - -#include "absl/strings/str_format.h" -#include "connections/core.h" -#include "internal/platform/bluetooth_utils.h" -#include "internal/platform/logging.h" - -namespace nearby::windows { - -Core *InitCore(connections::ServiceControllerRouter *router) { -#if defined(LOG_SEVERITY_VERBOSE) - absl::SetGlobalVLogLevel(1); -#endif // LOG_SEVERITY_VERBOSE; - return new nearby::connections::Core(router); -} - -void CloseCore(Core *pCore) { - if (pCore == nullptr) { - return; - } - pCore->StopAllEndpoints([](Status) {}); - delete pCore; -} - -void StartAdvertising(Core *pCore, const char *service_id, - AdvertisingOptionsW advertising_options_w, - ConnectionRequestInfoW info, ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - connections::ConnectionRequestInfo crInfo; - - crInfo.endpoint_info = ByteArray(info.endpoint_info, info.endpoint_info_size); - crInfo.listener = std::move(*(info.listener.GetImpl())); - - connections::AdvertisingOptions advertising_options; - - advertising_options.allowed.bluetooth = - advertising_options_w.allowed.bluetooth; - advertising_options.allowed.ble = advertising_options_w.allowed.ble; - advertising_options.allowed.wifi_lan = advertising_options_w.allowed.wifi_lan; - advertising_options.allowed.web_rtc = advertising_options_w.allowed.web_rtc; - advertising_options.allowed.wifi_hotspot = - advertising_options_w.allowed.wifi_hotspot; - advertising_options.enable_bluetooth_listening = false; - advertising_options.enable_webrtc_listening = false; - advertising_options.auto_upgrade_bandwidth = - advertising_options_w.auto_upgrade_bandwidth; - advertising_options.enforce_topology_constraints = - advertising_options_w.enforce_topology_constraints; - if (advertising_options_w.fast_advertisement_service_uuid != nullptr) { - advertising_options.fast_advertisement_service_uuid = - std::string(advertising_options_w.fast_advertisement_service_uuid); - } - advertising_options.is_out_of_band_connection = - advertising_options_w.is_out_of_band_connection; - advertising_options.low_power = advertising_options_w.low_power; - if (advertising_options_w.strategy == StrategyW::kNone) - advertising_options.strategy = connections::Strategy::kNone; - if (advertising_options_w.strategy == StrategyW::kP2pCluster) - advertising_options.strategy = connections::Strategy::kP2pCluster; - if (advertising_options_w.strategy == StrategyW::kP2pPointToPoint) - advertising_options.strategy = connections::Strategy::kP2pPointToPoint; - if (advertising_options_w.strategy == StrategyW::kP2pStar) - advertising_options.strategy = connections::Strategy::kP2pStar; - - pCore->StartAdvertising(service_id, advertising_options, crInfo, - std::move(*callback.GetImpl())); -} - -void StopAdvertising(connections::Core *pCore, ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - pCore->StopAdvertising(std::move(*callback.GetImpl())); -} - -void StartDiscovery(connections::Core *pCore, const char *service_id, - DiscoveryOptionsW discovery_options_w, - DiscoveryListenerW listener, ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - connections::DiscoveryOptions discovery_options; - - if (discovery_options_w.strategy == StrategyW::kNone) - discovery_options.strategy = connections::Strategy::kNone; - if (discovery_options_w.strategy == StrategyW::kP2pCluster) - discovery_options.strategy = connections::Strategy::kP2pCluster; - if (discovery_options_w.strategy == StrategyW::kP2pPointToPoint) - discovery_options.strategy = connections::Strategy::kP2pPointToPoint; - if (discovery_options_w.strategy == StrategyW::kP2pStar) - discovery_options.strategy = connections::Strategy::kP2pStar; - discovery_options.auto_upgrade_bandwidth = - discovery_options_w.auto_upgrade_bandwidth; - discovery_options.enforce_topology_constraints = - discovery_options_w.enforce_topology_constraints; - discovery_options.is_out_of_band_connection = - discovery_options_w.is_out_of_band_connection; - if (discovery_options_w.fast_advertisement_service_uuid) { - discovery_options.fast_advertisement_service_uuid = - std::string(discovery_options_w.fast_advertisement_service_uuid); - } - discovery_options.allowed.bluetooth = discovery_options_w.allowed.bluetooth; - discovery_options.allowed.ble = discovery_options_w.allowed.ble; - discovery_options.allowed.wifi_lan = discovery_options_w.allowed.wifi_lan; - discovery_options.allowed.wifi_hotspot = - discovery_options_w.allowed.wifi_hotspot; - discovery_options.allowed.web_rtc = discovery_options_w.allowed.web_rtc; - - pCore->StartDiscovery(service_id, discovery_options, - std::move(*listener.GetImpl()), - std::move(*callback.GetImpl())); -} - -void StopDiscovery(connections::Core *pCore, ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - pCore->StopDiscovery(std::move(*callback.GetImpl())); -} - -void InjectEndpoint(connections::Core *pCore, char *service_id, - OutOfBandConnectionMetadataW metadata, - ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - connections::OutOfBandConnectionMetadata outOfBandConnectionMetadata; - outOfBandConnectionMetadata.endpoint_id = metadata.endpoint_id; - outOfBandConnectionMetadata.endpoint_info = {metadata.endpoint_info, - metadata.endpoint_info_size}; - outOfBandConnectionMetadata.medium = metadata.medium; - outOfBandConnectionMetadata.remote_bluetooth_mac_address = { - metadata.remote_bluetooth_mac_address, - metadata.remote_bluetooth_mac_address_size}; - - pCore->InjectEndpoint(service_id, outOfBandConnectionMetadata, - std::move(*callback.GetImpl())); -} - -void RequestConnection(connections::Core *pCore, const char *endpoint_id, - ConnectionRequestInfoW info, - ConnectionOptionsW connection_options_w, - ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - connections::ConnectionRequestInfo connectionRequestInfo = - connections::ConnectionRequestInfo(); - connectionRequestInfo.endpoint_info = ByteArray(info.endpoint_info); - connectionRequestInfo.listener = std::move(*info.listener.GetImpl()); - - connections::ConnectionOptions connection_options; - connection_options.allowed.ble = connection_options_w.allowed.ble; - connection_options.allowed.bluetooth = connection_options_w.allowed.bluetooth; - connection_options.allowed.web_rtc = connection_options_w.allowed.web_rtc; - connection_options.allowed.wifi_lan = connection_options_w.allowed.wifi_lan; - connection_options.auto_upgrade_bandwidth = - connection_options_w.auto_upgrade_bandwidth; - connection_options.enforce_topology_constraints = - connection_options_w.enforce_topology_constraints; - if (connection_options_w.fast_advertisement_service_uuid) { - connection_options.fast_advertisement_service_uuid = - std::string(connection_options_w.fast_advertisement_service_uuid); - } - connection_options.is_out_of_band_connection = - connection_options_w.is_out_of_band_connection; - connection_options.keep_alive_interval_millis = - connection_options_w.keep_alive_interval_millis; - connection_options.keep_alive_timeout_millis = - connection_options_w.keep_alive_timeout_millis; - connection_options.low_power = connection_options_w.low_power; - if (connection_options_w.remote_bluetooth_mac_address) { - connection_options.remote_bluetooth_mac_address = - BluetoothUtils::FromString( - connection_options_w.remote_bluetooth_mac_address); - } - if (connection_options_w.strategy == StrategyW::kNone) - connection_options.strategy = connections::Strategy::kNone; - if (connection_options_w.strategy == StrategyW::kP2pCluster) - connection_options.strategy = connections::Strategy::kP2pCluster; - if (connection_options_w.strategy == StrategyW::kP2pPointToPoint) - connection_options.strategy = connections::Strategy::kP2pPointToPoint; - if (connection_options_w.strategy == StrategyW::kP2pStar) - connection_options.strategy = connections::Strategy::kP2pStar; - - pCore->RequestConnection(endpoint_id, connectionRequestInfo, - connection_options, std::move(*callback.GetImpl())); -} - -void AcceptConnection(connections::Core *pCore, const char *endpoint_id, - PayloadListenerW listener, ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - connections::PayloadListener payload_listener = - std::move(*listener.GetImpl()); - pCore->AcceptConnection(endpoint_id, std::move(payload_listener), - std::move(*callback.GetImpl())); -} - -void RejectConnection(connections::Core *pCore, const char *endpoint_id, - ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - pCore->RejectConnection(endpoint_id, std::move(*callback.GetImpl())); -} - -void SendPayload(connections::Core *pCore, - // todo(jfcarroll) this is being exported, needs to be - // refactored to return a plain old c type - const char **endpoint_ids, size_t endpoint_ids_size, - PayloadW payloadw, ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - std::string payloadData = std::string(*endpoint_ids); - absl::Span span{&payloadData, 1}; - pCore->SendPayload(span, std::move(*payloadw.GetImpl()), - std::move(*callback.GetImpl())); -} - -void CancelPayload(connections::Core *pCore, std::int64_t payload_id, - ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - pCore->CancelPayload(payload_id, std::move(*callback.GetImpl())); -} - -void DisconnectFromEndpoint(connections::Core *pCore, const char *endpoint_id, - ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - pCore->DisconnectFromEndpoint(endpoint_id, std::move(*callback.GetImpl())); -} - -void StopAllEndpoints(connections::Core *pCore, ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - pCore->StopAllEndpoints(std::move(*callback.GetImpl())); -} - -void InitiateBandwidthUpgrade(connections::Core *pCore, char *endpoint_id, - ResultCallbackW callback) { - if (pCore == nullptr) { - return; - } - pCore->InitiateBandwidthUpgrade(endpoint_id, std::move(*callback.GetImpl())); -} - -const char *GetLocalEndpointId(connections::Core *pCore) { - if (pCore == nullptr) { - return "Null-Core"; - } - std::string endpoint_id = pCore->GetLocalEndpointId(); - char *result = new char[endpoint_id.length() + 1]; - absl::SNPrintF(result, endpoint_id.length() + 1, "%s", endpoint_id); - return result; -} - -connections::ServiceControllerRouter *InitServiceControllerRouter() { - return new connections::ServiceControllerRouter(); -} - -void CloseServiceControllerRouter( - connections::ServiceControllerRouter *pRouter) { - if (pRouter != nullptr) { - delete pRouter; - } -} - -} // namespace nearby::windows diff --git a/connections/c/core_adapter.h b/connections/c/core_adapter.h deleted file mode 100644 index b2152521..00000000 --- a/connections/c/core_adapter.h +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright 2021-2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_CORE_ADAPTER_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_CORE_ADAPTER_H_ - -#include "absl/strings/string_view.h" -#include "absl/types/span.h" -#include "connections/c/advertising_options_w.h" -#include "connections/c/connection_options_w.h" -#include "connections/c/discovery_options_w.h" -#include "connections/c/listeners_w.h" -#include "connections/c/out_of_band_connection_metadata_w.h" -#include "connections/c/params_w.h" -#include "connections/c/payload_w.h" - -namespace nearby::connections { -class Core; -class ServiceController; -class ServiceControllerRouter; -class OfflineServiceController; -} // namespace nearby::connections -namespace nearby::windows { - -extern "C" { - -using Core = connections::Core; -using ServiceControllerRouter = connections::ServiceControllerRouter; - -// Initializes a Core instance, providing the ServiceController factory from -// app side. If no factory is provided, it will initialize a new -// factory creating OfflineServiceController. -// Returns the instance handle to c# client. -// TODO(jfcarroll): Is this method needed? The trouble is we can't -// new up a forward declared class (OfflineServiceController). If this -// is necessary, must find another way to implement it. -// DLL_API Core *__stdcall InitCoreWithServiceControllerFactory( -// std::function factory = []() { -// return new OfflineServiceController; -// }); - -// Initializes a default Core instance. -// Returns the instance handle to c# client. -DLL_API Core* __stdcall InitCore(ServiceControllerRouter*); - -// Closes the core with stopping all endpoints, then free the memory. -DLL_API void __stdcall CloseCore(Core*); - -// Starts advertising an endpoint for a local app. -// -// service_id - An identifier to advertise your app to other endpoints. -// This can be an arbitrary string, so long as it uniquely -// identifies your service. A good default is to use your -// app's package name. -// advertising_options - The options for advertising. -// info - Connection parameters: -// > name - A human readable name for this endpoint, to appear on -// other devices. -// > listener - A callback notified when remote endpoints request a -// connection to this endpoint. -// callback - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK if advertising started successfully. -// Status::STATUS_ALREADY_ADVERTISING if the app is already advertising. -// Status::STATUS_OUT_OF_ORDER_API_CALL if the app is currently -// connected to remote endpoints; call StopAllEndpoints first. -DLL_API void __stdcall StartAdvertising(Core*, const char*, AdvertisingOptionsW, - ConnectionRequestInfoW, - ResultCallbackW); - -// Stops advertising a local endpoint. Should be called after calling -// StartAdvertising, as soon as the application no longer needs to advertise -// itself or goes inactive. Payloads can still be sent to connected -// endpoints after advertising ends. -// -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK if none of the above errors occurred. -DLL_API void __stdcall StopAdvertising(Core*, ResultCallbackW); - -// Starts discovery for remote endpoints with the specified service ID. -// -// service_id - The ID for the service to be discovered, as specified in -// the corresponding call to StartAdvertising. -// listener - A callback notified when a remote endpoint is discovered. -// discovery_options - The options for discovery. -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK if discovery started successfully. -// Status::STATUS_ALREADY_DISCOVERING if the app is already -// discovering the specified service. -// Status::STATUS_OUT_OF_ORDER_API_CALL if the app is currently -// connected to remote endpoints; call StopAllEndpoints first. -DLL_API void __stdcall StartDiscovery(Core*, const char*, DiscoveryOptionsW, - DiscoveryListenerW, ResultCallbackW); - -// Stops discovery for remote endpoints, after a previous call to -// StartDiscovery, when the client no longer needs to discover endpoints or -// goes inactive. Payloads can still be sent to connected endpoints after -// discovery ends. -// -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK if none of the above errors occurred. -DLL_API void __stdcall StopDiscovery(Core*, ResultCallbackW); - -// Invokes the discovery callback from a previous call to StartDiscovery() -// with the given endpoint info. The previous call to StartDiscovery() must -// have been passed ConnectionOptions with is_out_of_band_connection == true. -// -// service_id - The ID for the service to be discovered, as -// specified in the corresponding call to -// StartDiscovery(). -// metadata - Metadata used in order to inject the endpoint. -// result_cb - to access the status of the operation when -// available. -// Possible status codes include: -// Status::kSuccess if endpoint injection was attempted. -// Status::kError if endpoint_id, endpoint_info, or -// remote_bluetooth_mac_address are malformed. -// Status::kOutOfOrderApiCall if the app is not discovering. -DLL_API void __stdcall InjectEndpoint(Core*, char*, - OutOfBandConnectionMetadataW, - ResultCallbackW); - -// Sends a request to connect to a remote endpoint. -// -// endpoint_id - The identifier for the remote endpoint to which a -// connection request will be sent. Should match the value -// provided in a call to -// DiscoveryListener::endpoint_found_cb() -// info - Connection parameters: -// > name - A human readable name for the local endpoint, to appear on -// the remote endpoint. -// > listener - A callback notified when the remote endpoint sends a -// response to the connection request. -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK if the connection request was sent. -// Status::STATUS_ALREADY_CONNECTED_TO_ENDPOINT if the app already -// has a connection to the specified endpoint. -// Status::STATUS_RADIO_ERROR if we failed to connect because of an -// issue with Bluetooth/WiFi. -// Status::STATUS_ERROR if we failed to connect for any other reason. -DLL_API void __stdcall RequestConnection(Core*, const char*, - ConnectionRequestInfoW, - ConnectionOptionsW, ResultCallbackW); - -// Accepts a connection to a remote endpoint. This method must be called -// before Payloads can be exchanged with the remote endpoint. -// -// endpoint_id - The identifier for the remote endpoint. Should match the -// value provided in a call to -// ConnectionListener::onConnectionInitiated. -// listener - A callback for payloads exchanged with the remote endpoint. -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK if the connection request was accepted. -// Status::STATUS_ALREADY_CONNECTED_TO_ENDPOINT if the app already. -// has a connection to the specified endpoint. -DLL_API void __stdcall AcceptConnection(Core*, const char*, PayloadListenerW, - ResultCallbackW); - -// Rejects a connection to a remote endpoint. -// -// endpoint_id - The identifier for the remote endpoint. Should match the -// value provided in a call to -// ConnectionListener::onConnectionInitiated(). -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK} if the connection request was rejected. -// Status::STATUS_ALREADY_CONNECTED_TO_ENDPOINT} if the app already -// has a connection to the specified endpoint. -DLL_API void __stdcall RejectConnection(Core*, const char*, ResultCallbackW); - -// Sends a Payload to a remote endpoint. Payloads can only be sent to remote -// endpoints once a notice of connection acceptance has been delivered via -// ConnectionListener::onConnectionResult(). -// -// endpoint_ids - Array of remote endpoint identifiers for the to which the -// payload should be sent. -// payload - The Payload to be sent. -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OUT_OF_ORDER_API_CALL if the device has not first -// performed advertisement or discovery (to set the Strategy.) -// Status::STATUS_ENDPOINT_UNKNOWN if there's no active (or pending) -// connection to the remote endpoint. -// Status::STATUS_OK if none of the above errors occurred. Note that this -// indicates that Nearby Connections will attempt to send the Payload, -// but not that the send has successfully completed yet. Errors might -// still occur during transmission (and at different times for -// different endpoints), and will be delivered via -// PayloadCallback#onPayloadTransferUpdate. -DLL_API void __stdcall SendPayload(Core*, const char**, size_t, PayloadW, - ResultCallbackW); - -// Cancels a Payload currently in-flight to or from remote endpoint(s). -// -// payload_id - The identifier for the Payload to be canceled. -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK if none of the above errors occurred. -DLL_API void __stdcall CancelPayload(Core*, int64_t, ResultCallbackW); - -// Disconnects from a remote endpoint. {@link Payload}s can no longer be sent -// to or received from the endpoint after this method is called. -// -// endpoint_id - The identifier for the remote endpoint to disconnect from. -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK - finished successfully. -DLL_API void __stdcall DisconnectFromEndpoint(Core*, const char*, - ResultCallbackW); - -// Disconnects from, and removes all traces of, all connected and/or -// discovered endpoints. This call also stops advertising and discovery. After -// calling StopAllEndpoints, no further operations with remote endpoints will be -// possible until a new call to one of StartAdvertising() or StartDiscovery(). -// -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK - finished successfully. -DLL_API void __stdcall StopAllEndpoints(Core*, ResultCallbackW); - -// Sends a request to initiate connection bandwidth upgrade. -// -// endpoint_id - The identifier for the remote endpoint which will be -// switching to a higher connection data rate and possibly -// different wireless protocol. On success, calls -// ConnectionListener::bandwidth_changed_cb(). -// result_cb - to access the status of the operation when available. -// Possible status codes include: -// Status::STATUS_OK - finished successfully. -DLL_API void __stdcall InitiateBandwidthUpgrade(Core*, char*, ResultCallbackW); - -// Gets the local endpoint generated by Nearby Connections. -DLL_API const char* __stdcall GetLocalEndpointId(Core*); - -// Initializes a default ServiceControllerRouter instance. -// Returns the instance handle to c# client. -DLL_API ServiceControllerRouter* __stdcall InitServiceControllerRouter(); - -// Close a ServiceControllerRouter instance. -DLL_API void __stdcall CloseServiceControllerRouter(ServiceControllerRouter*); - -} // extern "C" -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_CORE_ADAPTER_H_ diff --git a/connections/c/discovery_options_w.cc b/connections/c/discovery_options_w.cc deleted file mode 100644 index e60b07a6..00000000 --- a/connections/c/discovery_options_w.cc +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2022 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. - -#include "connections/c/discovery_options_w.h" - -#include - -namespace nearby::windows { - -// Returns a copy and normalizes allowed mediums: -// (1) If is_out_of_band_connection is true, verifies that there is only one -// medium allowed, defaulting to only Bluetooth if unspecified. -// (2) If no mediums are allowed, allow all mediums. -DiscoveryOptionsW DiscoveryOptionsW::CompatibleOptions() const { - DiscoveryOptionsW result = *this; - - // Out-of-band connections initiate connections via an injected endpoint - // rather than through the normal discovery flow. These types of connections - // can only be injected via a single medium. - if (is_out_of_band_connection) { - int num_enabled = result.allowed.Count(true); - - // Default to allow only Bluetooth if no single medium is specified. - if (num_enabled != 1) { - result.allowed.SetAll(false); - result.allowed.bluetooth = true; - } - return result; - } - - // Normal connections (i.e., not out-of-band) connections can specify - // multiple mediums. If none are specified, default to allowing all mediums. - if (!allowed.Any(true)) result.allowed.SetAll(true); - return result; -} - -} // namespace nearby::windows diff --git a/connections/c/discovery_options_w.h b/connections/c/discovery_options_w.h deleted file mode 100644 index 266fc7cd..00000000 --- a/connections/c/discovery_options_w.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_DISCOVERY_OPTIONS_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_DISCOVERY_OPTIONS_W_H_ -#include - -#include "connections/c/options_base_w.h" - -namespace nearby::windows { - -extern "C" { - -// Connection Options: used for both Advertising and Discovery. -// All fields are mutable, to make the type copy-assignable. -struct DLL_API DiscoveryOptionsW : public OptionsBaseW { - bool auto_upgrade_bandwidth = true; - bool enforce_topology_constraints; - - // Whether this is intended to be used in conjunction with InjectEndpoint(). - bool is_out_of_band_connection = false; - const char* fast_advertisement_service_uuid; - - // Returns a copy and normalizes allowed mediums: - // (1) If is_out_of_band_connection is true, verifies that there is only one - // medium allowed, defaulting to only Bluetooth if unspecified. - // (2) If no mediums are allowed, allow all mediums. - DiscoveryOptionsW CompatibleOptions() const; -}; - -} // extern "C" -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_DISCOVERY_OPTIONS_W_H_ diff --git a/connections/c/dll_config.h b/connections/c/dll_config.h deleted file mode 100644 index 345e0ed1..00000000 --- a/connections/c/dll_config.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_CONFIG_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_CONFIG_H_ - -namespace nearby::windows { - -#ifdef _WIN32 // These storage class specifiers only matter to win32 dll - // builds. -#ifdef CORE_ADAPTER_DLL -#define DLL_API \ - __declspec(dllexport) // If we're building the core, we're exporting. -#else // !CORE_ADAPTER_DLL -#define DLL_API \ - __declspec(dllimport) // If we're not building the core, we're importing. -#endif // CORE_ADAPTER_DLL -#else // !_WIN32 -#define DLL_API // We're not building a win32 dll, leave the source unchanged. -#endif // _WIN32 - -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_CONFIG_H_ diff --git a/connections/c/expand_version_template.bzl b/connections/c/expand_version_template.bzl deleted file mode 100644 index 827898ee..00000000 --- a/connections/c/expand_version_template.bzl +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright 2023 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. - -"""Rule for specialized expansion of template files. This performs a simple search over the template -file for the keys $VERSION and $VS_VERSION and replaces them with the corresponding values, derived -from the version provided. Supports make variables. - -Typical usage: - load("expand_version_template.bzl", "expand_version_template") - expand_version_template( - name = "ExpandMyTemplate", - out = "my.txt", - template = "my.template", - version = varref("VERSION"), - ) - -Args: - name: The name of the rule. - out: The destination of the expanded file - template: The template file to expand - version: A string containing the version number. Supports make variables. -""" - -def expand_version_template_impl(ctx): - version = ctx.expand_make_variables( - "expand_version_template", - ctx.attr.version, - {}, - ) - vs_version = version.replace(".", ",") - ctx.actions.expand_template( - template = ctx.file.template, - output = ctx.outputs.out, - substitutions = { - "$VERSION": version, - "$VS_VERSION": vs_version, - }, - ) - -expand_version_template = rule( - implementation = expand_version_template_impl, - attrs = { - "template": attr.label(mandatory = True, allow_single_file = True), - "version": attr.string(mandatory = False), - "out": attr.output(mandatory = True), - }, -) diff --git a/connections/c/file_w.cc b/connections/c/file_w.cc deleted file mode 100644 index 0573515c..00000000 --- a/connections/c/file_w.cc +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2022 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. -#include "connections/c/file_w.h" - -#include - -#include "internal/platform/file.h" - -namespace nearby { -void InputFileDeleter::operator()(nearby::InputFile* p) { delete p; } -void OutputFileDeleter::operator()(nearby::OutputFile* p) { delete p; } - -namespace windows { -InputFileW::InputFileW(InputFile* input_file) - : impl_(std::unique_ptr( - new nearby::InputFile(std::move(*input_file)))) {} -InputFileW::InputFileW(PayloadId payload_id, size_t size) - : impl_(std::unique_ptr( - new nearby::InputFile(payload_id, size))) {} -InputFileW::InputFileW(const char* file_path, size_t size) - : impl_(std::unique_ptr( - new nearby::InputFile(file_path, size))) {} -InputFileW::InputFileW(InputFileW&& other) noexcept - : impl_(std::move(other.impl_)) {} - -// Returns a string that uniquely identifies this file. -// Caller allocates buffer[MAX_PATH] and is responsible -// for freeing. -void InputFileW::GetFilePath(char* file_path) const { - std::string fp = impl_->GetFilePath(); - strncpy(file_path, fp.c_str(), fp.length()); -} - -// Returns total size of this file in bytes. -size_t InputFileW::GetTotalSize() const { return impl_->GetTotalSize(); } - -std::unique_ptr -InputFileW::GetImpl() { - return std::move(impl_); -} - -OutputFileW::OutputFileW(PayloadId payload_id) {} -OutputFileW::OutputFileW(const char* file_path) {} -OutputFileW::OutputFileW(OutputFileW&&) noexcept {} -OutputFileW& OutputFileW::operator=(OutputFileW&& other) noexcept { - impl_ = std::move(other.impl_); - return *this; -} - -std::unique_ptr -OutputFileW::GetImpl() { - return std::move(impl_); -} - -} // namespace windows -} // namespace nearby diff --git a/connections/c/file_w.h b/connections/c/file_w.h deleted file mode 100644 index 791de45f..00000000 --- a/connections/c/file_w.h +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_FILE_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_FILE_W_H_ - -#include -#include - -#include "connections/c/dll_config.h" -#include "internal/platform/payload_id.h" - -namespace nearby { -class InputFile; -struct DLL_API InputFileDeleter { - void operator()(InputFile* p); -}; - -class OutputFile; -struct DLL_API OutputFileDeleter { - void operator()(OutputFile* p); -}; - -} // namespace nearby - -namespace nearby { -namespace windows { - -class DLL_API InputFileW { - public: - explicit InputFileW(nearby::InputFile* input_file); - InputFileW(nearby::PayloadId payload_id, size_t size); - InputFileW(const char* file_path, size_t size); - InputFileW(InputFileW&&) noexcept; - - // Returns a string that uniquely identifies this file. - void GetFilePath(char* file_path) const; - - // Returns total size of this file in bytes. - size_t GetTotalSize() const; - - std::unique_ptr GetImpl(); - - private: - std::unique_ptr impl_; -}; - -class DLL_API OutputFileW { - public: - explicit OutputFileW(nearby::PayloadId payload_id); - explicit OutputFileW(const char* file_path); - OutputFileW(OutputFileW&&) noexcept; - OutputFileW& operator=(OutputFileW&&) noexcept; - - std::unique_ptr GetImpl(); - - private: - std::unique_ptr impl_; -}; - -} // namespace windows -} // namespace nearby - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_FILE_W_H_ diff --git a/connections/c/input_stream_w.cc b/connections/c/input_stream_w.cc deleted file mode 100644 index 1d656591..00000000 --- a/connections/c/input_stream_w.cc +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2022 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. -#include "connections/c/input_stream_w.h" - -#include "internal/platform/input_stream.h" - -namespace nearby { -void InputStreamDeleter::operator()(nearby::InputStream* p) { delete p; } -} // namespace nearby - -namespace nearby { -namespace windows { - -char* InputStreamW::Read(size_t size) { - auto result = impl_->Read(size); - if (result.ok()) { - return result.GetResult().data(); - } - return nullptr; -} - -int64_t InputStreamW::Skip(size_t offset) { - auto result = impl_->Skip(offset); - if (result.ok()) { - return result.GetResult(); - } - return -1; -} - -int64_t InputStreamW::Close() { - auto result = impl_->Close(); - if (result.Ok()) { - return 0; - } - return -1; -} - -} // namespace windows -} // namespace nearby diff --git a/connections/c/input_stream_w.h b/connections/c/input_stream_w.h deleted file mode 100644 index 94c78a30..00000000 --- a/connections/c/input_stream_w.h +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_INPUT_STREAM_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_INPUT_STREAM_W_H_ - -#include - -namespace nearby { - -class InputStream; -struct InputStreamDeleter { - void operator()(InputStream* p); -}; -} // namespace nearby - -namespace nearby { -namespace windows { - -class InputStreamW { - public: - char* Read(size_t size); - - // throws Exception::kIo - int64_t Skip(size_t offset); - - // throws Exception::kIo - int64_t Close(); - - private: - std::unique_ptr impl_; -}; - -} // namespace windows -} // namespace nearby - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_INPUT_STREAM_W_H_ diff --git a/connections/c/listeners_w.cc b/connections/c/listeners_w.cc deleted file mode 100644 index cfed3fac..00000000 --- a/connections/c/listeners_w.cc +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2022 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. - -#include -#include - -#include "connections/c/listeners_w.h" - -#include "connections/listeners.h" - -namespace nearby { -// Must implement Deleters, since the connections classes weren't -// fully defined in the header -namespace connections { -void ConnectionListenerDeleter::operator()(connections::ConnectionListener *p) { - delete p; -} -void DiscoveryListenerDeleter::operator()(connections::DiscoveryListener *p) { - delete p; -} -void PayloadListenerDeleter::operator()(connections::PayloadListener *p) { - delete p; -} -} // namespace connections - -namespace windows { - -static ResultCallbackW *ResultCallbackImpl; - -void ResultCB(Status status) { ResultCallbackImpl->result_cb(status); } - -ResultCallbackW::ResultCallbackW() - : impl(std::make_unique(ResultCB)) { - ResultCallbackImpl = this; -} - -ResultCallbackW::~ResultCallbackW() {} - -ResultCallbackW::ResultCallbackW(ResultCallbackW &other) { - impl = std::move(other.impl); -} - -ResultCallbackW::ResultCallbackW(ResultCallbackW &&other) noexcept { - impl = std::move(other.impl); -} - -ConnectionListenerW::ConnectionListenerW(InitiatedCB initiatedCB, - AcceptedCB acceptedCB, - RejectedCB rejectedCB, - DisconnectedCB disconnectedCB, - BandwidthChangedCB bandwidthChangedCB) - : initiated_cb(initiatedCB), - accepted_cb(acceptedCB), - rejected_cb(rejectedCB), - disconnected_cb(disconnectedCB), - bandwidth_changed_cb(bandwidthChangedCB), - impl_(std::unique_ptr( - new connections::ConnectionListener())) { - CHECK(initiated_cb != nullptr); - auto i = initiated_cb; - impl_->initiated_cb = - [i](const std::string &endpoint_id, - const connections::ConnectionResponseInfo connection_response_info) { - ConnectionResponseInfoW connection_response_info_w{ - connection_response_info.remote_endpoint_info.data(), - connection_response_info.remote_endpoint_info.size(), - connection_response_info.authentication_token.c_str(), - connection_response_info.raw_authentication_token.data(), - connection_response_info.raw_authentication_token.size(), - connection_response_info.is_incoming_connection, - connection_response_info.is_connection_verified}; - i(endpoint_id.c_str(), connection_response_info_w); - }; - - CHECK(accepted_cb != nullptr); - auto a = accepted_cb; - impl_->accepted_cb = [a](const std::string &endpoint_id) { - a(endpoint_id.c_str()); - }; - - CHECK(rejected_cb != nullptr); - auto r = rejected_cb; - impl_->rejected_cb = [r](const std::string &endpoint_id, Status status) { - r(endpoint_id.c_str(), status); - }; - - CHECK(disconnected_cb != nullptr); - auto d = disconnected_cb; - impl_->disconnected_cb = [d](const std::string &endpoint_id) { - d(endpoint_id.c_str()); - }; - - CHECK(bandwidth_changed_cb != nullptr); - auto bwc = bandwidth_changed_cb; - impl_->bandwidth_changed_cb = [bwc](const std::string &endpoint_id, - connections::Medium medium) { - bwc(endpoint_id.c_str(), medium); - }; -} - -ConnectionListenerW::ConnectionListenerW(ConnectionListenerW &other) { - impl_ = std::move(other.impl_); - accepted_cb = other.accepted_cb; - bandwidth_changed_cb = other.bandwidth_changed_cb; - disconnected_cb = other.disconnected_cb; - initiated_cb = other.initiated_cb; - rejected_cb = other.rejected_cb; -} - -ConnectionListenerW::ConnectionListenerW(ConnectionListenerW &&other) noexcept = - default; - -DiscoveryListenerW::DiscoveryListenerW( - EndpointFoundCB endpointFoundCB, EndpointLostCB endpointLostCB, - EndpointDistanceChangedCB endpointDistanceChangedCB) - : endpoint_found_cb(endpointFoundCB), - endpoint_lost_cb(endpointLostCB), - endpoint_distance_changed_cb(endpointDistanceChangedCB), - impl_(new connections::DiscoveryListener()) { - CHECK(endpoint_distance_changed_cb != nullptr); - auto epdc = endpoint_distance_changed_cb; - impl_->endpoint_distance_changed_cb = - [epdc](const std::string &endpoint_id, - connections::DistanceInfo distance_info) { - DistanceInfoW distanceInfoW = DistanceInfoW::kUnknown; - switch (distance_info) { - case connections::DistanceInfo::kFar: - distanceInfoW = DistanceInfoW::kFar; - break; - case connections::DistanceInfo::kClose: - distanceInfoW = DistanceInfoW::kFar; - break; - case connections::DistanceInfo::kVeryClose: - distanceInfoW = DistanceInfoW::kVeryClose; - break; - case connections::DistanceInfo::kUnknown: - break; - } - epdc(endpoint_id.c_str(), distanceInfoW); - }; - - CHECK(endpoint_found_cb != nullptr); - auto epf = endpoint_found_cb; - impl_->endpoint_found_cb = [epf](const std::string &endpoint_id, - ByteArray endpoint_info, - const std::string &service_id) { - epf(endpoint_id.c_str(), endpoint_info.data(), endpoint_info.size(), - service_id.c_str()); - }; - - CHECK(endpoint_lost_cb != nullptr); - auto epl = endpoint_lost_cb; - impl_->endpoint_lost_cb = [epl](const std::string &endpoint_id) { - epl(endpoint_id.c_str()); - }; -} - -DiscoveryListenerW::DiscoveryListenerW(DiscoveryListenerW &other) { - endpoint_distance_changed_cb = other.endpoint_distance_changed_cb; - endpoint_found_cb = other.endpoint_found_cb; - endpoint_lost_cb = other.endpoint_lost_cb; - impl_ = std::move(other.impl_); -} - -DiscoveryListenerW::DiscoveryListenerW(DiscoveryListenerW &&other) noexcept { - endpoint_distance_changed_cb = other.endpoint_distance_changed_cb; - endpoint_found_cb = other.endpoint_found_cb; - endpoint_lost_cb = other.endpoint_lost_cb; - impl_ = std::move(other.impl_); -} - -PayloadListenerW::PayloadListenerW(PayloadCB payloadCB, - PayloadProgressCB payloadProgressCB) - : payload_cb(payloadCB), - payload_progress_cb(payloadProgressCB), - impl_(std::unique_ptr( - new connections::PayloadListener())) { - CHECK(payload_cb != nullptr); - auto pcb = payload_cb; - impl_->payload_cb = [pcb](absl::string_view endpoint_id, - connections::Payload payload) { - PayloadW payloadW; - - switch (payload.GetType()) { - case connections::PayloadType::kBytes: { - payloadW = PayloadW(payload.GetId(), payload.AsBytes().data(), - payload.AsBytes().size()); - break; - } - case connections::PayloadType::kFile: { - InputFileW file(std::move(payload.AsFile())); - payloadW = PayloadW(payload.GetId(), std::move(file)); - } break; - - // TODO(jfcarroll): Figure out how to capture type kStream. - // case connections::PayloadType::kStream: { - // payloadW = PayloadW(payload.AsStream()); - //} - case connections::PayloadType::kStream: { - InputFileW file(std::move(payload.AsFile())); - payloadW = PayloadW(payload.GetId(), std::move(file)); - } break; - case connections::PayloadType::kUnknown: { - // Throw exception here? - break; - } - } - pcb(std::string(endpoint_id).c_str(), payloadW); - }; - - CHECK(payload_progress_cb != nullptr); - auto ppcb = payload_progress_cb; - impl_->payload_progress_cb = - [ppcb](absl::string_view endpoint_id, - connections::PayloadProgressInfo payload_progress_info) { - PayloadProgressInfoW payload_progress_info_w; - payload_progress_info_w.payload_id = payload_progress_info.payload_id; - payload_progress_info_w.total_bytes = payload_progress_info.total_bytes; - payload_progress_info_w.bytes_transferred = - payload_progress_info.bytes_transferred; - - switch (payload_progress_info.status) { - case connections::PayloadProgressInfo::Status::kCanceled: - payload_progress_info_w.status = - PayloadProgressInfoW::Status::kCanceled; - break; - case connections::PayloadProgressInfo::Status::kFailure: - payload_progress_info_w.status = - PayloadProgressInfoW::Status::kFailure; - break; - case connections::PayloadProgressInfo::Status::kInProgress: - payload_progress_info_w.status = - PayloadProgressInfoW::Status::kInProgress; - break; - case connections::PayloadProgressInfo::Status::kSuccess: - payload_progress_info_w.status = - PayloadProgressInfoW::Status::kSuccess; - break; - } - - ppcb(std::string(endpoint_id).c_str(), payload_progress_info_w); - }; -} - -PayloadListenerW::PayloadListenerW(PayloadListenerW &other) { - impl_ = std::move(other.impl_); -} - -PayloadListenerW::PayloadListenerW(PayloadListenerW &&other) noexcept { - impl_ = std::move(other.impl_); -} - -} // namespace windows -} // namespace nearby diff --git a/connections/c/listeners_w.h b/connections/c/listeners_w.h deleted file mode 100644 index 5d69acfd..00000000 --- a/connections/c/listeners_w.h +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_LISTENERS_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_LISTENERS_W_H_ - -#include -#include - -// This file defines all the protocol listeners and their parameter structures. -// Listeners are defined as collections of std::function instances, which is -// more flexible than a virtual function: -// - a subset of listener callbacks may be overridden, while others may remain -// default-initialized. -// - callbacks may be initialized with lambdas; lambda definitions are concize. - -#include "connections/c/medium_selector_w.h" -#include "connections/c/payload_w.h" -#include "connections/status.h" -#include "internal/platform/payload_id.h" - -namespace nearby { -// Forward declarations -namespace connections { -struct ConnectionListener; -struct DLL_API ConnectionListenerDeleter { - void operator()(connections::ConnectionListener* p); -}; - -struct DiscoveryListener; -struct DLL_API DiscoveryListenerDeleter { - void operator()(connections::DiscoveryListener* p); -}; - -struct PayloadListener; -struct DLL_API PayloadListenerDeleter { - void operator()(connections::PayloadListener* p); -}; - -using ResultCallback = absl::AnyInvocable; - -struct ConnectionResponseInfo; -struct PayloadProgressInfo; -} // namespace connections - -namespace windows { - -using ::nearby::connections::Status; - -template -T DefaultConstructor() { - return T(); -} -template -void DefaultConstructor(T t) {} -template -void DefaultConstructor(T t, C c) {} -template -void DefaultConstructor(T t, C c, size_t size, D d) {} - -extern "C" { - -// Common callback for asynchronously invoked methods. -// Called after a job scheduled for execution is completed. -// This is not the same as completion of the associated process, -// which may have many states, and multiple async jobs, and be still ongoing. -// Progress on the overall process is reported by the associated listener. -struct DLL_API ResultCallbackW { - // Callback to access the status of the operation when available. - // status - result of job execution; - // Status::kSuccess, if successful; anything else indicates failure. - ResultCallbackW(); - ~ResultCallbackW(); - ResultCallbackW(ResultCallbackW& other); - ResultCallbackW(ResultCallbackW&& other) noexcept; - - void (*result_cb)(Status status) = DefaultConstructor; - - std::unique_ptr GetImpl() { - return std::move(impl); - } - - private: - std::unique_ptr impl; -}; - -struct DLL_API ConnectionResponseInfoW { - const char* remote_endpoint_info; - size_t remote_endpoint_info_size; - const char* authentication_token; - const char* raw_authentication_token; - size_t raw_authentication_token_size; - bool is_incoming_connection = false; - bool is_connection_verified = false; -}; - -struct DLL_API PayloadProgressInfoW { - PayloadId payload_id = 0; - enum class Status { - kSuccess, - kFailure, - kInProgress, - kCanceled, - } status = Status::kSuccess; - size_t total_bytes = 0; - size_t bytes_transferred = 0; -}; - -enum class DLL_API DistanceInfoW { - kUnknown = 1, - kVeryClose = 2, - kClose = 3, - kFar = 4, -}; - -struct DLL_API ConnectionListenerW { - typedef void (*InitiatedCB)(const char* endpoint_id, - const ConnectionResponseInfoW& info); - - typedef void (*AcceptedCB)(const char* endpoint_id); - typedef void (*RejectedCB)(const char* endpoint_id, Status status); - - typedef void (*DisconnectedCB)(const char* endpoint_id); - typedef void (*BandwidthChangedCB)(const char* endpoint_id, MediumW medium); - - ConnectionListenerW(InitiatedCB, AcceptedCB, RejectedCB, DisconnectedCB, - BandwidthChangedCB); - ConnectionListenerW(ConnectionListenerW& other); - ConnectionListenerW(ConnectionListenerW&& other) noexcept; - - // A basic encrypted channel has been created between you and the endpoint. - // Both sides are now asked if they wish to accept or reject the connection - // before any data can be sent over this channel. - // - // This is your chance, before you accept the connection, to confirm that you - // connected to the correct device. Both devices are given an identical token; - // it's up to you to decide how to verify it before proceeding. Typically this - // involves showing the token on both devices and having the users manually - // compare and confirm; however, this is only required if you desire a secure - // connection between the devices. - // - // Whichever route you decide to take (including not authenticating the other - // device), call Core::AcceptConnection() when you're ready to talk, or - // Core::RejectConnection() to close the connection. - // - // endpoint_id - The identifier for the remote endpoint. - // info - Other relevant information about the connection. - InitiatedCB initiated_cb = DefaultConstructor; - - // Called after both sides have accepted the connection. - // Both sides may now send Payloads to each other. - // Call Core::SendPayload() or wait for incoming PayloadListener::OnPayload(). - // - // endpoint_id - The identifier for the remote endpoint. - AcceptedCB accepted_cb = DefaultConstructor; - - // Called when either side rejected the connection. - // Payloads can not be exchanged. Call Core::DisconnectFromEndpoint() - // to terminate connection. - // - // endpoint_id - The identifier for the remote endpoint. - RejectedCB rejected_cb = DefaultConstructor; - - // Called when a remote endpoint is disconnected or has become unreachable. - // At this point service (re-)discovery may start again. - // - // endpoint_id - The identifier for the remote endpoint. - DisconnectedCB disconnected_cb = DefaultConstructor; - - // Called when the connection's available bandwidth has changed. - // - // endpoint_id - The identifier for the remote endpoint. - // medium - Medium we upgraded to. - BandwidthChangedCB bandwidth_changed_cb = DefaultConstructor; - - std::unique_ptr - GetImpl() { - return std::move(impl_); - } - - private: - std::unique_ptr - impl_; -}; - -struct DLL_API DiscoveryListenerW { - typedef void (*EndpointFoundCB)(const char* endpoint_id, - const char* endpoint_info, - size_t endpoint_info_size, - const char* service_id); - typedef void (*EndpointLostCB)(const char* endpoint_id); - typedef void (*EndpointDistanceChangedCB)(const char* endpoint_id, - DistanceInfoW info); - - DiscoveryListenerW(EndpointFoundCB endpointFoundCB, - EndpointLostCB endpointLostCB, - EndpointDistanceChangedCB endpointDistanceChangedCB); - DiscoveryListenerW(DiscoveryListenerW& other); - DiscoveryListenerW(DiscoveryListenerW&& other) noexcept; - - // Called when a remote endpoint is discovered. - // - // endpoint_id - The ID of the remote endpoint that was discovered. - // endpoint_info - The info of the remote endpoint represented by ByteArray. - // service_id - The ID of the service advertised by the remote endpoint. - EndpointFoundCB endpoint_found_cb = DefaultConstructor; - - // Called when a remote endpoint is no longer discoverable; only called for - // endpoints that previously had been passed to {@link - // #onEndpointFound(String, DiscoveredEndpointInfo)}. - // - // endpoint_id - The ID of the remote endpoint that was lost. - EndpointLostCB endpoint_lost_cb = DefaultConstructor; - - // Called when a remote endpoint is found with an updated distance. - // - // arguments: - // endpoint_id - The ID of the remote endpoint that was lost. - // info - The distance info, encoded as enum value. - EndpointDistanceChangedCB endpoint_distance_changed_cb = DefaultConstructor; - - std::unique_ptr - GetImpl() { - return std::move(impl_); - } - - private: - std::unique_ptr - impl_; -}; - -struct DLL_API PayloadListenerW { - typedef void (*PayloadCB)(const char* endpoint_id, PayloadW& payload); - typedef void (*PayloadProgressCB)(const char* endpoint_id, - const PayloadProgressInfoW& info); - - PayloadListenerW(PayloadCB, PayloadProgressCB); - PayloadListenerW(PayloadListenerW& other); - PayloadListenerW(PayloadListenerW&& other) noexcept; - - // Called when a Payload is received from a remote endpoint. Depending - // on the type of the Payload, all of the data may or may not have been - // received at the time of this call. Use OnPayloadProgress() to - // get updates on the status of the data received. - // - // endpoint_id - The identifier for the remote endpoint that sent the - // payload. - // payload - The Payload object received. - PayloadCB payload_cb = DefaultConstructor; - - // Called with progress information about an active Payload transfer, either - // incoming or outgoing. - // - // endpoint_id - The identifier for the remote endpoint that is sending or - // receiving this payload. - // info - The PayloadProgressInfo structure describing the status of - // the transfer. - PayloadProgressCB payload_progress_cb = DefaultConstructor; - - std::unique_ptr - GetImpl() { - return std::move(impl_); - } - - private: - std::unique_ptr - impl_; -}; - -} // extern "C" -} // namespace windows -} // namespace nearby - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_LISTENERS_W_H_ diff --git a/connections/c/medium_selector_w.h b/connections/c/medium_selector_w.h deleted file mode 100644 index 555cad0e..00000000 --- a/connections/c/medium_selector_w.h +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_MEDIUM_SELECTOR_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_MEDIUM_SELECTOR_W_H_ - -#include - -#include "proto/connections_enums.pb.h" - -namespace nearby::windows { - -using MediumW = ::location::nearby::proto::connections::Medium; - -// Feature On/Off switch for mediums. -struct BooleanMediumSelectorW { - bool bluetooth; - bool ble; - bool web_rtc; - bool wifi_lan; - bool wifi_hotspot; - bool wifi_direct; - - BooleanMediumSelectorW() = default; - constexpr BooleanMediumSelectorW(const BooleanMediumSelectorW&) = default; - constexpr BooleanMediumSelectorW& operator=(const BooleanMediumSelectorW&) = - default; - constexpr bool Any(const bool value) const { - return bluetooth == value || ble == value || web_rtc == value || - wifi_lan == value || wifi_hotspot == value || wifi_direct == value; - } - - constexpr bool All(const bool value) const { - return bluetooth == value && ble == value && web_rtc == value && - wifi_lan == value && wifi_hotspot == value && wifi_direct == value; - } - - constexpr int Count(const bool value) const { - int count = 0; - if (bluetooth == value) ++count; - if (ble == value) ++count; - if (wifi_lan == value) ++count; - if (wifi_hotspot == value) ++count; - if (wifi_direct == value) ++count; - if (web_rtc == value) ++count; - return count; - } - - constexpr BooleanMediumSelectorW& SetAll(const bool value) { - bluetooth = value; - ble = value; - web_rtc = value; - wifi_lan = value; - wifi_hotspot = value; - wifi_direct = value; - return *this; - } - - std::vector GetMediums(const bool value) const { - std::vector mediums; - // Mediums are sorted in order of decreasing preference. - if (wifi_lan == value) mediums.push_back(MediumW::WIFI_LAN); - if (wifi_direct == value) mediums.push_back(MediumW::WIFI_DIRECT); - if (wifi_hotspot == value) mediums.push_back(MediumW::WIFI_HOTSPOT); - if (web_rtc == value) mediums.push_back(MediumW::WEB_RTC); - if (bluetooth == value) mediums.push_back(MediumW::BLUETOOTH); - if (ble == value) mediums.push_back(MediumW::BLE); - return mediums; - } -}; - -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_MEDIUM_SELECTOR_W_H_ diff --git a/connections/c/options_base_w.h b/connections/c/options_base_w.h deleted file mode 100644 index 605af7cf..00000000 --- a/connections/c/options_base_w.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_OPTIONS_BASE_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_OPTIONS_BASE_W_H_ - -#include "connections/c/medium_selector_w.h" -#include "connections/c/strategy_w.h" - -namespace nearby::windows { - -extern "C" { - -// Connection Options: used for both Advertising and Discovery. -// All fields are mutable, to make the type copy-assignable. -struct OptionsBaseW { - nearby::windows::StrategyW strategy; - BooleanMediumSelectorW allowed{BooleanMediumSelectorW().SetAll(true)}; -}; - -} // extern "C" -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_OPTIONS_BASE_W_H_ diff --git a/connections/c/out_of_band_connection_metadata_w.h b/connections/c/out_of_band_connection_metadata_w.h deleted file mode 100644 index a29305d8..00000000 --- a/connections/c/out_of_band_connection_metadata_w.h +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_OUT_OF_BAND_CONNECTION_METADATA_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_OUT_OF_BAND_CONNECTION_METADATA_H_ - -#include - -#include "connections/c/medium_selector_w.h" -#include "connections/c/strategy_w.h" -#include "internal/platform/byte_array.h" -#include "proto/connections_enums.pb.h" - -namespace nearby::windows { - -extern "C" { - -// Metadata injected to facilitate out-of-band connections. The medium field is -// required, and the other fields are only specified for a specific medium. -// Currently, Bluetooth is the only supported medium for out-of-band -// connections. -struct DLL_API OutOfBandConnectionMetadataW { - // Medium to use for the out-of-band connection. - MediumW medium; - - // Endpoint ID to use for the injected connection; will be included in the - // endpoint_found_cb callback. Must be exactly 4 bytes and should be randomly- - // generated such that no two IDs are identical. - const char* endpoint_id; - - // Endpoint info to use for the injected connection; will be included in the - // endpoint_found_cb callback. Should uniquely identify the InjectEndpoint() - // call so that the client which made the call can verify the endpoint - // that was found is the one that was injected. - // - // Cannot be empty, and must be <131 bytes. - const char* endpoint_info; - size_t endpoint_info_size; - - // Used for Bluetooth connections. - const char* remote_bluetooth_mac_address; - size_t remote_bluetooth_mac_address_size; -}; - -} // extern "C" -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_OUT_OF_BAND_CONNECTION_METADATA_H_ diff --git a/connections/c/params_w.h b/connections/c/params_w.h deleted file mode 100644 index 5c5b825a..00000000 --- a/connections/c/params_w.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_PARAMS_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_PARAMS_W_H_ - -#include - -#include "connections/c/listeners_w.h" - -namespace nearby::windows { - -extern "C" { - -// Used by Discovery in Core::RequestConnection(). -// Used by Advertising in Core::StartAdvertising(). -struct DLL_API ConnectionRequestInfoW { - // endpoint_info - Identifying information about this endpoint (eg. name, - // device type). - // listener - A set of callbacks notified when remote endpoints request a - // connection to this endpoint. - // ByteArray endpoint_info; - const char* endpoint_info; - size_t endpoint_info_size; - ConnectionListenerW& listener; -}; - -} // extern "C" -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_PARAMS_W_H_ diff --git a/connections/c/payload_w.cc b/connections/c/payload_w.cc deleted file mode 100644 index 5faf69c0..00000000 --- a/connections/c/payload_w.cc +++ /dev/null @@ -1,138 +0,0 @@ -// Copyright 2022 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. -#include "connections/c/payload_w.h" - -#include -#include -#include -#include - -#include "connections/c/file_w.h" -#include "connections/payload.h" -#include "connections/payload_type.h" -#include "internal/platform/byte_array.h" -#include "internal/platform/input_stream.h" -#include "internal/platform/payload_id.h" - -namespace nearby { -// Must implement Deleter since Payload wasn't fully defined in -// the header -namespace connections { -class Payload; -void PayloadDeleter::operator()(connections::Payload *p) { delete p; } - -} // namespace connections -namespace windows { - -PayloadW::PayloadW() - : impl_(std::unique_ptr( - new connections::Payload())) {} - -PayloadW::~PayloadW() = default; -PayloadW::PayloadW(PayloadW &&other) noexcept : impl_(std::move(other.impl_)) {} - -PayloadW &PayloadW::operator=(PayloadW &&other) noexcept { - impl_ = std::move(other.impl_); - return *this; -} - -// Constructors for outgoing payloads. -PayloadW::PayloadW(const char *bytes, const size_t bytes_size) - : impl_(std::unique_ptr( - new connections::Payload(ByteArray(bytes, bytes_size)))) {} - -PayloadW::PayloadW(InputFileW &file) - : impl_(std::unique_ptr( - new connections::Payload(InputFile(std::move(*file.GetImpl()))))) {} - -PayloadW::PayloadW(std::unique_ptr stream) - : impl_(std::unique_ptr( - new connections::Payload(std::move(stream)))) {} - -// Constructors for incoming payloads. -PayloadW::PayloadW(PayloadId id, const char *bytes, const size_t bytes_size) - : impl_(std::unique_ptr( - new connections::Payload(id, ByteArray(bytes, bytes_size)))) {} - -PayloadW::PayloadW(PayloadId id, InputFileW file) - : impl_(std::unique_ptr( - new connections::Payload(id, std::move(*file.GetImpl())))) {} - -PayloadW::PayloadW(const char *parent_folder, const char *file_name, - InputFileW file) - : impl_(std::unique_ptr( - new connections::Payload(parent_folder, file_name, - std::move(*file.GetImpl())))) {} - -PayloadW::PayloadW(PayloadId id, std::unique_ptr stream) - : impl_(std::unique_ptr( - new connections::Payload(id, std::move(stream)))) {} - -// Returns ByteArray payload, if it has been defined, or empty ByteArray. -bool PayloadW::AsBytes(const char *&bytes, size_t &bytes_size) const & { - auto byteArray = impl_->AsBytes(); - if (bytes_size < byteArray.size()) { - bytes_size = byteArray.size(); - bytes = nullptr; - return false; - } - - bytes_size = byteArray.size(); - bytes = byteArray.data(); - return true; -} -bool PayloadW::AsBytes(const char *&bytes, size_t &bytes_size) && { - auto byteArray = impl_->AsBytes(); - if (bytes_size < byteArray.size()) { - bytes_size = byteArray.size(); - bytes = nullptr; - return false; - } - - bytes_size = byteArray.size(); - bytes = byteArray.data(); - return true; -} -// Returns InputStream* payload, if it has been defined, or nullptr. -InputStream *PayloadW::AsStream() { return impl_->AsStream(); } -// Returns InputFile* payload, if it has been defined, or nullptr. -InputFile *PayloadW::AsFile() const { return impl_->AsFile(); } - -// Returns Payload unique ID. -int64_t PayloadW::GetId() const { return impl_->GetId(); } - -// Returns Payload type. -const connections::PayloadType PayloadW::GetType() const { - return static_cast(impl_->GetType()); -} - -// Sets the payload offset in bytes -void PayloadW::SetOffset(size_t offset) { impl_->SetOffset(offset); } - -size_t PayloadW::GetOffset() { return impl_->GetOffset(); } - -// Generate Payload Id; to be passed to outgoing file constructor. -PayloadId PayloadW::GenerateId() { return connections::Payload::GenerateId(); } - -const char *PayloadW::GetParentFolder() const { return nullptr; } - -const char *PayloadW::GetFileName() const { return nullptr; } - -std::unique_ptr -PayloadW::GetImpl() { - return std::move(impl_); -} - -} // namespace windows -} // namespace nearby diff --git a/connections/c/payload_w.h b/connections/c/payload_w.h deleted file mode 100644 index 17972e6e..00000000 --- a/connections/c/payload_w.h +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_PAYLOAD_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_PAYLOAD_W_H_ - -#include -#include -#include -#include - -#include "connections/c/dll_config.h" -#include "connections/c/file_w.h" -#include "connections/payload_type.h" -#include "internal/platform/payload_id.h" - -namespace nearby { -namespace connections { - -class Payload; -struct PayloadDeleter { - void operator()(Payload* p); -}; -} // namespace connections -} // namespace nearby - -namespace nearby { - -class InputFile; -class InputStream; - -} // namespace nearby - -namespace nearby { -namespace windows { - -extern "C" { - -// Payload is default-constructible, and moveable, but not copyable container -// that holds at most one instance of one of: -// ByteArray, InputStream, or InputFile. -class DLL_API PayloadW { - public: - PayloadW(PayloadW&& other) noexcept; - PayloadW& operator=(PayloadW&& other) noexcept; - - // Default (invalid) payload. - PayloadW(); - ~PayloadW(); - - // Constructors for outgoing payloads. - explicit PayloadW(const char* bytes, size_t size); - - explicit PayloadW(InputFileW& file); - explicit PayloadW(std::unique_ptr stream); - - // Constructors for incoming payloads. - PayloadW(PayloadId id, const char* bytes, size_t size); - PayloadW(PayloadId id, InputFileW file); - explicit PayloadW(const char* parent_folder, const char* file_name, - InputFileW file); - - PayloadW(PayloadId id, std::unique_ptr stream); - // Returns ByteArray payload, if it has - // been defined, or empty ByteArray. - bool AsBytes(const char*& bytes, size_t& bytes_size) const&; - bool AsBytes(const char*& bytes, size_t& bytes_size) &&; - // Returns InputStream* payload, if it has been defined, or nullptr. - InputStream* AsStream(); - // Returns InputFile* payload, if it has been defined, or nullptr. - InputFile* AsFile() const; - - // Returns Payload unique ID. - int64_t GetId() const; - - // Returns Payload type. - const nearby::connections::PayloadType GetType() const; - - // Sets the payload offset in bytes - void SetOffset(size_t offset); - - size_t GetOffset(); - - // Generate Payload Id; to be passed to outgoing file constructor. - static PayloadId GenerateId(); - - const char* GetFileName() const; - const char* GetParentFolder() const; - - std::unique_ptr GetImpl(); - - private: - std::unique_ptr impl_; -}; - -} // extern "C" - -} // namespace windows -} // namespace nearby - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_PAYLOAD_W_H_ diff --git a/connections/c/strategy_w.cc b/connections/c/strategy_w.cc deleted file mode 100644 index 08e10f45..00000000 --- a/connections/c/strategy_w.cc +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2022 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. - -#include "connections/c/strategy_w.h" - -#include - -namespace nearby::windows { - -const StrategyW StrategyW::kNone = {StrategyW::ConnectionType::kNone, - StrategyW::TopologyType::kUnknown}; -const StrategyW StrategyW::kP2pCluster{StrategyW::ConnectionType::kPointToPoint, - StrategyW::TopologyType::kManyToMany}; -const StrategyW StrategyW::kP2pStar{StrategyW::ConnectionType::kPointToPoint, - StrategyW::TopologyType::kOneToMany}; -const StrategyW StrategyW::kP2pPointToPoint{ - StrategyW::ConnectionType::kPointToPoint, - StrategyW::TopologyType::kOneToOne}; - -// static -const StrategyW& StrategyW::GetStrategyNone() { return StrategyW::kNone; } - -// static -const StrategyW& StrategyW::GetStrategyP2pCluster() { - return StrategyW::kP2pCluster; -} - -// static -const StrategyW& StrategyW::GetStrategyP2pStar() { return StrategyW::kP2pStar; } - -// static -const StrategyW& StrategyW::GetStrategyPointToPoint() { - return StrategyW::kP2pPointToPoint; -} - -bool StrategyW::IsNone() const { return *this == kNone; } - -bool StrategyW::IsValid() const { - return *this == kP2pStar || *this == kP2pCluster || *this == kP2pPointToPoint; -} - -std::string StrategyW::GetName() const { - if (*this == StrategyW::kP2pCluster) { - return "P2P_CLUSTER"; - } - if (*this == StrategyW::kP2pStar) { - return "P2P_STAR"; - } - if (*this == StrategyW::kP2pPointToPoint) { - return "P2P_POINT_TO_POINT"; - } - return "UNKNOWN"; -} - -void StrategyW::Clear() { *this = kNone; } - -bool operator==(const StrategyW& lhs, const StrategyW& rhs) { - return lhs.connection_type_ == rhs.connection_type_ && - lhs.topology_type_ == rhs.topology_type_; -} - -bool operator!=(const StrategyW& lhs, const StrategyW& rhs) { - return !(lhs == rhs); -} - -} // namespace nearby::windows diff --git a/connections/c/strategy_w.h b/connections/c/strategy_w.h deleted file mode 100644 index 008a94ba..00000000 --- a/connections/c/strategy_w.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2022 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 THIRD_PARTY_NEARBY_CONNECTIONS_C_STRATEGY_W_H_ -#define THIRD_PARTY_NEARBY_CONNECTIONS_C_STRATEGY_W_H_ - -#include - -#include "connections/c/dll_config.h" - -namespace nearby::windows { - -// Defines a copyable, comparable connection strategy type. -// It is one of: kP2pCluster, kP2pStar, kP2pPointToPoint. -class DLL_API StrategyW { - public: - static const StrategyW kNone; - static const StrategyW kP2pCluster; - static const StrategyW kP2pStar; - static const StrategyW kP2pPointToPoint; - constexpr StrategyW() : StrategyW(kNone) {} - constexpr StrategyW(const StrategyW&) = default; - constexpr StrategyW& operator=(const StrategyW&) = default; - - // Helper functions for exe to access static member variables in the dll. - static const StrategyW& GetStrategyNone(); - static const StrategyW& GetStrategyP2pCluster(); - static const StrategyW& GetStrategyP2pStar(); - static const StrategyW& GetStrategyPointToPoint(); - - // Returns true, if strategy is kNone, false otherwise. - bool IsNone() const; - - // Returns true, if a strategy is one of the supported strategies, - // false otherwise. - bool IsValid() const; - - // Returns a string representing given strategy, for every valid strategy. - std::string GetName() const; - - // Undefined strategy. - void Clear(); - friend bool operator==(const StrategyW& lhs, const StrategyW& rhs); - friend bool operator!=(const StrategyW& lhs, const StrategyW& rhs); - - private: - enum class ConnectionType { - kNone = 0, - kPointToPoint = 1, - }; - enum class TopologyType { - kUnknown = 0, - kOneToOne = 1, - kOneToMany = 2, - kManyToMany = 3, - }; - constexpr StrategyW(ConnectionType connection_type, - TopologyType topology_type) - : connection_type_(connection_type), topology_type_(topology_type) {} - ConnectionType connection_type_; - TopologyType topology_type_; -}; - -} // namespace nearby::windows - -#endif // THIRD_PARTY_NEARBY_CONNECTIONS_C_STRATEGY_W_H_ diff --git a/connections/c/version.rc.tpl b/connections/c/version.rc.tpl deleted file mode 100644 index 1b938f7b..00000000 --- a/connections/c/version.rc.tpl +++ /dev/null @@ -1,32 +0,0 @@ -#include "winres.h" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION $VS_VERSION - PRODUCTVERSION $VS_VERSION - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "CompanyName", "Google LLC" - VALUE "FileDescription", "Nearby Connections" - VALUE "FileVersion", "$VERSION" - VALUE "LegalCopyright", "Copyright (C) 2022 Google. All rights reserved." "\0" - VALUE "ProductName", "Nearby Connections" - VALUE "ProductVersion", "$VERSION" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END -END \ No newline at end of file