ShadowSocksURL constructor

ShadowSocksURL({
  1. required String url,
})

Implementation

ShadowSocksURL({required super.url}) {
  if (!url.startsWith('ss://')) {
    throw ArgumentError('url is invalid');
  }
  final temp = Uri.tryParse(url);
  if (temp == null) {
    throw ArgumentError('url is invalid');
  }
  uri = temp;
  _address = uri.host;
  _port = uri.hasPort ? uri.port : null;

  if (uri.userInfo.isNotEmpty) {
    _parseMethodPassword(_decodeUserInfo(uri.userInfo));
  } else {
    _parseLegacyFullBase64();
  }

  if (uri.queryParameters.isNotEmpty) {
    var sni = super.populateTransportSettings(
      transport: uri.queryParameters['type'] ?? "tcp",
      headerType: uri.queryParameters['headerType'],
      host: uri.queryParameters["host"],
      path: uri.queryParameters["path"],
      seed: uri.queryParameters["seed"],
      quicSecurity: uri.queryParameters["quicSecurity"],
      key: uri.queryParameters["key"],
      mode: uri.queryParameters["mode"],
      serviceName: uri.queryParameters["serviceName"],
      extra: uri.queryParameters["extra"],
    );
    super.populateTlsSettings(
      streamSecurity: uri.queryParameters['security'] ?? '',
      allowInsecure: allowInsecure,
      sni: uri.queryParameters["sni"] ?? sni,
      fingerprint: streamSettingsBuilder.tlsFingerprint,
      alpns: uri.queryParameters['alpn'],
      publicKey: null,
      shortId: null,
      spiderX: null,
    );
  }
}