mirror of
https://github.com/EasyTier/astral.git
synced 2025-05-19 10:30:24 +00:00
358 lines
8.5 KiB
Dart
358 lines
8.5 KiB
Dart
import 'package:json_annotation/json_annotation.dart';
|
|
|
|
part 'runin.g.dart';
|
|
|
|
@JsonSerializable()
|
|
class Ipv4Addr {
|
|
final int addr;
|
|
|
|
Ipv4Addr({required this.addr});
|
|
|
|
factory Ipv4Addr.fromJson(Map<String, dynamic> json) =>
|
|
_$Ipv4AddrFromJson(json);
|
|
Map<String, dynamic> toJson() => _$Ipv4AddrToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class Ipv4Inet {
|
|
@JsonKey(name: 'address')
|
|
final Ipv4Addr? address;
|
|
@JsonKey(name: 'network_length')
|
|
final int networkLength;
|
|
|
|
Ipv4Inet({this.address, required this.networkLength});
|
|
|
|
factory Ipv4Inet.fromJson(Map<String, dynamic> json) =>
|
|
_$Ipv4InetFromJson(json);
|
|
Map<String, dynamic> toJson() => _$Ipv4InetToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class StunInfo {
|
|
@JsonKey(name: 'udp_nat_type')
|
|
final int udpNatType;
|
|
@JsonKey(name: 'tcp_nat_type')
|
|
final int tcpNatType;
|
|
@JsonKey(name: 'last_update_time')
|
|
final int lastUpdateTime;
|
|
@JsonKey(name: 'public_ip')
|
|
final List<String> publicIp;
|
|
@JsonKey(name: 'min_port')
|
|
final int minPort;
|
|
@JsonKey(name: 'max_port')
|
|
final int maxPort;
|
|
|
|
StunInfo({
|
|
required this.udpNatType,
|
|
required this.tcpNatType,
|
|
required this.lastUpdateTime,
|
|
required this.publicIp,
|
|
required this.minPort,
|
|
required this.maxPort,
|
|
});
|
|
|
|
factory StunInfo.fromJson(Map<String, dynamic> json) =>
|
|
_$StunInfoFromJson(json);
|
|
Map<String, dynamic> toJson() => _$StunInfoToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class PeerFeatureFlag {
|
|
@JsonKey(name: 'is_public_server')
|
|
final bool isPublicServer;
|
|
@JsonKey(name: 'avoid_relay_data')
|
|
final bool avoidRelayData;
|
|
@JsonKey(name: 'kcp_input')
|
|
final bool kcpInput;
|
|
@JsonKey(name: 'no_relay_kcp')
|
|
final bool noRelayKcp;
|
|
|
|
PeerFeatureFlag({
|
|
required this.isPublicServer,
|
|
required this.avoidRelayData,
|
|
required this.kcpInput,
|
|
required this.noRelayKcp,
|
|
});
|
|
|
|
factory PeerFeatureFlag.fromJson(Map<String, dynamic> json) =>
|
|
_$PeerFeatureFlagFromJson(json);
|
|
Map<String, dynamic> toJson() => _$PeerFeatureFlagToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class Url {
|
|
final String url;
|
|
|
|
Url({required this.url});
|
|
|
|
factory Url.fromJson(Map<String, dynamic> json) => _$UrlFromJson(json);
|
|
Map<String, dynamic> toJson() => _$UrlToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class Route {
|
|
@JsonKey(name: 'peer_id')
|
|
final int? peerId;
|
|
@JsonKey(name: 'ipv4_addr')
|
|
final Ipv4Inet? ipv4Addr;
|
|
@JsonKey(name: 'next_hop_peer_id')
|
|
final int? nextHopPeerId;
|
|
final int? cost;
|
|
@JsonKey(name: 'path_latency')
|
|
final int? pathLatency;
|
|
@JsonKey(name: 'proxy_cidrs')
|
|
final List<String>? proxyCidrs;
|
|
final String? hostname;
|
|
@JsonKey(name: 'stun_info')
|
|
final StunInfo? stunInfo;
|
|
@JsonKey(name: 'inst_id')
|
|
final String? instId;
|
|
final String? version;
|
|
@JsonKey(name: 'feature_flag')
|
|
final PeerFeatureFlag? featureFlag;
|
|
@JsonKey(name: 'next_hop_peer_id_latency_first')
|
|
final int? nextHopPeerIdLatencyFirst;
|
|
@JsonKey(name: 'cost_latency_first')
|
|
final int? costLatencyFirst;
|
|
@JsonKey(name: 'path_latency_latency_first')
|
|
final int? pathLatencyLatencyFirst;
|
|
|
|
Route({
|
|
this.peerId,
|
|
this.ipv4Addr,
|
|
this.nextHopPeerId,
|
|
this.cost,
|
|
this.pathLatency,
|
|
this.proxyCidrs,
|
|
this.hostname,
|
|
this.stunInfo,
|
|
this.instId,
|
|
this.version,
|
|
this.featureFlag,
|
|
this.nextHopPeerIdLatencyFirst,
|
|
this.costLatencyFirst,
|
|
this.pathLatencyLatencyFirst,
|
|
});
|
|
|
|
factory Route.fromJson(Map<String, dynamic> json) => _$RouteFromJson(json);
|
|
Map<String, dynamic> toJson() => _$RouteToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class TunnelInfo {
|
|
@JsonKey(name: 'tunnel_type')
|
|
final String tunnelType;
|
|
@JsonKey(name: 'local_addr')
|
|
final Url? localAddr;
|
|
@JsonKey(name: 'remote_addr')
|
|
final Url? remoteAddr;
|
|
|
|
TunnelInfo({
|
|
required this.tunnelType,
|
|
this.localAddr,
|
|
this.remoteAddr,
|
|
});
|
|
|
|
factory TunnelInfo.fromJson(Map<String, dynamic> json) =>
|
|
_$TunnelInfoFromJson(json);
|
|
Map<String, dynamic> toJson() => _$TunnelInfoToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class PeerConnStats {
|
|
@JsonKey(name: 'rx_bytes')
|
|
final int rxBytes;
|
|
@JsonKey(name: 'tx_bytes')
|
|
final int txBytes;
|
|
@JsonKey(name: 'rx_packets')
|
|
final int rxPackets;
|
|
@JsonKey(name: 'tx_packets')
|
|
final int txPackets;
|
|
@JsonKey(name: 'latency_us')
|
|
final int latencyUs;
|
|
|
|
PeerConnStats({
|
|
required this.rxBytes,
|
|
required this.txBytes,
|
|
required this.rxPackets,
|
|
required this.txPackets,
|
|
required this.latencyUs,
|
|
});
|
|
|
|
factory PeerConnStats.fromJson(Map<String, dynamic> json) =>
|
|
_$PeerConnStatsFromJson(json);
|
|
Map<String, dynamic> toJson() => _$PeerConnStatsToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class PeerConnInfo {
|
|
@JsonKey(name: 'conn_id')
|
|
final String connId;
|
|
@JsonKey(name: 'my_peer_id')
|
|
final int myPeerId;
|
|
@JsonKey(name: 'peer_id')
|
|
final int peerId;
|
|
final List<String> features;
|
|
final TunnelInfo? tunnel;
|
|
final PeerConnStats? stats;
|
|
@JsonKey(name: 'loss_rate')
|
|
final double lossRate;
|
|
@JsonKey(name: 'is_client')
|
|
final bool isClient;
|
|
@JsonKey(name: 'network_name')
|
|
final String networkName;
|
|
|
|
PeerConnInfo({
|
|
required this.connId,
|
|
required this.myPeerId,
|
|
required this.peerId,
|
|
required this.features,
|
|
this.tunnel,
|
|
this.stats,
|
|
required this.lossRate,
|
|
required this.isClient,
|
|
required this.networkName,
|
|
});
|
|
|
|
factory PeerConnInfo.fromJson(Map<String, dynamic> json) =>
|
|
_$PeerConnInfoFromJson(json);
|
|
Map<String, dynamic> toJson() => _$PeerConnInfoToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class PeerInfo {
|
|
@JsonKey(name: 'peer_id')
|
|
final int peerId;
|
|
final List<PeerConnInfo> conns;
|
|
|
|
PeerInfo({
|
|
required this.peerId,
|
|
required this.conns,
|
|
});
|
|
|
|
factory PeerInfo.fromJson(Map<String, dynamic> json) =>
|
|
_$PeerInfoFromJson(json);
|
|
Map<String, dynamic> toJson() => _$PeerInfoToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class PeerRoutePair {
|
|
final Route? route;
|
|
final PeerInfo? peer;
|
|
|
|
PeerRoutePair({
|
|
this.route,
|
|
this.peer,
|
|
});
|
|
|
|
factory PeerRoutePair.fromJson(Map<String, dynamic> json) =>
|
|
_$PeerRoutePairFromJson(json);
|
|
Map<String, dynamic> toJson() => _$PeerRoutePairToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class Ipv6Addr {
|
|
@JsonKey(name: 'part1')
|
|
final int part1;
|
|
@JsonKey(name: 'part2')
|
|
final int part2;
|
|
@JsonKey(name: 'part3')
|
|
final int part3;
|
|
@JsonKey(name: 'part4')
|
|
final int part4;
|
|
|
|
Ipv6Addr({
|
|
required this.part1,
|
|
required this.part2,
|
|
required this.part3,
|
|
required this.part4,
|
|
});
|
|
|
|
factory Ipv6Addr.fromJson(Map<String, dynamic> json) =>
|
|
_$Ipv6AddrFromJson(json);
|
|
Map<String, dynamic> toJson() => _$Ipv6AddrToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class GetIpListResponse {
|
|
@JsonKey(name: 'public_ipv4')
|
|
final Ipv4Addr? publicIpv4;
|
|
@JsonKey(name: 'interface_ipv4s')
|
|
final List<Ipv4Addr> interfaceIpv4s;
|
|
@JsonKey(name: 'public_ipv6')
|
|
final Ipv6Addr? publicIpv6;
|
|
@JsonKey(name: 'interface_ipv6s')
|
|
final List<Ipv6Addr> interfaceIpv6s;
|
|
final List<Url> listeners;
|
|
|
|
GetIpListResponse({
|
|
this.publicIpv4,
|
|
required this.interfaceIpv4s,
|
|
this.publicIpv6,
|
|
required this.interfaceIpv6s,
|
|
required this.listeners,
|
|
});
|
|
|
|
factory GetIpListResponse.fromJson(Map<String, dynamic> json) =>
|
|
_$GetIpListResponseFromJson(json);
|
|
Map<String, dynamic> toJson() => _$GetIpListResponseToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class MyNodeInfo {
|
|
@JsonKey(name: 'virtual_ipv4')
|
|
final Ipv4Inet? virtualIpv4;
|
|
final String hostname;
|
|
final String version;
|
|
final GetIpListResponse? ips;
|
|
@JsonKey(name: 'stun_info')
|
|
final StunInfo? stunInfo;
|
|
final List<Url> listeners;
|
|
@JsonKey(name: 'vpn_portal_cfg')
|
|
final String? vpnPortalCfg;
|
|
|
|
MyNodeInfo({
|
|
this.virtualIpv4,
|
|
required this.hostname,
|
|
required this.version,
|
|
this.ips,
|
|
this.stunInfo,
|
|
required this.listeners,
|
|
this.vpnPortalCfg,
|
|
});
|
|
|
|
factory MyNodeInfo.fromJson(Map<String, dynamic> json) =>
|
|
_$MyNodeInfoFromJson(json);
|
|
Map<String, dynamic> toJson() => _$MyNodeInfoToJson(this);
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class Runin {
|
|
@JsonKey(name: 'dev_name')
|
|
final String? devName;
|
|
@JsonKey(name: 'my_node_info')
|
|
final MyNodeInfo? myNodeInfo;
|
|
final List<String> events;
|
|
final List<Route> routes;
|
|
final List<PeerInfo>? peers;
|
|
@JsonKey(name: 'peer_route_pairs')
|
|
final List<PeerRoutePair>? peerRoutePairs;
|
|
final bool running;
|
|
@JsonKey(name: 'error_msg')
|
|
final String? errorMsg;
|
|
|
|
Runin({
|
|
this.devName,
|
|
this.myNodeInfo,
|
|
required this.events,
|
|
required this.routes,
|
|
this.peers,
|
|
this.peerRoutePairs,
|
|
required this.running,
|
|
this.errorMsg,
|
|
});
|
|
|
|
factory Runin.fromJson(Map<String, dynamic> json) => _$RuninFromJson(json);
|
|
Map<String, dynamic> toJson() => _$RuninToJson(this);
|
|
}
|