diff --git a/idb_companion/Configuration/FBIDBPortsConfiguration.m b/idb_companion/Configuration/FBIDBPortsConfiguration.m index 3d49338f3..87d0a4693 100644 --- a/idb_companion/Configuration/FBIDBPortsConfiguration.m +++ b/idb_companion/Configuration/FBIDBPortsConfiguration.m @@ -7,6 +7,8 @@ #import "FBIDBPortsConfiguration.h" +static NSString *const GrpcPortKey = @"-grpc-port"; + @implementation FBIDBPortsConfiguration #pragma mark Initializers @@ -37,8 +39,7 @@ - (in_port_t)debugserverPort - (in_port_t)grpcPort { - return [self.userDefaults integerForKey:@"-grpc-port"] ?: 10882; + return [self.userDefaults stringForKey:GrpcPortKey] ? [self.userDefaults integerForKey:GrpcPortKey] : 10882; } - @end diff --git a/idb_companion/Server/FBGRPCServer.mm b/idb_companion/Server/FBGRPCServer.mm index 9af6df35c..2b527b675 100644 --- a/idb_companion/Server/FBGRPCServer.mm +++ b/idb_companion/Server/FBGRPCServer.mm @@ -24,6 +24,8 @@ @interface FBGRPCServer () @property (nonatomic, strong, readonly) id eventReporter; @property (nonatomic, strong, readonly) FBMutableFuture *serverTerminated; +@property (nonatomic, assign, readwrite) in_port_t selectedPort; + @end using grpc::Server; @@ -68,20 +70,23 @@ - (instancetype)initWithPorts:(FBIDBPortsConfiguration *)ports target:(id *serverStarted = FBMutableFuture.future; dispatch_async(queue, ^(void){ + [self.logger logFormat:@"Starting GRPC server on port %u", self.ports.grpcPort]; string server_address("0.0.0.0:" + std::to_string(self.ports.grpcPort)); FBIDBServiceHandler service = FBIDBServiceHandler(self.commandExecutor, self.target, self.eventReporter, self.ports); + int selectedPort = self.ports.grpcPort; unique_ptr server(ServerBuilder() - .AddListeningPort(server_address, grpc::InsecureServerCredentials()) + .AddListeningPort(server_address, grpc::InsecureServerCredentials(), &selectedPort) .RegisterService(&service) .SetResourceQuota(ResourceQuota("idb_resource.quota").SetMaxThreads(10)) .SetMaxReceiveMessageSize(16777216) // 16MB (16 * 1024 * 1024). Default is 4MB (4 * 1024 * 1024) .BuildAndStart() ); + self.selectedPort = selectedPort; [serverStarted resolveWithResult:NSNull.null]; - [self.logger.info logFormat:@"Started GRPC server on port %u", self.ports.grpcPort]; + [self.logger.info logFormat:@"Started GRPC server on port %u", selectedPort]; server->Wait(); - [self.logger.info logFormat:@"GRPC server is no longer running on port %u", self.ports.grpcPort]; + [self.logger.info logFormat:@"GRPC server is no longer running on port %u", selectedPort]; [self.serverTerminated resolveWithResult:NSNull.null]; }); return serverStarted; @@ -99,7 +104,7 @@ - (NSString *)futureType - (id)jsonSerializableRepresentation { - return @{@"grpc_port": @(self.ports.grpcPort)}; + return @{@"grpc_port": @(self.selectedPort)}; } @end