diff --git a/cpp/core/internal/base_endpoint_channel.cc b/cpp/core/internal/base_endpoint_channel.cc index 7d31ef1b..39e0abdf 100644 --- a/cpp/core/internal/base_endpoint_channel.cc +++ b/cpp/core/internal/base_endpoint_channel.cc @@ -24,7 +24,6 @@ #include "platform/public/logging.h" #include "platform/public/mutex.h" #include "platform/public/mutex_lock.h" -#include "proto/connections_enums.pb.h" namespace location { namespace nearby { diff --git a/cpp/core/internal/base_pcp_handler.cc b/cpp/core/internal/base_pcp_handler.cc index f371df35..db79f07c 100644 --- a/cpp/core/internal/base_pcp_handler.cc +++ b/cpp/core/internal/base_pcp_handler.cc @@ -33,7 +33,6 @@ #include "platform/base/bluetooth_utils.h" #include "platform/public/logging.h" #include "platform/public/system_clock.h" -#include "proto/connections_enums.pb.h" namespace location { namespace nearby { @@ -1478,7 +1477,6 @@ void BasePcpHandler::LogConnectionAttemptFailure( } } -// TODO(jfcarroll): FIXME!!!! void BasePcpHandler::LogConnectionAttemptSuccess( const std::string& endpoint_id, const PendingConnectionInfo& connection_info) { @@ -1498,26 +1496,22 @@ void BasePcpHandler::LogConnectionAttemptSuccess( "LogConnectionAttemptSuccess. Bail out."); return; } - // TODO(jfcarroll): Something in the below code is coming up null - // causing a crash. I can't debug this locally, and as a TVC I'm - // not able to debug using ciderd. - // if (connection_info.is_incoming) { - // connection_info.client->GetAnalyticsRecorder().OnIncomingConnectionAttempt( - // proto::connections::INITIAL, - // connection_info.channel->GetMedium(), - // proto::connections::RESULT_SUCCESS, - // SystemClock::ElapsedRealtime() - connection_info.start_time, - // connection_info.connection_token, - // connections_attempt_metadata_params.get()); - //} else { - // connection_info.client->GetAnalyticsRecorder().OnOutgoingConnectionAttempt( - // endpoint_id, proto::connections::INITIAL, - // connection_info.channel->GetMedium(), - // proto::connections::RESULT_SUCCESS, - // SystemClock::ElapsedRealtime() - connection_info.start_time, - // connection_info.connection_token, - // connections_attempt_metadata_params.get()); - //} + if (connection_info.is_incoming) { + connection_info.client->GetAnalyticsRecorder().OnIncomingConnectionAttempt( + proto::connections::INITIAL, connection_info.channel->GetMedium(), + proto::connections::RESULT_SUCCESS, + SystemClock::ElapsedRealtime() - connection_info.start_time, + connection_info.connection_token, + connections_attempt_metadata_params.get()); + } else { + connection_info.client->GetAnalyticsRecorder().OnOutgoingConnectionAttempt( + endpoint_id, proto::connections::INITIAL, + connection_info.channel->GetMedium(), + proto::connections::RESULT_SUCCESS, + SystemClock::ElapsedRealtime() - connection_info.start_time, + connection_info.connection_token, + connections_attempt_metadata_params.get()); + } } bool BasePcpHandler::Cancelled(ClientProxy* client, diff --git a/cpp/platform/impl/ios/BUILD b/cpp/platform/impl/ios/BUILD index 844edece..257e351a 100644 --- a/cpp/platform/impl/ios/BUILD +++ b/cpp/platform/impl/ios/BUILD @@ -27,7 +27,6 @@ objc_library( "Source/Internal/GNCPayload.m", "Source/Internal/GNCPayloadListener.mm", "Source/Internal/GNCUtils.mm", - "Source/Internal/platform.mm", ], hdrs = [ "Source/GNCAdvertiser.h", diff --git a/cpp/platform/impl/ios/Source/Internal/GNCCore.h b/cpp/platform/impl/ios/Source/Internal/GNCCore.h index d0837380..d435961f 100644 --- a/cpp/platform/impl/ios/Source/Internal/GNCCore.h +++ b/cpp/platform/impl/ios/Source/Internal/GNCCore.h @@ -18,7 +18,6 @@ #include "core/core.h" #include "core/internal/service_controller_router.h" -#include "platform/base/payload_id.h" NS_ASSUME_NONNULL_BEGIN @@ -29,24 +28,6 @@ NS_ASSUME_NONNULL_BEGIN std::unique_ptr<::location::nearby::connections::ServiceControllerRouter> _service_controller_router; } - -/** - * These functions are the utilities to manipulate the InputFile in ImplementationPlatform for - * sending File payload. - * - * Inserts the URL to the map, keyed by payloadID. The element will not be inserted if there - * already is an element with the key in the map. - */ -- (void)insertURLToMapWithPayloadID:(::location::nearby::PayloadId)payloadId urlToSend:(NSURL *)url; - -/** - * Returns the URL with the payloadID and removes the entry from the map. Returns nil if - * payloadID is not found. - */ -- (nullable NSURL *)extractURLWithPayloadID:(::location::nearby::PayloadId)payloadId; - -- (void)clearSendingURLMaps; - @end /** This function returns the Core singleton, wrapped in an Obj-C object for lifetime management. */ diff --git a/cpp/platform/impl/ios/Source/Internal/GNCCore.mm b/cpp/platform/impl/ios/Source/Internal/GNCCore.mm index 3f84ec37..8c44a6c8 100644 --- a/cpp/platform/impl/ios/Source/Internal/GNCCore.mm +++ b/cpp/platform/impl/ios/Source/Internal/GNCCore.mm @@ -16,22 +16,15 @@ #include -#include "third_party/absl/container/flat_hash_map.h" -#include "third_party/absl/container/internal/common.h" #include "third_party/nearby/cpp/core/core.h" #include "third_party/nearby/cpp/core/internal/service_controller_router.h" -#include "third_party/nearby/cpp/platform/base/payload_id.h" #import "third_party/objective_c/google_toolbox_for_mac/Foundation/GTMLogger.h" using ::location::nearby::connections::Core; using ::location::nearby::PayloadId; using ::location::nearby::connections::ServiceControllerRouter; -@implementation GNCCore { - // A map to store the NSURL object with PayloadId for sendFilePayload in GNCConnection. - // This is the place to store the NSURL for InputFile creation in ImplementationPlatform. - absl::flat_hash_map _sending_urls; -} +@implementation GNCCore - (instancetype)init { GTMLoggerInfo(@"GNCCore created"); @@ -49,24 +42,6 @@ using ::location::nearby::connections::ServiceControllerRouter; GTMLoggerInfo(@"GNCCore deallocated"); } -- (void)insertURLToMapWithPayloadID:(PayloadId)payloadId urlToSend:(NSURL *)url { - _sending_urls.emplace(payloadId, url); -} - -- (nullable NSURL *)extractURLWithPayloadID:(PayloadId)payloadId { - NSURL *url; - auto it = _sending_urls.find(payloadId); - if (it != _sending_urls.end()) { - auto pair = _sending_urls.extract(it); - url = pair.mapped(); - } - return url; -} - -- (void)clearSendingURLMaps { - _sending_urls.clear(); -} - @end GNCCore *GNCGetCore() { diff --git a/cpp/platform/impl/ios/Source/Internal/GNCCoreConnection.mm b/cpp/platform/impl/ios/Source/Internal/GNCCoreConnection.mm index 607a884a..7ed49475 100644 --- a/cpp/platform/impl/ios/Source/Internal/GNCCoreConnection.mm +++ b/cpp/platform/impl/ios/Source/Internal/GNCCoreConnection.mm @@ -159,11 +159,7 @@ class GNCInputStreamFromNSStream : public InputStream { fileSize = fileSizeValue.longValue; } PayloadId payloadId = Payload::GenerateId(); - // Add the pair of payloadId and fileURL to the map in the GNCCore. - [_core insertURLToMapWithPayloadID:payloadId urlToSend:fileURL]; - - // TODO(edwinwu): Need someone familiar with iOS to fix this - std::string path("FIXME, WE NEED A PATH HERE"); + std::string path = CppStringFromObjCString([fileURL absoluteString]); Payload corePayload(payloadId, InputFile(path.c_str())); progress.totalUnitCount = fileSize; return [self sendPayload:std::move(corePayload) diff --git a/cpp/platform/impl/ios/Source/Platform/BUILD b/cpp/platform/impl/ios/Source/Platform/BUILD index 44886f36..934d05c6 100644 --- a/cpp/platform/impl/ios/Source/Platform/BUILD +++ b/cpp/platform/impl/ios/Source/Platform/BUILD @@ -17,6 +17,16 @@ package(default_visibility = ["//platform/impl/ios:__subpackages__"]) objc_library( name = "Platform", + srcs = [ + "platform.mm", + ], + deps = [ + ":Platform_objc", + ], +) + +objc_library( + name = "Platform_objc", srcs = [ "crypto.mm", "input_file.mm", diff --git a/cpp/platform/impl/ios/Source/Internal/platform.mm b/cpp/platform/impl/ios/Source/Platform/platform.mm similarity index 84% rename from cpp/platform/impl/ios/Source/Internal/platform.mm rename to cpp/platform/impl/ios/Source/Platform/platform.mm index 0bd3e990..869a9e41 100644 --- a/cpp/platform/impl/ios/Source/Internal/platform.mm +++ b/cpp/platform/impl/ios/Source/Platform/platform.mm @@ -17,8 +17,6 @@ #include #include "third_party/nearby/cpp/platform/api/mutex.h" -#include "third_party/nearby/cpp/platform/base/payload_id.h" -#import "third_party/nearby/cpp/platform/impl/ios/Source/Internal/GNCCore.h" #include "third_party/nearby/cpp/platform/impl/ios/Source/Platform/atomic_boolean.h" #include "third_party/nearby/cpp/platform/impl/ios/Source/Platform/atomic_uint32.h" #include "third_party/nearby/cpp/platform/impl/ios/Source/Platform/condition_variable.h" @@ -39,8 +37,15 @@ namespace api { std::unique_ptr ImplementationPlatform::GetDownloadPath( std::unique_ptr path) { - // TODO(jfcarroll): Fixme, we need to modulate the path the the system download path - return path; + // This is to get a file path, e.g. /tmp/[path], for the storage of payload file. + // NOTE: Per + // https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html + // Files saved in the /tmp directory will be deleted by the system. Callers should be responsible + // for copying the files to the permanent storage. + NSString* pathString = ObjCStringFromCppString(*path); + std::string wholePathString = + CppStringFromObjCString([NSTemporaryDirectory() stringByAppendingPathComponent:pathString]); + return std::make_unique(wholePathString); } // Atomics: @@ -72,20 +77,11 @@ std::unique_ptr ImplementationPlatform::CreateConditionVariab } std::unique_ptr ImplementationPlatform::CreateInputFile(const char* file_path) { -// Extract the NSURL object with payload_id from |GNCCore| which stores the maps. If the retrieved -// NSURL object is not nil, we create InputFile by ios::InputFile. The difference is -// that ios::InputFile implements to read bytes from local real file for sending. -// TODO(jfcarroll): Need someone familiar with iOS to fix this -#if 0 - GNCCore* core = GNCGetCore(); - NSURL* url = [core extractURLWithPayloadID:payload_id]; - if (url != nil) { - return absl::make_unique(url); - } else { - return absl::make_unique(GetDownloadPath(payload_id), total_size); - } -#endif - return nullptr; + NSURL* url = [NSURL fileURLWithFileSystemRepresentation:file_path + isDirectory:NO + relativeToURL:nil]; + + return absl::make_unique(url); } std::unique_ptr ImplementationPlatform::CreateOutputFile(const char* file_path) { diff --git a/cpp/platform/impl/ios/Tests/BUILD b/cpp/platform/impl/ios/Tests/BUILD index 5890a682..c0f032ed 100644 --- a/cpp/platform/impl/ios/Tests/BUILD +++ b/cpp/platform/impl/ios/Tests/BUILD @@ -23,8 +23,7 @@ objc_library( srcs = [ "Platform/GNCCryptoTest.mm", "Platform/GNCInputFileTest.mm", - # TODO(edwinwu): This test is failing, needs fixing. - #"Platform/GNCMultiThreadExecutorTest.mm", + "Platform/GNCMultiThreadExecutorTest.mm", "Platform/GNCScheduledExecutorTest.mm", "Platform/GNCSingleThreadExecutorTest.mm", ],