Add more logs

PiperOrigin-RevId: 755592022
This commit is contained in:
Guogang Li
2025-05-06 17:36:46 -07:00
committed by Copybara-Service
parent 067450c9ef
commit b57c23bcc1
3 changed files with 37 additions and 9 deletions
@@ -73,6 +73,9 @@ NSDictionary<NSString *, NSString *> *GNCTXTRecordForBrowseResult(nw_browse_resu
// service type. We maintain ownership of the browser's lifetime, so we can maintain a strong
// reference.
NSMutableDictionary<NSString *, nw_browser_t> *_serviceBrowsers;
// The dispatch queue used for all callbacks.
dispatch_queue_t _dispatchQueue;
}
- (instancetype)init {
@@ -80,6 +83,7 @@ NSDictionary<NSString *, NSString *> *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:
@@ -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<NSString *, NSString *> *)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);
@@ -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