@@ -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,11 @@ 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
+ }
374
379
375
380
let bootstrap = PlatformSupport . makeClientBootstrap ( group: eventLoop)
376
381
// Enable SO_REUSEADDR and TCP_NODELAY.
@@ -540,7 +545,7 @@ fileprivate extension Channel {
540
545
do {
541
546
let sslClientHandler = try NIOSSLClientHandler (
542
547
context: try NIOSSLContext ( configuration: configuration) ,
543
- serverHostname: serverHostname. flatMap { $0 . isIPAddress ? nil : $0 }
548
+ serverHostname: serverHostname
544
549
)
545
550
546
551
return self . pipeline. addHandlers ( sslClientHandler, TLSVerificationHandler ( ) )
@@ -578,14 +583,14 @@ extension HTTP2ToHTTP1ClientCodec.HTTPProtocol {
578
583
}
579
584
580
585
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
- }
586
+ var isIPAddress : Bool {
587
+ // We need some scratch space to let inet_pton write into.
588
+ var ipv4Addr = in_addr ( )
589
+ var ipv6Addr = in6_addr ( )
590
+
591
+ return self . withCString { ptr in
592
+ return inet_pton ( AF_INET, ptr, & ipv4Addr) == 1 ||
593
+ inet_pton ( AF_INET6, ptr, & ipv6Addr) == 1
590
594
}
595
+ }
591
596
}
0 commit comments