autodetect static method

Future<HttpClient> autodetect(
  1. Uri address, {
  2. SecurityContext? securityContext,
  3. bool onBadCertificate(
    1. X509Certificate certificate
    )?,
  4. Duration? timeout,
})

Implementation

static Future<HttpClient> autodetect(
  Uri address, {
  io.SecurityContext? securityContext,
  bool Function(io.X509Certificate certificate)? onBadCertificate,
  Duration? timeout,
}) async {
  var useSSL = address.scheme == 'https';
  if (useSSL) {
    try {
      var secureSocket = await io.SecureSocket.connect(
        address.host,
        address.port,
        supportedProtocols: ['h2'],
        onBadCertificate: onBadCertificate,
        context: securityContext,
        timeout: timeout,
      );

      if (secureSocket.selectedProtocol != 'h2') {
        return _Http11Client(address, securityContext);
      }

      return _Http2Client(address, secureSocket);
    } catch (e) {
      return _Http11Client(address, securityContext);
    }
  } else {
    return _Http11Client(address, securityContext);
  }
}