populateTransportSettings method

String populateTransportSettings({
  1. required String transport,
  2. required String? headerType,
  3. required String? host,
  4. required String? path,
  5. required String? seed,
  6. required String? quicSecurity,
  7. required String? key,
  8. required String? mode,
  9. required String? serviceName,
})

Implementation

String populateTransportSettings({
  required String transport,
  required String? headerType,
  required String? host,
  required String? path,
  required String? seed,
  required String? quicSecurity,
  required String? key,
  required String? mode,
  required String? serviceName,
}) {
  String sni = '';
  streamSetting['network'] = transport;
  if (transport == 'tcp') {
    streamSetting['tcpSettings'] = {
      "header": <String, dynamic>{"type": "none", "request": null},
      "acceptProxyProtocol": null
    };
    if (headerType == 'http') {
      streamSetting['tcpSettings']['header']['type'] = 'http';
      if (host != "" || path != "") {
        streamSetting['tcpSettings']['header']['request'] = {
          "path": path == null ? ["/"] : path.split(","),
          "headers": {
            "Host": host == null ? "" : host.split(","),
            "User-Agent": [
              "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
              "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46",
            ],
            "Accept-Encoding": [
              "gzip, deflate",
            ],
            "Connection": [
              "keep-alive",
            ],
            "Pragma": "no-cache",
          },
          "version": "1.1",
          "method": "GET",
        };
        sni = streamSetting['tcpSettings']['header']['request']['headers']
                        ['Host']
                    .length >
                0
            ? streamSetting['tcpSettings']['header']['request']['headers']
                ['Host'][0]
            : sni;
      }
    } else {
      streamSetting['tcpSettings']['header']['type'] = 'none';
      sni = host != "" ? host ?? '' : '';
    }
  } else if (transport == 'kcp') {
    streamSetting['kcpSettings'] = {
      "mtu": 1350,
      "tti": 50,
      "uplinkCapacity": 12,
      "downlinkCapacity": 100,
      "congestion": false,
      "readBufferSize": 1,
      "writeBufferSize": 1,
      "header": {
        "type": headerType ?? "none",
      },
      "seed": (seed == null || seed == '') ? null : seed,
    };
  } else if (transport == 'ws') {
    streamSetting['wsSettings'] = {
      "path": path ?? ['/'],
      "headers": {"Host": host ?? ""},
      "maxEarlyData": null,
      "useBrowserForwarding": null,
      "acceptProxyProtocol": null,
    };
    sni = streamSetting['wsSettings']['headers']['Host'];
  } else if (transport == 'h2' || transport == 'http') {
    streamSetting['network'] = 'h2';
    streamSetting['h2Setting'] = {
      "host": host?.split(",") ?? "",
      "path": path ?? ['/'],
    };
    sni = streamSetting['h2Setting']['host'].length > 0
        ? streamSetting['h2Setting']['host'][0]
        : sni;
  } else if (transport == 'quic') {
    streamSetting['quicSettings'] = {
      "security": quicSecurity ?? 'none',
      "key": key ?? '',
      "header": {"type": headerType ?? "none"},
    };
  } else if (transport == 'grpc') {
    streamSetting['grpcSettings'] = {
      "serviceName": serviceName ?? "",
      "multiMode": mode == "multi",
    };
    sni = host ?? "";
  }
  return sni;
}