populateTransportSettings method
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 ?? "";
} else if (transport == 'xhttp') {
streamSetting['network'] = 'xhttp';
streamSetting['xhttpSettings'] = {"host": host ?? "", "mode": mode ?? "auto", "path": path ?? "/"};
sni = host ?? "";
}
return sni;
}