From d29b05c36752b6ebcae31c3c387a87f1f26560d9 Mon Sep 17 00:00:00 2001 From: bourdakos Date: Tue, 14 Dec 2021 11:10:34 -0800 Subject: [PATCH] The information advertised by the remote endpoint might not be a human readable string. This CL adds an `endpointInfo` property to the `GNCDiscoveredEndpointInfo` object, which is used to get the raw byte array that was advertised. For consistency with the Android API, `name` has also been renamed to `endpointName`. PiperOrigin-RevId: 416347703 --- cpp/platform/impl/ios/Source/GNCDiscoverer.h | 8 +++++--- .../impl/ios/Source/Internal/GNCDiscoverer.mm | 11 ++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/cpp/platform/impl/ios/Source/GNCDiscoverer.h b/cpp/platform/impl/ios/Source/GNCDiscoverer.h index 12519c00..0054b9d2 100644 --- a/cpp/platform/impl/ios/Source/GNCDiscoverer.h +++ b/cpp/platform/impl/ios/Source/GNCDiscoverer.h @@ -48,10 +48,12 @@ typedef void (^GNCConnectionRequester)( NSString *name, GNCDiscovererConnectionInitializationHandler connectionAuthorizationHandler, GNCConnectionFailureHandler failureHandler); -/** This contains info about a discovered advertiser endpoint. */ +/** Information about an endpoint when it's discovered. */ @protocol GNCDiscoveredEndpointInfo -/** This is a human readable name of the advertiser. */ -@property(nonatomic, readonly, copy) NSString *name; +/** The human readable name of the remote endpoint. */ +@property(nonatomic, readonly, copy) NSString *endpointName; +/** Information advertised by the remote endpoint. */ +@property(nonatomic, readonly, copy) NSData *endpointInfo; /** Call this block to request a connection with the advertiser. */ @property(nonatomic, readonly) GNCConnectionRequester requestConnection; @end diff --git a/cpp/platform/impl/ios/Source/Internal/GNCDiscoverer.mm b/cpp/platform/impl/ios/Source/Internal/GNCDiscoverer.mm index 057cefbe..cbc670f9 100644 --- a/cpp/platform/impl/ios/Source/Internal/GNCDiscoverer.mm +++ b/cpp/platform/impl/ios/Source/Internal/GNCDiscoverer.mm @@ -62,17 +62,20 @@ using ::location::nearby::connections::Status; /** This is a GNCDiscoveredEndpointInfo that provides storage for its properties. */ @interface GNCDiscoveredEndpointInfo : NSObject -@property(nonatomic, copy) NSString *name; +@property(nonatomic, copy) NSString *endpointName; +@property(nonatomic, copy) NSData *endpointInfo; @end @implementation GNCDiscoveredEndpointInfo @synthesize requestConnection = _requestConnection; -+ (instancetype)infoWithName:(NSString *)name ++ (instancetype)infoWithName:(NSString *)endpointName + endpointInfo:(NSData *)endpointInfo requestConnection:(GNCConnectionRequester)requestConnection { GNCDiscoveredEndpointInfo *info = [[GNCDiscoveredEndpointInfo alloc] init]; - info.name = name; + info.endpointName = endpointName; + info.endpointInfo = endpointInfo; info->_requestConnection = requestConnection; return info; } @@ -271,10 +274,12 @@ class GNCDiscoveryListener { // TODO(b/169292092): endpointInfo is an advertisement byte array. Need to implement to // extract the endpoint name not just force to cast string. NSString *name = ObjCStringFromCppString(std::string(endpoint_info)); + NSData *info = NSDataFromByteArray(endpoint_info); GNCCore *core = discoverer.core; // don't capture |this| or |discoverer| NSMapTable *endpoints = discoverer.endpoints; GNCDiscoveredEndpointInfo *discEndpointInfo = [GNCDiscoveredEndpointInfo infoWithName:name + endpointInfo:info requestConnection:^(NSString *name, GNCDiscovererConnectionInitializationHandler connInitHandler, GNCConnectionFailureHandler connFailureHandler) {