From b57c23bcc14dad1f4aa79ab03ef49622e7a8879d Mon Sep 17 00:00:00 2001 From: Guogang Li Date: Tue, 6 May 2025 17:35:16 -0700 Subject: [PATCH] Add more logs PiperOrigin-RevId: 755592022 --- .../apple/Mediums/WiFiCommon/GNCNWFramework.m | 18 +++++++++++++++--- .../WiFiCommon/GNCNWFrameworkServerSocket.m | 15 +++++++++++++-- .../implementation/apple/ble_gatt_client.mm | 13 +++++++++---- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.m b/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.m index 61fa8f44..7962370f 100644 --- a/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.m +++ b/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFramework.m @@ -73,6 +73,9 @@ NSDictionary *GNCTXTRecordForBrowseResult(nw_browse_resu // service type. We maintain ownership of the browser's lifetime, so we can maintain a strong // reference. NSMutableDictionary *_serviceBrowsers; + + // The dispatch queue used for all callbacks. + dispatch_queue_t _dispatchQueue; } - (instancetype)init { @@ -80,6 +83,7 @@ NSDictionary *GNCTXTRecordForBrowseResult(nw_browse_resu _includePeerToPeer = NO; _serverSockets = [NSMapTable strongToWeakObjectsMapTable]; _serviceBrowsers = [[NSMutableDictionary alloc] init]; + _dispatchQueue = dispatch_queue_create("GNCNWFramework", DISPATCH_QUEUE_SERIAL); } return self; } @@ -99,17 +103,19 @@ static GNCNWFramework *gInstance = nil; return gInstance; } -- (BOOL) isListeningForAnyService { +- (BOOL)isListeningForAnyService { return _serverSockets.count > 0; } -- (BOOL) isDiscoveringAnyService { +- (BOOL)isDiscoveringAnyService { return _serviceBrowsers.count > 0; } - (GNCNWFrameworkServerSocket *)listenForServiceOnPort:(NSInteger)port includePeerToPeer:(BOOL)includePeerToPeer error:(NSError **)error { + GTMLoggerInfo(@"[GNCNWFramework] Listen on port: %ld with includePeerToPeer: %@.", (long)port, + (includePeerToPeer ? @"true" : @"false")); GNCNWFrameworkServerSocket *serverSocket = [[GNCNWFrameworkServerSocket alloc] initWithPort:port]; _includePeerToPeer = includePeerToPeer; BOOL success = [serverSocket startListeningWithError:error includePeerToPeer:_includePeerToPeer]; @@ -162,7 +168,7 @@ static GNCNWFramework *gInstance = nil; nw_browse_descriptor_set_include_txt_record(descriptor, YES); nw_browser_t browser = nw_browser_create(descriptor, parameters); - nw_browser_set_queue(browser, dispatch_get_main_queue()); + nw_browser_set_queue(browser, _dispatchQueue); nw_browser_set_browse_results_changed_handler(browser, ^(nw_browse_result_t old_result, nw_browse_result_t new_result, @@ -284,6 +290,9 @@ static GNCNWFramework *gInstance = nil; - (GNCNWFrameworkSocket *)connectToServiceName:(NSString *)serviceName serviceType:(NSString *)serviceType error:(NSError **)error { + GTMLoggerInfo(@"[GNCNWFramework] Connect to service {serviceName:%@, serviceType:%@, " + @"includePeerToPeer:%@}.", + serviceName, serviceType, (_includePeerToPeer ? @"true" : @"false")); nw_endpoint_t endpoint = nw_endpoint_create_bonjour_service([serviceName UTF8String], [serviceType UTF8String], "local"); return [self connectToEndpoint:endpoint includePeerToPeer:_includePeerToPeer error:error]; @@ -293,6 +302,8 @@ static GNCNWFramework *gInstance = nil; port:(NSInteger)port includePeerToPeer:(BOOL)includePeerToPeer error:(NSError **)error { + GTMLoggerInfo(@"[GNCNWFramework] Connect to host {host:%s, port:%ld}.", + host.dottedRepresentation.UTF8String, (long)port); nw_endpoint_t endpoint = nw_endpoint_create_host(host.dottedRepresentation.UTF8String, @(port).stringValue.UTF8String); return [self connectToEndpoint:endpoint includePeerToPeer:(BOOL)includePeerToPeer error:error]; @@ -348,6 +359,7 @@ static GNCNWFramework *gInstance = nil; *error = blockError; } + GTMLoggerInfo(@"[GNCNWFramework] Connect to endpoint result %@", @(blockResult)); switch (blockResult) { case nw_connection_state_invalid: case nw_connection_state_waiting: diff --git a/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFrameworkServerSocket.m b/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFrameworkServerSocket.m index 078a0260..ee8c3bfc 100644 --- a/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFrameworkServerSocket.m +++ b/internal/platform/implementation/apple/Mediums/WiFiCommon/GNCNWFrameworkServerSocket.m @@ -40,6 +40,7 @@ nw_listener_t _listener; nw_listener_state_t _listenerState; NSError *_listenerError; + dispatch_queue_t _dispatchQueue; } - (instancetype)initWithPort:(NSInteger)port { @@ -48,6 +49,7 @@ _port = port; _condition = [[NSCondition alloc] init]; _listenerState = nw_listener_state_invalid; + _dispatchQueue = dispatch_queue_create("GNCNWFrameworkServerSocket", DISPATCH_QUEUE_SERIAL); } return self; } @@ -128,14 +130,14 @@ } // Register to listen for incoming connections. - nw_listener_set_queue(_listener, dispatch_get_main_queue()); + nw_listener_set_queue(_listener, _dispatchQueue); nw_listener_set_new_connection_handler(_listener, ^(nw_connection_t connection) { // Keep track of any incoming connections. We must keep a reference otherwise the connection // will be dropped. [self.pendingConnections addObject:connection]; // Register for state changes so we can clean up any failed/canceled connections and inform // Nearby of any ready connections when asked. - nw_connection_set_queue(connection, dispatch_get_main_queue()); + nw_connection_set_queue(connection, _dispatchQueue); nw_connection_set_state_changed_handler(connection, ^(nw_connection_state_t state, nw_error_t error) { [_condition lock]; @@ -203,10 +205,12 @@ case nw_listener_state_waiting: case nw_listener_state_failed: case nw_listener_state_cancelled: + GTMLoggerError(@"[GNCNWFrameworkServerSocket] Listen state: %u", _listenerState); [self close]; return NO; case nw_listener_state_ready: _port = nw_listener_get_port(_listener); + GTMLoggerInfo(@"[GNCNWFrameworkServerSocket] Listen on port: %ld", (long)_port); return YES; } } @@ -214,6 +218,10 @@ - (void)startAdvertisingServiceName:(NSString *)serviceName serviceType:(NSString *)serviceType txtRecords:(NSDictionary *)txtRecords { + GTMLoggerInfo(@"[GNCNWFrameworkServerSocket] Start advertising {serviceName:%@, " + @"serviceType: %@}", + serviceName, serviceType); + nw_advertise_descriptor_t advertiseDescriptor = nw_advertise_descriptor_create_bonjour_service( [serviceName UTF8String], [serviceType UTF8String], /*domain=*/nil); nw_txt_record_t txtRecord = nw_txt_record_create_dictionary(); @@ -221,6 +229,9 @@ NSString *recordValue = [txtRecords objectForKey:key]; nw_txt_record_set_key(txtRecord, [key UTF8String], [recordValue UTF8String], [recordValue length]); + GTMLoggerDebug(@"[GNCNWFrameworkServerSocket] Text record {key: " + @"%@, value: %@}", + key, recordValue); } nw_advertise_descriptor_set_txt_record_object(advertiseDescriptor, txtRecord); nw_listener_set_advertise_descriptor(_listener, advertiseDescriptor); diff --git a/internal/platform/implementation/apple/ble_gatt_client.mm b/internal/platform/implementation/apple/ble_gatt_client.mm index 52b49e6a..b099118b 100644 --- a/internal/platform/implementation/apple/ble_gatt_client.mm +++ b/internal/platform/implementation/apple/ble_gatt_client.mm @@ -128,10 +128,15 @@ bool GattClient::SetCharacteristicSubscription( } void GattClient::Disconnect() { - // There seems to be an issue between some iOS<>Android device pairs where the Android device will - // not connect to the iOS device if the iOS device disconnects and then attempts to reconnect. - // Because of this, we no-op here instead of calling `[gatt_client_ disconnect]`. - // See: b/375176623 +// There seems to be an issue between some iOS<>Android device pairs where the Android device will +// not connect to the iOS device if the iOS device disconnects and then attempts to reconnect. +// Because of this, we no-op here instead of calling `[gatt_client_ disconnect]`. +// See: b/375176623 +#if defined(NC_IOS_SDK) + // Avoid to impact GTV functionality, put the disconnect for NC iOS SDK only, so thatGATT client + // can reconnect to the GATT server. + [gatt_client_ disconnect]; +#endif } } // namespace apple