@@ -361,7 +361,7 @@ extension ClientConnection {
361
361
logger: Logger
362
362
) -> ClientBootstrapProtocol {
363
363
// Provide a server hostname if we're using TLS. Prefer the override.
364
- let serverHostname : String ? = configuration. tls. map {
364
+ var serverHostname : String ? = configuration. tls. map {
365
365
if let hostnameOverride = $0. hostnameOverride {
366
366
logger. debug ( " using hostname override for TLS " , metadata: [ " server-hostname " : " \( hostnameOverride) " ] )
367
367
return hostnameOverride
@@ -371,6 +371,12 @@ extension ClientConnection {
371
371
return host
372
372
}
373
373
}
374
+
375
+ if let hostname = serverHostname, hostname. isIPAddress {
376
+ logger. debug ( " IP address cannot be used for TLS SNI extension. No host used " , metadata: [ " server-hostname " : " nil " ] )
377
+ serverHostname = nil
378
+ }
379
+
374
380
375
381
let bootstrap = PlatformSupport . makeClientBootstrap ( group: eventLoop)
376
382
// Enable SO_REUSEADDR and TCP_NODELAY.
@@ -540,7 +546,7 @@ fileprivate extension Channel {
540
546
do {
541
547
let sslClientHandler = try NIOSSLClientHandler (
542
548
context: try NIOSSLContext ( configuration: configuration) ,
543
- serverHostname: serverHostname. flatMap { $0 . isIPAddress ? nil : $0 }
549
+ serverHostname: serverHostname
544
550
)
545
551
546
552
return self . pipeline. addHandlers ( sslClientHandler, TLSVerificationHandler ( ) )
@@ -578,14 +584,14 @@ extension HTTP2ToHTTP1ClientCodec.HTTPProtocol {
578
584
}
579
585
580
586
fileprivate extension String {
581
- var isIPAddress : Bool {
582
- // We need some scratch space to let inet_pton write into.
583
- var ipv4Addr = in_addr ( )
584
- var ipv6Addr = in6_addr ( )
585
-
586
- return self . withCString { ptr in
587
- return inet_pton ( AF_INET, ptr, & ipv4Addr) == 1 ||
588
- inet_pton ( AF_INET6, ptr, & ipv6Addr) == 1
589
- }
587
+ var isIPAddress : Bool {
588
+ // We need some scratch space to let inet_pton write into.
589
+ var ipv4Addr = in_addr ( )
590
+ var ipv6Addr = in6_addr ( )
591
+
592
+ return self . withCString { ptr in
593
+ return inet_pton ( AF_INET, ptr, & ipv4Addr) == 1 ||
594
+ inet_pton ( AF_INET6, ptr, & ipv6Addr) == 1
590
595
}
596
+ }
591
597
}
0 commit comments