feat: rust/rsHttp Option with_custom_dns

This commit is contained in:
2024-11-03 15:57:37 +08:00
parent 7e1e96707c
commit 0c03050f5c
7 changed files with 227 additions and 44 deletions

View File

@ -14,49 +14,73 @@ class RSHttp {
});
}
static Future<RustHttpResponse> get(String url,
{Map<String, String>? headers, String? withIpAddress}) async {
static Future<RustHttpResponse> get(
String url, {
Map<String, String>? headers,
String? withIpAddress,
bool? withCustomDns,
}) async {
final r = await rust_http.fetch(
method: MyMethod.gets,
url: url,
headers: headers,
withIpAddress: withIpAddress);
method: MyMethod.gets,
url: url,
headers: headers,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns,
);
return r;
}
static Future<String> getText(String url,
{Map<String, String>? headers, String? withIpAddress}) async {
final r = await get(url, headers: headers, withIpAddress: withIpAddress);
static Future<String> getText(
String url, {
Map<String, String>? headers,
String? withIpAddress,
bool? withCustomDns,
}) async {
final r = await get(url,
headers: headers,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns);
if (r.data == null) return "";
final str = utf8.decode(r.data!);
return str;
}
static Future<RustHttpResponse> postData(String url,
{Map<String, String>? headers,
String? contentType,
Uint8List? data,
String? withIpAddress}) async {
static Future<RustHttpResponse> postData(
String url, {
Map<String, String>? headers,
String? contentType,
Uint8List? data,
String? withIpAddress,
bool? withCustomDns,
}) async {
if (contentType != null) {
headers ??= {};
headers["Content-Type"] = contentType;
}
final r = await rust_http.fetch(
method: MyMethod.post,
url: url,
headers: headers,
inputData: data,
withIpAddress: withIpAddress);
method: MyMethod.post,
url: url,
headers: headers,
inputData: data,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns,
);
return r;
}
static Future<RustHttpResponse> head(String url,
{Map<String, String>? headers, String? withIpAddress}) async {
static Future<RustHttpResponse> head(
String url, {
Map<String, String>? headers,
String? withIpAddress,
bool? withCustomDns,
}) async {
final r = await rust_http.fetch(
method: MyMethod.head,
url: url,
headers: headers,
withIpAddress: withIpAddress);
method: MyMethod.head,
url: url,
headers: headers,
withIpAddress: withIpAddress,
withCustomDns: withCustomDns,
);
return r;
}

View File

@ -17,13 +17,15 @@ Future<RustHttpResponse> fetch(
required String url,
Map<String, String>? headers,
Uint8List? inputData,
String? withIpAddress}) =>
String? withIpAddress,
bool? withCustomDns}) =>
RustLib.instance.api.crateApiHttpApiFetch(
method: method,
url: url,
headers: headers,
inputData: inputData,
withIpAddress: withIpAddress);
withIpAddress: withIpAddress,
withCustomDns: withCustomDns);
Future<List<String>> dnsLookupTxt({required String host}) =>
RustLib.instance.api.crateApiHttpApiDnsLookupTxt(host: host);

View File

@ -96,7 +96,8 @@ abstract class RustLibApi extends BaseApi {
required String url,
Map<String, String>? headers,
Uint8List? inputData,
String? withIpAddress});
String? withIpAddress,
bool? withCustomDns});
Future<void> crateApiHttpApiSetDefaultHeader(
{required Map<String, String> headers});
@ -228,7 +229,8 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
required String url,
Map<String, String>? headers,
Uint8List? inputData,
String? withIpAddress}) {
String? withIpAddress,
bool? withCustomDns}) {
return handler.executeNormal(NormalTask(
callFfi: (port_) {
var arg0 = cst_encode_my_method(method);
@ -236,22 +238,37 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
var arg2 = cst_encode_opt_Map_String_String(headers);
var arg3 = cst_encode_opt_list_prim_u_8_strict(inputData);
var arg4 = cst_encode_opt_String(withIpAddress);
var arg5 = cst_encode_opt_box_autoadd_bool(withCustomDns);
return wire.wire__crate__api__http_api__fetch(
port_, arg0, arg1, arg2, arg3, arg4);
port_, arg0, arg1, arg2, arg3, arg4, arg5);
},
codec: DcoCodec(
decodeSuccessData: dco_decode_rust_http_response,
decodeErrorData: dco_decode_AnyhowException,
),
constMeta: kCrateApiHttpApiFetchConstMeta,
argValues: [method, url, headers, inputData, withIpAddress],
argValues: [
method,
url,
headers,
inputData,
withIpAddress,
withCustomDns
],
apiImpl: this,
));
}
TaskConstMeta get kCrateApiHttpApiFetchConstMeta => const TaskConstMeta(
debugName: "fetch",
argNames: ["method", "url", "headers", "inputData", "withIpAddress"],
argNames: [
"method",
"url",
"headers",
"inputData",
"withIpAddress",
"withCustomDns"
],
);
@override
@ -417,6 +434,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return raw as bool;
}
@protected
bool dco_decode_box_autoadd_bool(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return raw as bool;
}
@protected
RsiLauncherAsarData dco_decode_box_autoadd_rsi_launcher_asar_data(
dynamic raw) {
@ -484,6 +507,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return raw == null ? null : dco_decode_String(raw);
}
@protected
bool? dco_decode_opt_box_autoadd_bool(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
return raw == null ? null : dco_decode_box_autoadd_bool(raw);
}
@protected
BigInt? dco_decode_opt_box_autoadd_u_64(dynamic raw) {
// Codec=Dco (DartCObject based), see doc to use other codecs
@ -624,6 +653,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
return deserializer.buffer.getUint8() != 0;
}
@protected
bool sse_decode_box_autoadd_bool(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
return (sse_decode_bool(deserializer));
}
@protected
RsiLauncherAsarData sse_decode_box_autoadd_rsi_launcher_asar_data(
SseDeserializer deserializer) {
@ -719,6 +754,17 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
}
}
@protected
bool? sse_decode_opt_box_autoadd_bool(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
if (sse_decode_bool(deserializer)) {
return (sse_decode_box_autoadd_bool(deserializer));
} else {
return null;
}
}
@protected
BigInt? sse_decode_opt_box_autoadd_u_64(SseDeserializer deserializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
@ -925,6 +971,12 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
serializer.buffer.putUint8(self ? 1 : 0);
}
@protected
void sse_encode_box_autoadd_bool(bool self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_bool(self, serializer);
}
@protected
void sse_encode_box_autoadd_rsi_launcher_asar_data(
RsiLauncherAsarData self, SseSerializer serializer) {
@ -1014,6 +1066,16 @@ class RustLibApiImpl extends RustLibApiImplPlatform implements RustLibApi {
}
}
@protected
void sse_encode_opt_box_autoadd_bool(bool? self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs
sse_encode_bool(self != null, serializer);
if (self != null) {
sse_encode_box_autoadd_bool(self, serializer);
}
}
@protected
void sse_encode_opt_box_autoadd_u_64(BigInt? self, SseSerializer serializer) {
// Codec=Sse (Serialization based), see doc to use other codecs

View File

@ -38,6 +38,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
bool dco_decode_bool(dynamic raw);
@protected
bool dco_decode_box_autoadd_bool(dynamic raw);
@protected
RsiLauncherAsarData dco_decode_box_autoadd_rsi_launcher_asar_data(
dynamic raw);
@ -72,6 +75,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
String? dco_decode_opt_String(dynamic raw);
@protected
bool? dco_decode_opt_box_autoadd_bool(dynamic raw);
@protected
BigInt? dco_decode_opt_box_autoadd_u_64(dynamic raw);
@ -126,6 +132,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
bool sse_decode_bool(SseDeserializer deserializer);
@protected
bool sse_decode_box_autoadd_bool(SseDeserializer deserializer);
@protected
RsiLauncherAsarData sse_decode_box_autoadd_rsi_launcher_asar_data(
SseDeserializer deserializer);
@ -162,6 +171,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
String? sse_decode_opt_String(SseDeserializer deserializer);
@protected
bool? sse_decode_opt_box_autoadd_bool(SseDeserializer deserializer);
@protected
BigInt? sse_decode_opt_box_autoadd_u_64(SseDeserializer deserializer);
@ -235,6 +247,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
return cst_encode_list_prim_u_8_strict(utf8.encoder.convert(raw));
}
@protected
ffi.Pointer<ffi.Bool> cst_encode_box_autoadd_bool(bool raw) {
// Codec=Cst (C-struct based), see doc to use other codecs
return wire.cst_new_box_autoadd_bool(cst_encode_bool(raw));
}
@protected
ffi.Pointer<wire_cst_rsi_launcher_asar_data>
cst_encode_box_autoadd_rsi_launcher_asar_data(RsiLauncherAsarData raw) {
@ -303,6 +321,12 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
return raw == null ? ffi.nullptr : cst_encode_String(raw);
}
@protected
ffi.Pointer<ffi.Bool> cst_encode_opt_box_autoadd_bool(bool? raw) {
// Codec=Cst (C-struct based), see doc to use other codecs
return raw == null ? ffi.nullptr : cst_encode_box_autoadd_bool(raw);
}
@protected
ffi.Pointer<ffi.Uint64> cst_encode_opt_box_autoadd_u_64(BigInt? raw) {
// Codec=Cst (C-struct based), see doc to use other codecs
@ -411,6 +435,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_bool(bool self, SseSerializer serializer);
@protected
void sse_encode_box_autoadd_bool(bool self, SseSerializer serializer);
@protected
void sse_encode_box_autoadd_rsi_launcher_asar_data(
RsiLauncherAsarData self, SseSerializer serializer);
@ -448,6 +475,9 @@ abstract class RustLibApiImplPlatform extends BaseApiImpl<RustLibWire> {
@protected
void sse_encode_opt_String(String? self, SseSerializer serializer);
@protected
void sse_encode_opt_box_autoadd_bool(bool? self, SseSerializer serializer);
@protected
void sse_encode_opt_box_autoadd_u_64(BigInt? self, SseSerializer serializer);
@ -622,6 +652,7 @@ class RustLibWire implements BaseWire {
ffi.Pointer<wire_cst_list_record_string_string> headers,
ffi.Pointer<wire_cst_list_prim_u_8_strict> input_data,
ffi.Pointer<wire_cst_list_prim_u_8_strict> with_ip_address,
ffi.Pointer<ffi.Bool> with_custom_dns,
) {
return _wire__crate__api__http_api__fetch(
port_,
@ -630,6 +661,7 @@ class RustLibWire implements BaseWire {
headers,
input_data,
with_ip_address,
with_custom_dns,
);
}
@ -641,7 +673,8 @@ class RustLibWire implements BaseWire {
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<wire_cst_list_record_string_string>,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<wire_cst_list_prim_u_8_strict>)>>(
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<ffi.Bool>)>>(
'frbgen_starcitizen_doctor_wire__crate__api__http_api__fetch');
late final _wire__crate__api__http_api__fetch =
_wire__crate__api__http_api__fetchPtr.asFunction<
@ -651,7 +684,8 @@ class RustLibWire implements BaseWire {
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<wire_cst_list_record_string_string>,
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<wire_cst_list_prim_u_8_strict>)>();
ffi.Pointer<wire_cst_list_prim_u_8_strict>,
ffi.Pointer<ffi.Bool>)>();
void wire__crate__api__http_api__set_default_header(
int port_,
@ -782,6 +816,20 @@ class RustLibWire implements BaseWire {
_wire__crate__api__win32_api__set_foreground_windowPtr.asFunction<
void Function(int, ffi.Pointer<wire_cst_list_prim_u_8_strict>)>();
ffi.Pointer<ffi.Bool> cst_new_box_autoadd_bool(
bool value,
) {
return _cst_new_box_autoadd_bool(
value,
);
}
late final _cst_new_box_autoadd_boolPtr =
_lookup<ffi.NativeFunction<ffi.Pointer<ffi.Bool> Function(ffi.Bool)>>(
'frbgen_starcitizen_doctor_cst_new_box_autoadd_bool');
late final _cst_new_box_autoadd_bool = _cst_new_box_autoadd_boolPtr
.asFunction<ffi.Pointer<ffi.Bool> Function(bool)>();
ffi.Pointer<wire_cst_rsi_launcher_asar_data>
cst_new_box_autoadd_rsi_launcher_asar_data() {
return _cst_new_box_autoadd_rsi_launcher_asar_data();