Update On Wed Oct 29 19:43:11 CET 2025

This commit is contained in:
github-action[bot]
2025-10-29 19:43:12 +01:00
parent d6c0cc343d
commit 74fefeb01a
31 changed files with 664 additions and 541 deletions

1
.github/update.log vendored
View File

@@ -1165,3 +1165,4 @@ Update On Sat Oct 25 20:37:45 CEST 2025
Update On Sun Oct 26 19:35:56 CET 2025
Update On Mon Oct 27 19:43:18 CET 2025
Update On Tue Oct 28 19:41:08 CET 2025
Update On Wed Oct 29 19:43:03 CET 2025

View File

@@ -2018,11 +2018,11 @@ dependencies = [
[[package]]
name = "ctrlc"
version = "3.5.0"
version = "3.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3"
checksum = "73736a89c4aff73035ba2ed2e565061954da00d4970fc9ac25dcc85a2a20d790"
dependencies = [
"dispatch",
"dispatch2",
"nix 0.30.1",
"windows-sys 0.61.2",
]

View File

@@ -59,9 +59,9 @@
"@iconify/json": "2.2.401",
"@monaco-editor/react": "4.7.0",
"@tanstack/react-query": "5.90.5",
"@tanstack/react-router": "1.133.32",
"@tanstack/react-router-devtools": "1.133.34",
"@tanstack/router-plugin": "1.133.32",
"@tanstack/react-router": "1.133.36",
"@tanstack/react-router-devtools": "1.133.36",
"@tanstack/router-plugin": "1.133.36",
"@tauri-apps/plugin-clipboard-manager": "2.3.0",
"@tauri-apps/plugin-dialog": "2.4.0",
"@tauri-apps/plugin-fs": "2.4.2",

View File

@@ -2,7 +2,7 @@
"manifest_version": 1,
"latest": {
"mihomo": "v1.19.15",
"mihomo_alpha": "alpha-ff62386",
"mihomo_alpha": "alpha-6bffbdd",
"clash_rs": "v0.9.1",
"clash_premium": "2023-09-05-gdcc8d87",
"clash_rs_alpha": "0.9.1-alpha+sha.643fb1b"
@@ -69,5 +69,5 @@
"linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf"
}
},
"updated_at": "2025-10-27T22:20:58.070Z"
"updated_at": "2025-10-28T22:21:24.305Z"
}

View File

@@ -85,7 +85,7 @@
"eslint-plugin-react-compiler": "19.1.0-rc.2",
"eslint-plugin-react-hooks": "7.0.1",
"globals": "16.4.0",
"knip": "5.66.3",
"knip": "5.66.4",
"lint-staged": "16.2.6",
"neostandard": "0.12.2",
"npm-run-all2": "8.0.4",
@@ -112,7 +112,7 @@
},
"packageManager": "pnpm@10.18.3",
"engines": {
"node": "22.20.0"
"node": "22.21.1"
},
"pnpm": {
"overrides": {

View File

@@ -104,8 +104,8 @@ importers:
specifier: 16.4.0
version: 16.4.0
knip:
specifier: 5.66.3
version: 5.66.3(@types/node@24.8.1)(typescript@5.9.3)
specifier: 5.66.4
version: 5.66.4(@types/node@24.8.1)(typescript@5.9.3)
lint-staged:
specifier: 16.2.6
version: 16.2.6
@@ -253,7 +253,7 @@ importers:
version: 4.1.16
'@tanstack/router-zod-adapter':
specifier: 1.81.5
version: 1.81.5(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)
version: 1.81.5(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)
'@tauri-apps/api':
specifier: 2.8.0
version: 2.8.0
@@ -355,14 +355,14 @@ importers:
specifier: 5.90.5
version: 5.90.5(react@19.2.0)
'@tanstack/react-router':
specifier: 1.133.32
version: 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
specifier: 1.133.36
version: 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tanstack/react-router-devtools':
specifier: 1.133.34
version: 1.133.34(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
specifier: 1.133.36
version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
'@tanstack/router-plugin':
specifier: 1.133.32
version: 1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))
specifier: 1.133.36
version: 1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))
'@tauri-apps/plugin-clipboard-manager':
specifier: 2.3.0
version: 2.3.0
@@ -2103,8 +2103,8 @@ packages:
'@napi-rs/wasm-runtime@0.2.11':
resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==}
'@napi-rs/wasm-runtime@1.0.5':
resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==}
'@napi-rs/wasm-runtime@1.0.7':
resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -2375,98 +2375,98 @@ packages:
'@oxc-project/types@0.74.0':
resolution: {integrity: sha512-KOw/RZrVlHGhCXh1RufBFF7Nuo7HdY5w1lRJukM/igIl6x9qtz8QycDvZdzb4qnHO7znrPyo2sJrFJK2eKHgfQ==}
'@oxc-resolver/binding-android-arm-eabi@11.8.3':
resolution: {integrity: sha512-er6onTUX8NMF5kBNGHCF8S6vxWVJS5BKO6SmLRW5nfZgHDHWsESH1YgyKpO6n6HBd/x58+7r9/1fxF3N8z911A==}
'@oxc-resolver/binding-android-arm-eabi@11.12.0':
resolution: {integrity: sha512-/IfGWLNdmS1kVYM2g+Xw4qXNWtCPZ/i5YMprflA8FC3vAjT4N0VucQcDxUPHxatQwre4qnhbFFWqRa1mz6Cgkw==}
cpu: [arm]
os: [android]
'@oxc-resolver/binding-android-arm64@11.8.3':
resolution: {integrity: sha512-VJMGaFYTu5YoZ0kpRhQQQoqNsYuAbPEHb/b/gEqpNpl/zHtvLWha8fYqTGtH7Wu9ajA2ESdWVqOzbBRMjQ/5qA==}
'@oxc-resolver/binding-android-arm64@11.12.0':
resolution: {integrity: sha512-H3Ehyinfx2VO8F5TwdaD/WY686Ia6J1H3LP0tgpNjlPGH2TrTniPERiwjqtOm/xHEef0KJvb/yfmUKLbHudhCA==}
cpu: [arm64]
os: [android]
'@oxc-resolver/binding-darwin-arm64@11.8.3':
resolution: {integrity: sha512-IipM4uDZNZ4GEvmq0g5iRS4Di3YoEhf/BdkvqIFq35rZA9EvYn/csxAJb05H7HDzbLENIUfMvP18eyHt3juU+A==}
'@oxc-resolver/binding-darwin-arm64@11.12.0':
resolution: {integrity: sha512-hmm+A/0WdEtIeBrPtUHoSTzJefrZkhGSrmv5pwELKiqNqd+/gctzmTlt6wWrU8BMIryDMT9fWqLSQ3+NYfqAEA==}
cpu: [arm64]
os: [darwin]
'@oxc-resolver/binding-darwin-x64@11.8.3':
resolution: {integrity: sha512-gJQnRKe60CNyx+KE7ffKouG15hIoV0mnM3fGGbXRUXW7hVYv2WIiKAJeNn/o/EQhT5i1GrfvskVZCHTwHljuxQ==}
'@oxc-resolver/binding-darwin-x64@11.12.0':
resolution: {integrity: sha512-g1tVu53EMfuRKs67o0PZR0+y/WXl/Tfn3d2ggjK3Hj17pQPcb9x1+Y6W7n4EjIDttwLZbCPCEr06X+aC03I45A==}
cpu: [x64]
os: [darwin]
'@oxc-resolver/binding-freebsd-x64@11.8.3':
resolution: {integrity: sha512-UphzSWPIHKuVt6zDoNBzj03SfQIk73cBjfzQXK33asriLMv9kPrt2k5Aaea/ZB2bphv5MAf1BxyacYgT0hjBuA==}
'@oxc-resolver/binding-freebsd-x64@11.12.0':
resolution: {integrity: sha512-TiMatzvcVMSOiAx8sbnAw7UCfQpZDlm91ItywZrSHlQIJqDBipOmjIEYUMc2p823Y+fJ2ADL5UBjUB2kfqpedw==}
cpu: [x64]
os: [freebsd]
'@oxc-resolver/binding-linux-arm-gnueabihf@11.8.3':
resolution: {integrity: sha512-kjVGH0BIJTCefpNWcD9PrHYzXLMeofHzHqykgPc+OIBdv7KKjtE2FPeQ6PAJFzsB1BbwK0AOtKppajwfpyt1jw==}
'@oxc-resolver/binding-linux-arm-gnueabihf@11.12.0':
resolution: {integrity: sha512-zU+9UgxPIvfReqmRr/dqZt3387HPgcH0hA4u0QGE+280EFjBYYL2rxGDxK0L+keO6vc2+ITWVDXm9KIj+alofg==}
cpu: [arm]
os: [linux]
'@oxc-resolver/binding-linux-arm-musleabihf@11.8.3':
resolution: {integrity: sha512-e+BDNYfkOKQSSF8KMrD7FwbBzbN+9mn14pCJk5pLLH9Mtxv5EHB6LrVqLS4nbQt3ZxLwG6WWWlMPv1sdQhxNNQ==}
'@oxc-resolver/binding-linux-arm-musleabihf@11.12.0':
resolution: {integrity: sha512-dfO1rrOeELYWD/BewMCp81k1I3pOdtAi2VCKg/A1I8z0uI4OR6cThb5dV9fpHkj7zlb0Y5iZFPe+NTbI/u1MgQ==}
cpu: [arm]
os: [linux]
'@oxc-resolver/binding-linux-arm64-gnu@11.8.3':
resolution: {integrity: sha512-LD97VZB8KxJGEDSh4bzNExBK32nOAIPnmaKUU1bl6L3nd8YnhwK/l7RZPRsz//At/+0MGjf0Pg/fxYdW7OARjQ==}
'@oxc-resolver/binding-linux-arm64-gnu@11.12.0':
resolution: {integrity: sha512-JJNyN1ueryETKTUsG57+u0GDbtHKVcwcUoC6YyJmDdWE0o/3twXtHuS+F/121a2sVK8PKlROqGAev+STx3AuuQ==}
cpu: [arm64]
os: [linux]
'@oxc-resolver/binding-linux-arm64-musl@11.8.3':
resolution: {integrity: sha512-K9AUdi2Fd8RL4j5j2pACUcHbOawamt7nVn7yRI5+eOEfyn7bBsFvCVdKN4aKBLQxdAOFURK+uRWrVfR2xUkjww==}
'@oxc-resolver/binding-linux-arm64-musl@11.12.0':
resolution: {integrity: sha512-rQHoxL0H0WwYUuukPUscLyzWwTl/hyogptYsY+Ye6AggJEOuvgJxMum2glY7etGIGOXxrfjareHnNO1tNY7WYg==}
cpu: [arm64]
os: [linux]
'@oxc-resolver/binding-linux-ppc64-gnu@11.8.3':
resolution: {integrity: sha512-Ur5+jodHcL1lHlt7zye5K709qX4hagOdKequxrQYLaOC9zFJtpu+967PYw6bmedtnQERhyaGSfPzZ8u/TUgqWw==}
'@oxc-resolver/binding-linux-ppc64-gnu@11.12.0':
resolution: {integrity: sha512-XPUZSctO+FrC0314Tcth+GrTtzy2yaYqyl8weBMAbKFMwuV8VnR2SHg9dmtI9vkukmM3auOLj0Kqjpl3YXwXiw==}
cpu: [ppc64]
os: [linux]
'@oxc-resolver/binding-linux-riscv64-gnu@11.8.3':
resolution: {integrity: sha512-RgJHdrTTONup/55Y/eqyrIw2R3hG/1vBMI7+WGLjiF5zxJmVO8tLYcQklV92MKDxrLL7O36GZTZ6mPk57TVf9w==}
'@oxc-resolver/binding-linux-riscv64-gnu@11.12.0':
resolution: {integrity: sha512-AmMjcP+6zHLF1JNq/p3yPEcXmZW/Xw5Xl19Zd0eBCSyGORJRuUOkcnyC8bwMO43b/G7PtausB83fclnFL5KZ3w==}
cpu: [riscv64]
os: [linux]
'@oxc-resolver/binding-linux-riscv64-musl@11.8.3':
resolution: {integrity: sha512-zni4rfmy+JoR1ubY2puIgwR+3ATpmsIsZR8dzskKRuy+i4ghwo6uOQn3wXcMBiuY4yJ0XsOZBZe1OoAl1/rELw==}
'@oxc-resolver/binding-linux-riscv64-musl@11.12.0':
resolution: {integrity: sha512-K2/yFBqFQOKyVwQxYDAKqDtk2kS4g58aGyj/R1bvYPr2P7v7971aUG/5m2WD5u2zSqWBfu1o4PdhX0lsqvA3vQ==}
cpu: [riscv64]
os: [linux]
'@oxc-resolver/binding-linux-s390x-gnu@11.8.3':
resolution: {integrity: sha512-7u96LbjV6cGcvfGopwDHiuhrasE+0YZPshZFDyEO4QGm8rc+R9XgSsvUUCspRTuwc/J70u7c0cxONm6TYECkyA==}
'@oxc-resolver/binding-linux-s390x-gnu@11.12.0':
resolution: {integrity: sha512-uSl4jo78tONGZtwsOA4ldT/OI7/hoHJhSMlGYE4Z/lzwMjkAaBdX4soAK5P/rL+U2yCJlRMnnoUckhXlZvDbSw==}
cpu: [s390x]
os: [linux]
'@oxc-resolver/binding-linux-x64-gnu@11.8.3':
resolution: {integrity: sha512-zgOg25vdttzLz1uCP/5hyMlLgczPSct8lBI8oBhh+oTjEmDTJdqWnjXgk/ugrQGw66j8Ud9eAZL+IWkHaaLSxA==}
'@oxc-resolver/binding-linux-x64-gnu@11.12.0':
resolution: {integrity: sha512-YjL8VAkbPyQ1kUuR6pOBk1O+EkxOoLROTa+ia1/AmFLuXYNltLGI1YxOY14i80cKpOf0Z59IXnlrY3coAI9NDQ==}
cpu: [x64]
os: [linux]
'@oxc-resolver/binding-linux-x64-musl@11.8.3':
resolution: {integrity: sha512-xac1SimfZ8grHyn3V3RTptDhQ8sSVdF0j1CsGGpG6ODyku+LcNvhwy6fjxuaT3Z+Zgsi1wchXQNDA62YkDUvZQ==}
'@oxc-resolver/binding-linux-x64-musl@11.12.0':
resolution: {integrity: sha512-qpHPU0qqeJXh7cPzA+I+WWA6RxtRArfmSrhTXidbiQ08G5A1e55YQwExWkitB2rSqN6YFxnpfhHKo9hyhpyfSg==}
cpu: [x64]
os: [linux]
'@oxc-resolver/binding-wasm32-wasi@11.8.3':
resolution: {integrity: sha512-zt2+ohZbPg0M9cADMLnImVRXXBJVd5tlOqzH9z4wdFTA1mHojIeSrHaW8c30ZzopbFIER0GTyY+YxAsf0bhIeQ==}
'@oxc-resolver/binding-wasm32-wasi@11.12.0':
resolution: {integrity: sha512-oqg80bERZAagWLqYmngnesE0/2miv4lST7+wiiZniD6gyb1SoRckwEkbTsytGutkudFtw7O61Pon6pNlOvyFaA==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
'@oxc-resolver/binding-win32-arm64-msvc@11.8.3':
resolution: {integrity: sha512-je6MDeDP9PI4TGG3mcQ1ELzA4Y1O7+Dwxnc4sCxm6MkAiCi6G5UMSKsXp1f/UlcTdQn3hOJOv7d1KK8MbvRpPw==}
'@oxc-resolver/binding-win32-arm64-msvc@11.12.0':
resolution: {integrity: sha512-qKH816ycEN9yR/TX91CP1/i6xyVNHKX9VEOYa3XzQROPVtcYG2F6A3ng/PhwpJvS1cmL/DlilhglZe9KWkhNjg==}
cpu: [arm64]
os: [win32]
'@oxc-resolver/binding-win32-ia32-msvc@11.8.3':
resolution: {integrity: sha512-9GtBrZgJw3+dP0x/FHh/viiaQ+kgnVJr5jLG0ZDEci9vFOdc/XJkNXYs84mBlZcWK1HCj80VDBqqNGm4zYYIXA==}
'@oxc-resolver/binding-win32-ia32-msvc@11.12.0':
resolution: {integrity: sha512-3bgxubTlhzF6BwBnhGz5BTboarl1upuanEr6i0dncjfEcU+Z9xAOgbtA7Ip3G3EKDjE1objRKK+ny8PKJZ3b7Q==}
cpu: [ia32]
os: [win32]
'@oxc-resolver/binding-win32-x64-msvc@11.8.3':
resolution: {integrity: sha512-MoathdI2zWifsGPsgnZjYplEm2NJ4pZxu8eSCYCe+8TToDRpQ+D8BTcr8Fox2AyNEQdT57l/0LzID4812+3f/A==}
'@oxc-resolver/binding-win32-x64-msvc@11.12.0':
resolution: {integrity: sha512-rbiWYQWxwy+x7+KgNAoAGYIPB3xUclQlFVV3L5lwfsbp4PQPomJohHowlWgi3GRAEybM5+ZL9xny0YfpJOsthA==}
cpu: [x64]
os: [win32]
@@ -3104,23 +3104,23 @@ packages:
peerDependencies:
react: ^18 || ^19
'@tanstack/react-router-devtools@1.133.34':
resolution: {integrity: sha512-4Vlx2uHdCINLM47xtNR37B0yLGpoN4sOz0aQWmXfP6o3nj8MYvOjYEZIwA+JZ643PckgAstpLfGZmkh/eWgE/Q==}
'@tanstack/react-router-devtools@1.133.36':
resolution: {integrity: sha512-il+DNzc8Ia54N+HOmIlY10NBk7rp0N7Nyysk8eeC1ZSIXImC3MPchdAspwioE6DI7WfK+MfpTav2m9zoOL8wSQ==}
engines: {node: '>=12'}
peerDependencies:
'@tanstack/react-router': ^1.133.32
'@tanstack/react-router': ^1.133.36
react: '>=18.0.0 || >=19.0.0'
react-dom: '>=18.0.0 || >=19.0.0'
'@tanstack/react-router@1.133.32':
resolution: {integrity: sha512-UqakhaFJ+r5S+b4/AvLux70Hk+1MpmwfKwbdV7vuM2bVRUSztM8xtcttVpzZwRV45Ls8YsStY58prEVdCpvkNg==}
'@tanstack/react-router@1.133.36':
resolution: {integrity: sha512-pT4d2uEucDQ3SAIQ0pLUw6RUKwkB5pHzpBB6otaoKpO0cAwHkRPi+p59DivuzSANJLHLVEiXyJCCk72EeHMRxA==}
engines: {node: '>=12'}
peerDependencies:
react: '>=18.0.0 || >=19.0.0'
react-dom: '>=18.0.0 || >=19.0.0'
'@tanstack/react-store@0.7.0':
resolution: {integrity: sha512-S/Rq17HaGOk+tQHV/yrePMnG1xbsKZIl/VsNWnNXt4XW+tTY8dTlvpJH2ZQ3GRALsusG5K6Q3unAGJ2pd9W/Ng==}
'@tanstack/react-store@0.8.0':
resolution: {integrity: sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -3138,15 +3138,15 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
'@tanstack/router-core@1.133.28':
resolution: {integrity: sha512-HErb1X9F+u4VzguJKafX1p5fSnNnfo7aK8Xxh5cICFMShPBxt9i1K45nUbQaRkf45N1tg4gJ3l8mlmwWRm9WWA==}
'@tanstack/router-core@1.133.36':
resolution: {integrity: sha512-VJ9kFduePsxgjhDW+uKxL6ol9ZpJlaUO2EI9Zmq8AA6uhW/LRg+0/365OZOZaVqNqvx2eKt3MZKHLN+29jd5Uw==}
engines: {node: '>=12'}
'@tanstack/router-devtools-core@1.133.34':
resolution: {integrity: sha512-NYjrYV/Gt8GlD72uIZakv9a2Z2O31n4J/7uOCU0K9pzSMNa0rmYSYHeaB9vzI9Ksv944mvvmOpDnGUpUhwNXAw==}
'@tanstack/router-devtools-core@1.133.36':
resolution: {integrity: sha512-jgXSCfWPLukcjXDf4thpk/0QgLXv61mrvmfh9xc8+xeC5TMeLyz2xBaTghniD2PtdF6eII3vMaTWOpMHj4+cVQ==}
engines: {node: '>=12'}
peerDependencies:
'@tanstack/router-core': ^1.133.28
'@tanstack/router-core': ^1.133.36
csstype: ^3.0.10
solid-js: '>=1.9.5'
tiny-invariant: ^1.3.3
@@ -3154,16 +3154,16 @@ packages:
csstype:
optional: true
'@tanstack/router-generator@1.133.29':
resolution: {integrity: sha512-Nngp1i7ch22qqLkjsQwoyos8mawL5bG2GjHg8IMOzFbMR+dVQfh9gSkpkhUbLMv8TMb8Na31tyR0/tDr+E/NCA==}
'@tanstack/router-generator@1.133.36':
resolution: {integrity: sha512-3+pJBqkm95/zV7INyhbr688lp1PklZT3wtNNwW9oIxmsBiUJg5hqHWh7z4JgP9E+0D0KAwT535wncWUFfMMZwA==}
engines: {node: '>=12'}
'@tanstack/router-plugin@1.133.32':
resolution: {integrity: sha512-4YtRrGs5nq/sZmwwT/jmS1LiucEevsWjxzTEilHRBtjeMgFbrhnQ7jBHHRPym71C40W/9tEgzcQS3dGq5LC5+g==}
'@tanstack/router-plugin@1.133.36':
resolution: {integrity: sha512-y0vttpDRFbniPk2EOS93wxfNA0SqvD/anj6kXTIl/3caW0rvOC4MzMXV09atJ+3jMSOgHFniljKQj/66AY5dZg==}
engines: {node: '>=12'}
peerDependencies:
'@rsbuild/core': '>=1.0.2'
'@tanstack/react-router': ^1.133.32
'@tanstack/react-router': ^1.133.36
vite: '>=5.0.0 || >=6.0.0 || >=7.0.0'
vite-plugin-solid: ^2.11.10
webpack: '>=5.92.0'
@@ -3190,8 +3190,8 @@ packages:
'@tanstack/react-router': '>=1.43.2'
zod: '>=3'
'@tanstack/store@0.7.0':
resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==}
'@tanstack/store@0.8.0':
resolution: {integrity: sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==}
'@tanstack/table-core@8.21.3':
resolution: {integrity: sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
@@ -6036,10 +6036,6 @@ packages:
javascript-natural-sort@0.7.1:
resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
jiti@2.6.0:
resolution: {integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==}
hasBin: true
jiti@2.6.1:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
@@ -6161,8 +6157,8 @@ packages:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
knip@5.66.3:
resolution: {integrity: sha512-BEe9ZCI8fm4TJzehnrCt+L/Faqu6qfMH6VrwSfck+lCGotQzf0jh5dVXysPWjWqMpdUSr6+MpMu9JW/G6wiAcQ==}
knip@5.66.4:
resolution: {integrity: sha512-HmTnxdmoHAvwKmFktRGY1++tXRI8J36eVrOpfj/ybTVVT1QBKBlbBEN1s3cJBx9UL+hXTZDNQif+gs7fUKldbw==}
engines: {node: '>=18.18.0'}
hasBin: true
peerDependencies:
@@ -6810,8 +6806,8 @@ packages:
resolution: {integrity: sha512-2tDN/ttU8WE6oFh8EzKNam7KE7ZXSG5uXmvX85iNzxdJfMssDWcj3gpYzZi1E04XuE7m3v1dVWl/8BE886vPGw==}
engines: {node: '>=20.0.0'}
oxc-resolver@11.8.3:
resolution: {integrity: sha512-wPY3eiw24QOiNqArh5FWRrKYr1Yuxya8bE8CV7yBfz7jodCrg0HqBu6cvHHSicxFug7D4TN6ox1hysA9arHTqw==}
oxc-resolver@11.12.0:
resolution: {integrity: sha512-zmS2q2txiB+hS2u0aiIwmvITIJN8c8ThlWoWB762Wx5nUw8WBlttp0rzt8nnuP1cGIq9YJ7sGxfsgokm+SQk5Q==}
p-cancelable@2.1.1:
resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
@@ -10577,7 +10573,7 @@ snapshots:
'@tybys/wasm-util': 0.9.0
optional: true
'@napi-rs/wasm-runtime@1.0.5':
'@napi-rs/wasm-runtime@1.0.7':
dependencies:
'@emnapi/core': 1.5.0
'@emnapi/runtime': 1.5.0
@@ -10858,63 +10854,63 @@ snapshots:
'@oxc-project/types@0.74.0': {}
'@oxc-resolver/binding-android-arm-eabi@11.8.3':
'@oxc-resolver/binding-android-arm-eabi@11.12.0':
optional: true
'@oxc-resolver/binding-android-arm64@11.8.3':
'@oxc-resolver/binding-android-arm64@11.12.0':
optional: true
'@oxc-resolver/binding-darwin-arm64@11.8.3':
'@oxc-resolver/binding-darwin-arm64@11.12.0':
optional: true
'@oxc-resolver/binding-darwin-x64@11.8.3':
'@oxc-resolver/binding-darwin-x64@11.12.0':
optional: true
'@oxc-resolver/binding-freebsd-x64@11.8.3':
'@oxc-resolver/binding-freebsd-x64@11.12.0':
optional: true
'@oxc-resolver/binding-linux-arm-gnueabihf@11.8.3':
'@oxc-resolver/binding-linux-arm-gnueabihf@11.12.0':
optional: true
'@oxc-resolver/binding-linux-arm-musleabihf@11.8.3':
'@oxc-resolver/binding-linux-arm-musleabihf@11.12.0':
optional: true
'@oxc-resolver/binding-linux-arm64-gnu@11.8.3':
'@oxc-resolver/binding-linux-arm64-gnu@11.12.0':
optional: true
'@oxc-resolver/binding-linux-arm64-musl@11.8.3':
'@oxc-resolver/binding-linux-arm64-musl@11.12.0':
optional: true
'@oxc-resolver/binding-linux-ppc64-gnu@11.8.3':
'@oxc-resolver/binding-linux-ppc64-gnu@11.12.0':
optional: true
'@oxc-resolver/binding-linux-riscv64-gnu@11.8.3':
'@oxc-resolver/binding-linux-riscv64-gnu@11.12.0':
optional: true
'@oxc-resolver/binding-linux-riscv64-musl@11.8.3':
'@oxc-resolver/binding-linux-riscv64-musl@11.12.0':
optional: true
'@oxc-resolver/binding-linux-s390x-gnu@11.8.3':
'@oxc-resolver/binding-linux-s390x-gnu@11.12.0':
optional: true
'@oxc-resolver/binding-linux-x64-gnu@11.8.3':
'@oxc-resolver/binding-linux-x64-gnu@11.12.0':
optional: true
'@oxc-resolver/binding-linux-x64-musl@11.8.3':
'@oxc-resolver/binding-linux-x64-musl@11.12.0':
optional: true
'@oxc-resolver/binding-wasm32-wasi@11.8.3':
'@oxc-resolver/binding-wasm32-wasi@11.12.0':
dependencies:
'@napi-rs/wasm-runtime': 1.0.5
'@napi-rs/wasm-runtime': 1.0.7
optional: true
'@oxc-resolver/binding-win32-arm64-msvc@11.8.3':
'@oxc-resolver/binding-win32-arm64-msvc@11.12.0':
optional: true
'@oxc-resolver/binding-win32-ia32-msvc@11.8.3':
'@oxc-resolver/binding-win32-ia32-msvc@11.12.0':
optional: true
'@oxc-resolver/binding-win32-x64-msvc@11.8.3':
'@oxc-resolver/binding-win32-x64-msvc@11.12.0':
optional: true
'@parcel/watcher-android-arm64@2.4.1':
@@ -11447,10 +11443,10 @@ snapshots:
'@tanstack/query-core': 5.90.5
react: 19.2.0
'@tanstack/react-router-devtools@1.133.34(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
'@tanstack/react-router-devtools@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.36)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
dependencies:
'@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tanstack/router-devtools-core': 1.133.34(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
'@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tanstack/router-devtools-core': 1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)
@@ -11471,20 +11467,20 @@ snapshots:
- tsx
- yaml
'@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@tanstack/history': 1.133.28
'@tanstack/react-store': 0.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tanstack/router-core': 1.133.28
'@tanstack/react-store': 0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tanstack/router-core': 1.133.36
isbot: 5.1.28
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
'@tanstack/react-store@0.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
'@tanstack/react-store@0.8.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@tanstack/store': 0.7.0
'@tanstack/store': 0.8.0
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
use-sync-external-store: 1.6.0(react@19.2.0)
@@ -11501,19 +11497,19 @@ snapshots:
react: 19.2.0
react-dom: 19.2.0(react@19.2.0)
'@tanstack/router-core@1.133.28':
'@tanstack/router-core@1.133.36':
dependencies:
'@tanstack/history': 1.133.28
'@tanstack/store': 0.7.0
'@tanstack/store': 0.8.0
cookie-es: 2.0.0
seroval: 1.3.2
seroval-plugins: 1.3.2(seroval@1.3.2)
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
'@tanstack/router-devtools-core@1.133.34(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
'@tanstack/router-devtools-core@1.133.36(@tanstack/router-core@1.133.36)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)':
dependencies:
'@tanstack/router-core': 1.133.28
'@tanstack/router-core': 1.133.36
clsx: 2.1.1
goober: 2.1.16(csstype@3.1.3)
solid-js: 1.9.5
@@ -11534,9 +11530,9 @@ snapshots:
- tsx
- yaml
'@tanstack/router-generator@1.133.29':
'@tanstack/router-generator@1.133.36':
dependencies:
'@tanstack/router-core': 1.133.28
'@tanstack/router-core': 1.133.36
'@tanstack/router-utils': 1.133.19
'@tanstack/virtual-file-routes': 1.133.19
prettier: 3.6.2
@@ -11547,7 +11543,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@tanstack/router-plugin@1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))':
'@tanstack/router-plugin@1.133.36(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))':
dependencies:
'@babel/core': 7.28.4
'@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
@@ -11555,8 +11551,8 @@ snapshots:
'@babel/template': 7.27.2
'@babel/traverse': 7.28.4
'@babel/types': 7.28.4
'@tanstack/router-core': 1.133.28
'@tanstack/router-generator': 1.133.29
'@tanstack/router-core': 1.133.36
'@tanstack/router-generator': 1.133.36
'@tanstack/router-utils': 1.133.19
'@tanstack/virtual-file-routes': 1.133.19
babel-dead-code-elimination: 1.0.10
@@ -11564,7 +11560,7 @@ snapshots:
unplugin: 2.3.10
zod: 3.25.76
optionalDependencies:
'@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.2.0)(lightningcss@1.30.2)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
@@ -11582,12 +11578,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)':
'@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)':
dependencies:
'@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@tanstack/react-router': 1.133.36(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
zod: 4.1.12
'@tanstack/store@0.7.0': {}
'@tanstack/store@0.8.0': {}
'@tanstack/table-core@8.21.3': {}
@@ -12894,7 +12890,7 @@ snapshots:
dependencies:
'@types/node': 24.8.1
cosmiconfig: 9.0.0(typescript@5.9.3)
jiti: 2.6.0
jiti: 2.6.1
typescript: 5.9.3
cosmiconfig@7.1.0:
@@ -14866,8 +14862,6 @@ snapshots:
javascript-natural-sort@0.7.1:
optional: true
jiti@2.6.0: {}
jiti@2.6.1: {}
jju@1.4.0: {}
@@ -14954,16 +14948,16 @@ snapshots:
kind-of@6.0.3: {}
knip@5.66.3(@types/node@24.8.1)(typescript@5.9.3):
knip@5.66.4(@types/node@24.8.1)(typescript@5.9.3):
dependencies:
'@nodelib/fs.walk': 1.2.8
'@types/node': 24.8.1
fast-glob: 3.3.3
formatly: 0.3.0
jiti: 2.6.0
jiti: 2.6.1
js-yaml: 4.1.0
minimist: 1.2.8
oxc-resolver: 11.8.3
oxc-resolver: 11.12.0
picocolors: 1.1.1
picomatch: 4.0.3
smol-toml: 1.4.2
@@ -15779,29 +15773,27 @@ snapshots:
'@oxc-parser/binding-win32-arm64-msvc': 0.74.0
'@oxc-parser/binding-win32-x64-msvc': 0.74.0
oxc-resolver@11.8.3:
dependencies:
napi-postinstall: 0.3.0
oxc-resolver@11.12.0:
optionalDependencies:
'@oxc-resolver/binding-android-arm-eabi': 11.8.3
'@oxc-resolver/binding-android-arm64': 11.8.3
'@oxc-resolver/binding-darwin-arm64': 11.8.3
'@oxc-resolver/binding-darwin-x64': 11.8.3
'@oxc-resolver/binding-freebsd-x64': 11.8.3
'@oxc-resolver/binding-linux-arm-gnueabihf': 11.8.3
'@oxc-resolver/binding-linux-arm-musleabihf': 11.8.3
'@oxc-resolver/binding-linux-arm64-gnu': 11.8.3
'@oxc-resolver/binding-linux-arm64-musl': 11.8.3
'@oxc-resolver/binding-linux-ppc64-gnu': 11.8.3
'@oxc-resolver/binding-linux-riscv64-gnu': 11.8.3
'@oxc-resolver/binding-linux-riscv64-musl': 11.8.3
'@oxc-resolver/binding-linux-s390x-gnu': 11.8.3
'@oxc-resolver/binding-linux-x64-gnu': 11.8.3
'@oxc-resolver/binding-linux-x64-musl': 11.8.3
'@oxc-resolver/binding-wasm32-wasi': 11.8.3
'@oxc-resolver/binding-win32-arm64-msvc': 11.8.3
'@oxc-resolver/binding-win32-ia32-msvc': 11.8.3
'@oxc-resolver/binding-win32-x64-msvc': 11.8.3
'@oxc-resolver/binding-android-arm-eabi': 11.12.0
'@oxc-resolver/binding-android-arm64': 11.12.0
'@oxc-resolver/binding-darwin-arm64': 11.12.0
'@oxc-resolver/binding-darwin-x64': 11.12.0
'@oxc-resolver/binding-freebsd-x64': 11.12.0
'@oxc-resolver/binding-linux-arm-gnueabihf': 11.12.0
'@oxc-resolver/binding-linux-arm-musleabihf': 11.12.0
'@oxc-resolver/binding-linux-arm64-gnu': 11.12.0
'@oxc-resolver/binding-linux-arm64-musl': 11.12.0
'@oxc-resolver/binding-linux-ppc64-gnu': 11.12.0
'@oxc-resolver/binding-linux-riscv64-gnu': 11.12.0
'@oxc-resolver/binding-linux-riscv64-musl': 11.12.0
'@oxc-resolver/binding-linux-s390x-gnu': 11.12.0
'@oxc-resolver/binding-linux-x64-gnu': 11.12.0
'@oxc-resolver/binding-linux-x64-musl': 11.12.0
'@oxc-resolver/binding-wasm32-wasi': 11.12.0
'@oxc-resolver/binding-win32-arm64-msvc': 11.12.0
'@oxc-resolver/binding-win32-ia32-msvc': 11.12.0
'@oxc-resolver/binding-win32-x64-msvc': 11.12.0
p-cancelable@2.1.1: {}

View File

@@ -8,6 +8,10 @@ config MBEDTLS_AES_C
bool "MBEDTLS_AES_C"
default y
config MBEDTLS_ARIA_C
bool "MBEDTLS_ARIA_C"
default n
config MBEDTLS_CAMELLIA_C
bool "MBEDTLS_CAMELLIA_C"
default n
@@ -36,10 +40,6 @@ config MBEDTLS_RIPEMD160_C
bool "MBEDTLS_RIPEMD160_C"
default n
config MBEDTLS_XTEA_C
bool "MBEDTLS_XTEA_C"
default n
config MBEDTLS_RSA_NO_CRT
bool "MBEDTLS_RSA_NO_CRT"
default y
@@ -84,6 +84,10 @@ config MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
bool "MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED"
default n
config MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
bool "MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED"
default n
comment "Curves - unselect old or less-used curves to reduce binary size"
config MBEDTLS_ECP_DP_SECP192R1_ENABLED
@@ -104,7 +108,7 @@ config MBEDTLS_ECP_DP_SECP384R1_ENABLED
config MBEDTLS_ECP_DP_SECP521R1_ENABLED
bool "MBEDTLS_ECP_DP_SECP521R1_ENABLED"
default n
default y
config MBEDTLS_ECP_DP_SECP192K1_ENABLED
bool "MBEDTLS_ECP_DP_SECP192K1_ENABLED"
@@ -140,10 +144,6 @@ config MBEDTLS_ECP_DP_CURVE448_ENABLED
comment "Build Options - unselect features to reduce binary size"
config MBEDTLS_CERTS_C
bool "MBEDTLS_CERTS_C"
default n
config MBEDTLS_CIPHER_MODE_OFB
bool "MBEDTLS_CIPHER_MODE_OFB"
default n
@@ -168,9 +168,12 @@ config MBEDTLS_SELF_TEST
bool "MBEDTLS_SELF_TEST"
default n
config MBEDTLS_SSL_TRUNCATED_HMAC
bool "MBEDTLS_SSL_TRUNCATED_HMAC"
default n
config MBEDTLS_THREADING_C
bool "MBEDTLS_THREADING_C"
default y
config MBEDTLS_THREADING_PTHREAD
def_bool MBEDTLS_THREADING_C
config MBEDTLS_VERSION_C
bool "MBEDTLS_VERSION_C"
@@ -180,6 +183,43 @@ config MBEDTLS_VERSION_FEATURES
bool "MBEDTLS_VERSION_FEATURES"
default n
config MBEDTLS_PSA_CRYPTO_CLIENT
bool "MBEDTLS_PSA_CRYPTO_CLIENT"
config MBEDTLS_DEPRECATED_WARNING
bool "MBEDTLS_DEPRECATED_WARNING"
default n
config MBEDTLS_SSL_PROTO_TLS1_2
bool "MBEDTLS_SSL_PROTO_TLS1_2"
default y
config MBEDTLS_SSL_PROTO_TLS1_3
bool "MBEDTLS_SSL_PROTO_TLS1_3"
select MBEDTLS_PSA_CRYPTO_CLIENT
select MBEDTLS_HKDF_C
default y
config MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
bool "MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE"
depends on MBEDTLS_SSL_PROTO_TLS1_3
default y
config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED
bool "MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED"
depends on MBEDTLS_SSL_PROTO_TLS1_3
default y
config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED
bool "MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED"
depends on MBEDTLS_SSL_PROTO_TLS1_3
default y
config MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
bool "MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED"
depends on MBEDTLS_SSL_PROTO_TLS1_3
default y
comment "Build Options"
config MBEDTLS_ENTROPY_FORCE_SHA256
@@ -188,6 +228,7 @@ config MBEDTLS_ENTROPY_FORCE_SHA256
config MBEDTLS_SSL_RENEGOTIATION
bool "MBEDTLS_SSL_RENEGOTIATION"
depends on MBEDTLS_SSL_PROTO_TLS1_2
default n
endif

View File

@@ -8,16 +8,16 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=mbedtls
PKG_VERSION:=2.28.5
PKG_VERSION:=3.6.5
PKG_RELEASE:=1
PKG_USE_MIPS16:=0
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/ARMmbed/mbedtls/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=849e86b626e42ded6bf67197b64aa771daa54e2a7e2868dc67e1e4711959e5e3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL=https://github.com/Mbed-TLS/$(PKG_NAME)/releases/download/$(PKG_NAME)-$(PKG_VERSION)
PKG_HASH:=4a11f1777bb95bf4ad96721cac945a26e04bf19f57d905f241fe77ebeddf46d8
PKG_LICENSE:=GPL-2.0-or-later
PKG_LICENSE_FILES:=gpl-2.0.txt
PKG_LICENSE_FILES:=LICENSE
PKG_CPE_ID:=cpe:/a:arm:mbed_tls
MBEDTLS_BUILD_OPTS_CURVES= \
@@ -37,6 +37,7 @@ MBEDTLS_BUILD_OPTS_CURVES= \
MBEDTLS_BUILD_OPTS_CIPHERS= \
CONFIG_MBEDTLS_AES_C \
CONFIG_MBEDTLS_ARIA_C \
CONFIG_MBEDTLS_CAMELLIA_C \
CONFIG_MBEDTLS_CCM_C \
CONFIG_MBEDTLS_CMAC_C \
@@ -52,15 +53,17 @@ MBEDTLS_BUILD_OPTS_CIPHERS= \
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED \
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED \
CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED \
CONFIG_MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED \
CONFIG_MBEDTLS_NIST_KW_C \
CONFIG_MBEDTLS_RIPEMD160_C \
CONFIG_MBEDTLS_RSA_NO_CRT \
CONFIG_MBEDTLS_XTEA_C
CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED \
CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED \
CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED
MBEDTLS_BUILD_OPTS= \
$(MBEDTLS_BUILD_OPTS_CURVES) \
$(MBEDTLS_BUILD_OPTS_CIPHERS) \
CONFIG_MBEDTLS_CERTS_C \
CONFIG_MBEDTLS_CIPHER_MODE_OFB \
CONFIG_MBEDTLS_CIPHER_MODE_XTS \
CONFIG_MBEDTLS_DEBUG_C \
@@ -69,9 +72,15 @@ MBEDTLS_BUILD_OPTS= \
CONFIG_MBEDTLS_PLATFORM_C \
CONFIG_MBEDTLS_SELF_TEST \
CONFIG_MBEDTLS_SSL_RENEGOTIATION \
CONFIG_MBEDTLS_SSL_TRUNCATED_HMAC \
CONFIG_MBEDTLS_THREADING_C \
CONFIG_MBEDTLS_THREADING_PTHREAD \
CONFIG_MBEDTLS_VERSION_C \
CONFIG_MBEDTLS_VERSION_FEATURES
CONFIG_MBEDTLS_VERSION_FEATURES \
CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT \
CONFIG_MBEDTLS_DEPRECATED_WARNING \
CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 \
CONFIG_MBEDTLS_SSL_PROTO_TLS1_3 \
CONFIG_MBEDTLS_SSL_TLS1_3_COMPATIBILITY_MODE
PKG_CONFIG_DEPENDS := $(MBEDTLS_BUILD_OPTS)
@@ -80,7 +89,7 @@ include $(INCLUDE_DIR)/cmake.mk
define Package/mbedtls/Default
TITLE:=Embedded SSL
URL:=https://tls.mbed.org
URL:=https://www.trustedfirmware.org/projects/mbed-tls/
endef
define Package/mbedtls/Default/description
@@ -94,7 +103,7 @@ $(call Package/mbedtls/Default)
CATEGORY:=Libraries
SUBMENU:=SSL
TITLE+= (library)
ABI_VERSION:=12
ABI_VERSION:=21
MENU:=1
endef
@@ -136,16 +145,26 @@ define Build/Prepare
$(if $(strip $(foreach opt,$(MBEDTLS_BUILD_OPTS),$($(opt)))),
$(foreach opt,$(MBEDTLS_BUILD_OPTS),
$(PKG_BUILD_DIR)/scripts/config.py \
-f $(PKG_BUILD_DIR)/include/mbedtls/config.h \
-f $(PKG_BUILD_DIR)/include/mbedtls/mbedtls_config.h \
$(if $($(opt)),set,unset) $(patsubst CONFIG_%,%,$(opt))),)
endef
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include
$(CP) $(PKG_INSTALL_DIR)/usr/include/mbedtls $(1)/usr/include/
$(CP) \
$(PKG_INSTALL_DIR)/usr/include/mbedtls \
$(PKG_INSTALL_DIR)/usr/include/psa \
$(1)/usr/include/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so* $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.a $(1)/usr/lib/
$(CP) $(PKG_INSTALL_DIR)/usr/lib/cmake $(1)/usr/lib/
$(INSTALL_DIR) $(1)/usr/lib/pkgconfig
$(CP) \
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mbedcrypto.pc \
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mbedtls.pc \
$(PKG_INSTALL_DIR)/usr/lib/pkgconfig/mbedx509.pc \
$(1)/usr/lib/pkgconfig/
endef
define Package/libmbedtls/install

View File

@@ -0,0 +1,11 @@
--- a/library/common.h
+++ b/library/common.h
@@ -199,7 +199,7 @@ static inline void mbedtls_xor(unsigned
uint8x16_t x = veorq_u8(v1, v2);
vst1q_u8(r + i, x);
}
-#if defined(__IAR_SYSTEMS_ICC__)
+#if defined(__IAR_SYSTEMS_ICC__) || (defined(MBEDTLS_COMPILER_IS_GCC) && MBEDTLS_GCC_VERSION >= 140100)
/* This if statement helps some compilers (e.g., IAR) optimise out the byte-by-byte tail case
* where n is a constant multiple of 16.
* For other compilers (e.g. recent gcc and clang) it makes no difference if n is a compile-time

View File

@@ -1,197 +0,0 @@
From eb9d4fdf1846e688d51d86a9a50f0312aca2af25 Mon Sep 17 00:00:00 2001
From: Glenn Strauss <gstrauss@gluelogic.com>
Date: Sun, 23 Oct 2022 19:48:18 -0400
Subject: [PATCH] x509 crt verify SAN iPAddress
Signed-off-by: Glenn Strauss <gstrauss@gluelogic.com>
---
include/mbedtls/x509_crt.h | 2 +-
library/x509_crt.c | 126 ++++++++++++++++++++++++++++++-------
2 files changed, 103 insertions(+), 25 deletions(-)
--- a/include/mbedtls/x509_crt.h
+++ b/include/mbedtls/x509_crt.h
@@ -608,7 +608,7 @@ int mbedtls_x509_crt_verify_info(char *b
* \param cn The expected Common Name. This will be checked to be
* present in the certificate's subjectAltNames extension or,
* if this extension is absent, as a CN component in its
- * Subject name. Currently only DNS names are supported. This
+ * Subject name. DNS names and IP addresses are supported. This
* may be \c NULL if the CN need not be verified.
* \param flags The address at which to store the result of the verification.
* If the verification couldn't be completed, the flag value is
--- a/library/x509_crt.c
+++ b/library/x509_crt.c
@@ -57,6 +57,10 @@
#if defined(MBEDTLS_HAVE_TIME)
#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
+#define WIN32_LEAN_AND_MEAN
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0600
+#endif
#include <windows.h>
#else
#include <time.h>
@@ -3002,6 +3006,61 @@ find_parent:
}
}
+#ifdef _WIN32
+#ifdef _MSC_VER
+#pragma comment(lib, "ws2_32.lib")
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#elif (defined(__MINGW32__) || defined(__MINGW64__)) && _WIN32_WINNT >= 0x0600
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#endif
+#elif defined(__sun)
+/* Solaris requires -lsocket -lnsl for inet_pton() */
+#elif defined(__has_include)
+#if __has_include(<sys/socket.h>)
+#include <sys/socket.h>
+#endif
+#if __has_include(<arpa/inet.h>)
+#include <arpa/inet.h>
+#endif
+#endif
+
+/* Use whether or not AF_INET6 is defined to indicate whether or not to use
+ * the platform inet_pton() or a local implementation (below). The local
+ * implementation may be used even in cases where the platform provides
+ * inet_pton(), e.g. when there are different includes required and/or the
+ * platform implementation requires dependencies on additional libraries.
+ * Specifically, Windows requires custom includes and additional link
+ * dependencies, and Solaris requires additional link dependencies.
+ * Also, as a coarse heuristic, use the local implementation if the compiler
+ * does not support __has_include(), or if the definition of AF_INET6 is not
+ * provided by headers included (or not) via __has_include() above. */
+#ifndef AF_INET6
+
+#define x509_cn_inet_pton(cn, dst) (0)
+
+#else
+
+static int x509_inet_pton_ipv6(const char *src, void *dst)
+{
+ return inet_pton(AF_INET6, src, dst) == 1 ? 0 : -1;
+}
+
+static int x509_inet_pton_ipv4(const char *src, void *dst)
+{
+ return inet_pton(AF_INET, src, dst) == 1 ? 0 : -1;
+}
+
+#endif /* AF_INET6 */
+
+static size_t x509_cn_inet_pton(const char *cn, void *dst)
+{
+ return strchr(cn, ':') == NULL
+ ? x509_inet_pton_ipv4(cn, dst) == 0 ? 4 : 0
+ : x509_inet_pton_ipv6(cn, dst) == 0 ? 16 : 0;
+}
+
/*
* Check for CN match
*/
@@ -3022,24 +3081,51 @@ static int x509_crt_check_cn(const mbedt
return -1;
}
+static int x509_crt_check_san_ip(const mbedtls_x509_sequence *san,
+ const char *cn, size_t cn_len)
+{
+ uint32_t ip[4];
+ cn_len = x509_cn_inet_pton(cn, ip);
+ if (cn_len == 0) {
+ return -1;
+ }
+
+ for (const mbedtls_x509_sequence *cur = san; cur != NULL; cur = cur->next) {
+ const unsigned char san_type = (unsigned char) cur->buf.tag &
+ MBEDTLS_ASN1_TAG_VALUE_MASK;
+ if (san_type == MBEDTLS_X509_SAN_IP_ADDRESS &&
+ cur->buf.len == cn_len && memcmp(cur->buf.p, ip, cn_len) == 0) {
+ return 0;
+ }
+ }
+
+ return -1;
+}
+
/*
* Check for SAN match, see RFC 5280 Section 4.2.1.6
*/
-static int x509_crt_check_san(const mbedtls_x509_buf *name,
+static int x509_crt_check_san(const mbedtls_x509_sequence *san,
const char *cn, size_t cn_len)
{
- const unsigned char san_type = (unsigned char) name->tag &
- MBEDTLS_ASN1_TAG_VALUE_MASK;
-
- /* dNSName */
- if (san_type == MBEDTLS_X509_SAN_DNS_NAME) {
- return x509_crt_check_cn(name, cn, cn_len);
+ int san_ip = 0;
+ for (const mbedtls_x509_sequence *cur = san; cur != NULL; cur = cur->next) {
+ switch ((unsigned char) cur->buf.tag & MBEDTLS_ASN1_TAG_VALUE_MASK) {
+ case MBEDTLS_X509_SAN_DNS_NAME: /* dNSName */
+ if (x509_crt_check_cn(&cur->buf, cn, cn_len) == 0) {
+ return 0;
+ }
+ break;
+ case MBEDTLS_X509_SAN_IP_ADDRESS: /* iPAddress */
+ san_ip = 1;
+ break;
+ /* (We may handle other types here later.) */
+ default: /* Unrecognized type */
+ break;
+ }
}
- /* (We may handle other types here later.) */
-
- /* Unrecognized type */
- return -1;
+ return san_ip ? x509_crt_check_san_ip(san, cn, cn_len) : -1;
}
/*
@@ -3050,31 +3136,23 @@ static void x509_crt_verify_name(const m
uint32_t *flags)
{
const mbedtls_x509_name *name;
- const mbedtls_x509_sequence *cur;
size_t cn_len = strlen(cn);
if (crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME) {
- for (cur = &crt->subject_alt_names; cur != NULL; cur = cur->next) {
- if (x509_crt_check_san(&cur->buf, cn, cn_len) == 0) {
- break;
- }
- }
-
- if (cur == NULL) {
- *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH;
+ if (x509_crt_check_san(&crt->subject_alt_names, cn, cn_len) == 0) {
+ return;
}
} else {
for (name = &crt->subject; name != NULL; name = name->next) {
if (MBEDTLS_OID_CMP(MBEDTLS_OID_AT_CN, &name->oid) == 0 &&
x509_crt_check_cn(&name->val, cn, cn_len) == 0) {
- break;
+ return;
}
}
- if (name == NULL) {
- *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH;
- }
}
+
+ *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH;
}
/*

View File

@@ -1,7 +1,9 @@
--- a/programs/CMakeLists.txt
+++ b/programs/CMakeLists.txt
@@ -1,12 +1,8 @@
@@ -3,14 +3,10 @@ add_custom_target(${programs_target})
add_subdirectory(aes)
add_subdirectory(cipher)
-if (NOT WIN32)
- add_subdirectory(fuzz)
-endif()

View File

@@ -366,6 +366,7 @@ test-binary:
CGO_ENABLED=1 go build -race -ldflags="-X 'github.com/enfein/mieru/v3/pkg/log.LogPrefix=C2'" -o mieru2 cmd/mieru/mieru.go
CGO_ENABLED=1 go build -race -ldflags="-X 'github.com/enfein/mieru/v3/pkg/log.LogPrefix=S2'" -o mita2 cmd/mita/mita.go
CGO_ENABLED=0 go build test/cmd/exampleapiclient/exampleapiclient.go
CGO_ENABLED=0 go build test/cmd/exampleapiserver/exampleapiserver.go
CGO_ENABLED=0 go build test/cmd/httpserver/httpserver.go
CGO_ENABLED=0 go build test/cmd/sockshttpclient/sockshttpclient.go
CGO_ENABLED=0 go build test/cmd/socksudpclient/socksudpclient.go
@@ -379,7 +380,7 @@ test-container-image: test-binary
docker build -t mieru_apiclient:${SHORT_SHA} -f test/deploy/apiclient/Dockerfile .
docker build -t mieru_proxychain:${SHORT_SHA} -f test/deploy/proxychain/Dockerfile .
fi
rm -f exampleapiclient mieru mieru2 mita mita2 httpserver sockshttpclient socksudpclient udpserver
rm -f exampleapiclient exampleapiserver mieru mieru2 mita mita2 httpserver sockshttpclient socksudpclient udpserver
# Run docker integration tests.
.PHONY: run-container-test

View File

@@ -30,7 +30,7 @@ import (
// EarlyConn implements net.Conn interface.
// When the Write() method on the net.Conn is called for the first time,
// it performs the initial handshake and writes
// the request or response to the peer.
// the request or response to the peer within the same network packet.
type EarlyConn struct {
net.Conn
request atomic.Pointer[model.Request]

View File

@@ -125,6 +125,7 @@ func main() {
panic(err)
}
fmt.Printf("API client is listening to %v\n", l.Addr())
for {
conn, err := l.Accept()
if err != nil {
@@ -146,32 +147,30 @@ func handleOneSocks5Conn(c client.Client, conn net.Conn) {
}
// Find destination.
socks5Header := make([]byte, 3)
if _, err := io.ReadFull(conn, socks5Header); err != nil {
panic(fmt.Sprintf("Read socks5 header failed: %v", err))
}
netAddr := model.NetAddrSpec{}
var isTCP, isUDP bool
if socks5Header[1] == constant.Socks5ConnectCmd {
netAddr.Net = "tcp"
isTCP = true
} else if socks5Header[1] == constant.Socks5UDPAssociateCmd {
netAddr.Net = "udp"
isUDP = true
} else {
panic(fmt.Sprintf("Socks5 command %d is invalid", socks5Header[1]))
}
if err := netAddr.ReadFromSocks5(conn); err != nil {
var req model.Request
if err := req.ReadFromSocks5(conn); err != nil {
panic(fmt.Sprintf("ReadFromSocks5() failed: %v", err))
}
var isTCP, isUDP bool
switch req.Command {
case constant.Socks5ConnectCmd:
isTCP = true
case constant.Socks5UDPAssociateCmd:
isUDP = true
default:
panic(fmt.Sprintf("Invalid socks5 command %d", req.Command))
}
netAddr, err := req.ToNetAddrSpec()
if err != nil {
panic(fmt.Sprintf("ToNetAddrSpec() failed: %v", err))
}
if *debug {
fmt.Printf("Destination network: %v, address: %v\n", netAddr.Network(), netAddr.String())
fmt.Printf("Destination address: %v\n", req.DstAddr)
}
// Dial to proxy server and do handshake.
ctx := context.Background()
var proxyConn net.Conn
var err error
proxyConn, err = c.DialContext(ctx, netAddr)
if err != nil {
panic(fmt.Sprintf("DialContext() failed: %v", err))

View File

@@ -0,0 +1,101 @@
// Copyright (C) 2025 mieru authors
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
package main
import (
"flag"
"fmt"
"net"
"github.com/enfein/mieru/v3/apis/model"
"github.com/enfein/mieru/v3/apis/server"
"github.com/enfein/mieru/v3/pkg/appctl/appctlpb"
"google.golang.org/protobuf/proto"
)
var (
port = flag.Int("port", 0, "mieru API server proxy port to listen")
protocol = flag.String("protocol", "TCP", "Proxy transport protocol: TCP or UDP")
username = flag.String("username", "", "mieru username")
password = flag.String("password", "", "mieru password")
useEarlyConn = flag.Bool("use_early_conn", false, "Reply and payload use the same network packet")
debug = flag.Bool("debug", false, "Display debug messages")
)
func main() {
flag.Parse()
if *port < 1 || *port > 65535 {
panic(fmt.Sprintf("port %d is invalid", *port))
}
var transportProtocol *appctlpb.TransportProtocol
switch *protocol {
case "TCP":
transportProtocol = appctlpb.TransportProtocol_TCP.Enum()
case "UDP":
transportProtocol = appctlpb.TransportProtocol_UDP.Enum()
default:
panic(fmt.Sprintf("Transport protocol %q is invalid", *protocol))
}
if *username == "" {
panic("username is not set")
}
if *password == "" {
panic("password is not set")
}
s := server.NewServer()
if err := s.Store(&server.ServerConfig{
Config: &appctlpb.ServerConfig{
PortBindings: []*appctlpb.PortBinding{
{
Port: proto.Int32(int32(*port)),
Protocol: transportProtocol,
},
},
Users: []*appctlpb.User{
{
Name: username,
Password: password,
AllowPrivateIP: proto.Bool(true),
AllowLoopbackIP: proto.Bool(true),
},
},
},
}); err != nil {
panic(err)
}
if _, err := s.Load(); err != nil {
panic(err)
}
if err := s.Start(); err != nil {
panic(err)
}
if !s.IsRunning() {
panic("server is not running after start")
}
fmt.Printf("API server is listening to %s port %d\n", *protocol, *port)
for {
conn, req, err := s.Accept()
if err != nil {
panic(err)
}
handleOneProxyConn(s, conn, req)
}
}
func handleOneProxyConn(s server.Server, conn net.Conn, req *model.Request) {}

View File

@@ -8,12 +8,12 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=ddns-go
PKG_VERSION:=6.13.0
PKG_VERSION:=6.13.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://codeload.github.com/jeessy2/ddns-go/tar.gz/v$(PKG_VERSION)?
PKG_HASH:=e1d2201d5b237ad55de8cfe3451705fc75a9deeb9765637cfe8c2c362216b4ba
PKG_HASH:=3f71e243d93b19b9e08d1205a4e0868bf41cf70a18a029d1175a076ff8408169
PKG_LICENSE:=MIT
PKG_LICENSE_FILES:=LICENSE

View File

@@ -16,7 +16,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-amlogic
PKG_VERSION:=3.1.273
PKG_VERSION:=3.1.276
PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0 License

View File

@@ -1,15 +1,15 @@
--Remove the spaces in the string
function trim(str)
--return (string.gsub(str, "^%s*(.-)%s*$", "%1"))
return (string.gsub(str, "%s+", ""))
--return (string.gsub(str, "^%s*(.-)%s*$", "%1"))
return (string.gsub(str, "%s+", ""))
end
--Auto-complete node
local check_config_amlogic = luci.sys.exec("uci get amlogic.@amlogic[0].amlogic_firmware_repo 2>/dev/null") or ""
if (trim(check_config_amlogic) == "") then
luci.sys.exec("uci delete amlogic.@amlogic[0] 2>/dev/null")
luci.sys.exec("uci set amlogic.config='amlogic' 2>/dev/null")
luci.sys.exec("uci commit amlogic 2>/dev/null")
luci.sys.exec("uci delete amlogic.@amlogic[0] 2>/dev/null")
luci.sys.exec("uci set amlogic.config='amlogic' 2>/dev/null")
luci.sys.exec("uci commit amlogic 2>/dev/null")
end
b = Map("amlogic")
@@ -29,20 +29,20 @@ mydevice.default = "PLATFORM: " .. mydevice_platfrom
mydevice.rmempty = false
--2.Set OpenWrt Firmware Repository
firmware_repo = o:option(Value, "amlogic_firmware_repo", translate("Download repository of OpenWrt:"))
firmware_repo.description = translate("Set the download repository of the OpenWrt files on github.com in [Online Download Update].")
firmware_repo = o:option(Value, "amlogic_firmware_repo", translate("OpenWrt download repository:"))
firmware_repo.description = translate("Set the OpenWrt files download repository on github.com in [Online Download Update].")
firmware_repo.default = "https://github.com/breakingbadboy/OpenWrt"
firmware_repo.rmempty = false
--3.Set OpenWrt Releases's Tag Keywords
firmware_tag = o:option(Value, "amlogic_firmware_tag", translate("Keywords of Tags in Releases:"))
firmware_tag.description = translate("Set the keywords of Tags in Releases of github.com in [Online Download Update].")
firmware_tag = o:option(Value, "amlogic_firmware_tag", translate("OpenWrt download tags keyword:"))
firmware_tag.description = translate("Set the OpenWrt files download tags keyword for github.com in [Online Download Update].")
firmware_tag.default = "ARMv8"
firmware_tag.rmempty = false
--4.Set OpenWrt Firmware Suffix
firmware_suffix = o:option(Value, "amlogic_firmware_suffix", translate("Suffix of OpenWrt files:"))
firmware_suffix.description = translate("Set the suffix of the OpenWrt in Releases of github.com in [Online Download Update].")
firmware_suffix = o:option(Value, "amlogic_firmware_suffix", translate("OpenWrt files suffix:"))
firmware_suffix.description = translate("Set the OpenWrt files download suffix for github.com in [Online Download Update].")
firmware_suffix:value(".7z", translate(".7z"))
firmware_suffix:value(".zip", translate(".zip"))
firmware_suffix:value(".img.gz", translate(".img.gz"))
@@ -51,16 +51,76 @@ firmware_suffix.default = ".img.gz"
firmware_suffix.rmempty = false
--5.Set OpenWrt Kernel DownLoad Path
kernel_path = o:option(Value, "amlogic_kernel_path", translate("Download path of OpenWrt kernel:"))
kernel_path.description = translate("Set the download path of the kernel in the github.com repository in [Online Download Update].")
kernel_path = o:option(Value, "amlogic_kernel_path", translate("Kernel download repository:"))
kernel_path.description = translate("Set the kernel files download repository on github.com in [Online Download Update].")
kernel_path:value("https://github.com/breakingbadboy/OpenWrt")
kernel_path:value("https://github.com/ophub/kernel")
kernel_path.default = "https://github.com/breakingbadboy/OpenWrt"
kernel_path.rmempty = false
--6.Set kernel version branch
--6. Set OpenWrt Kernel Tags
-- Read the currently SAVED value of the kernel path.
local current_kernel_path = trim(luci.sys.exec("uci get amlogic.@amlogic[0].amlogic_kernel_path 2>/dev/null") or "")
-- If it's not set yet, use its default value for the logic below.
if current_kernel_path == "" then
current_kernel_path = kernel_path.default
end
-- Define the tag lists.
-- The base list, available for all repositories.
local known_tags = {
kernel_rk3588 = "kernel_rk3588 [Rockchip RK3588 Kernel]",
kernel_rk35xx = "kernel_rk35xx [Rockchip RK35xx Kernel]",
kernel_stable = "kernel_stable [Mainline Stable Kernel]",
}
-- Additional tags only available for the 'ophub/kernel' repository.
local ophub_extra_tags = {
kernel_flippy = "kernel_flippy [Mainline Stable Kernel by Flippy]",
kernel_h6 = "kernel_h6 [Allwinner H6 Kernel]",
kernel_dev = "kernel_dev [Development Kernel]",
kernel_beta = "kernel_beta [Beta Kernel]",
}
-- Conditionally add the extra tags to the list.
if (string.find(current_kernel_path, "ophub/kernel")) then
for value, display_name in pairs(ophub_extra_tags) do
known_tags[value] = display_name
end
end
-- Determine the default kernel tag based on existing config or system info.
local kernel_tagsname
local existing_tag = trim(luci.sys.exec("uci get amlogic.@amlogic[0].amlogic_kernel_tags 2>/dev/null") or "")
if existing_tag ~= "" then
kernel_tagsname = existing_tag
else
local kernel_release_info = trim(luci.sys.exec("uname -r 2>/dev/null")) or ""
if (string.find(kernel_release_info, "-rk3588")) then
kernel_tagsname = "kernel_rk3588"
elseif (string.find(kernel_release_info, "-rk35xx")) then
kernel_tagsname = "kernel_rk35xx"
elseif (string.find(kernel_release_info, "-h6") or string.find(kernel_release_info, "-zicai")) then
kernel_tagsname = "kernel_h6"
else
kernel_tagsname = "kernel_stable"
end
end
-- Create the kernel tags option.
kernel_tags = o:option(Value, "amlogic_kernel_tags", translate("Kernel download tags:"))
kernel_tags.description = translate("Set the kernel files download tags on github.com in [Online Download Update].")
-- Populate the dropdown with the known tags.
for value, display_name in pairs(known_tags) do
kernel_tags:value(value, translate(display_name))
end
-- Ensure the default tag is included in the options.
if not known_tags[kernel_tagsname] then
kernel_tags:value(kernel_tagsname, kernel_tagsname)
end
-- Set the default and other properties.
kernel_tags.default = kernel_tagsname
kernel_tags.rmempty = false
--7.Set kernel version branch
kernel_branch = o:option(Value, "amlogic_kernel_branch", translate("Set version branch:"))
kernel_branch.description = translate("Set the version branch of the openwrt firmware and kernel selected in [Online Download Update].")
kernel_branch.description = translate("Set the version branch of the OpenWrt files and kernel selected in [Online Download Update].")
kernel_branch:value("5.4", translate("5.4"))
kernel_branch:value("5.10", translate("5.10"))
kernel_branch:value("5.15", translate("5.15"))
@@ -71,19 +131,19 @@ local default_kernel_branch = luci.sys.exec("uname -r | grep -oE '^[1-9].[0-9]{1
kernel_branch.default = trim(default_kernel_branch)
kernel_branch.rmempty = false
--7.Restore configuration
--8.Restore configuration
firmware_config = o:option(Flag, "amlogic_firmware_config", translate("Keep config update:"))
firmware_config.description = translate("Set whether to keep the current config during [Online Download Update] and [Manually Upload Update].")
firmware_config.default = "1"
firmware_config.rmempty = false
--8.Write bootloader
--9.Write bootloader
write_bootloader = o:option(Flag, "amlogic_write_bootloader", translate("Auto write bootloader:"))
write_bootloader.description = translate("[Recommended choice] Set whether to auto write bootloader during install and update OpenWrt.")
write_bootloader.default = "0"
write_bootloader.rmempty = false
--9.Set the file system type of the shared partition
--10.Set the file system type of the shared partition
shared_fstype = o:option(ListValue, "amlogic_shared_fstype", translate("Set the file system type:"))
shared_fstype.description = translate("[Default ext4] Set the file system type of the shared partition (/mnt/mmcblk*p4) when install OpenWrt.")
shared_fstype:value("ext4", translate("ext4"))

View File

@@ -368,35 +368,62 @@ msgstr "您可以自定义 [在线下载和更新] 中 OpenWrt 固件和内核
msgid "Tip: The same files as the current OpenWrt system's BOARD (such as rock5b) and kernel (such as 5.10) will be downloaded."
msgstr "提示:将下载与当前 OpenWrt 系统的 BOARDrock5b和内核5.10)相同的文件。"
msgid "Download repository of OpenWrt:"
msgstr "OpenWrt 件的下载仓库:"
msgid "OpenWrt download repository:"
msgstr "OpenWrt 件的下载仓库:"
msgid "Set the download repository of the OpenWrt files on github.com in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 的 OpenWrt 件的下载仓库。"
msgid "Set the OpenWrt files download repository on github.com in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 的 OpenWrt 件的下载仓库。"
msgid "Keywords of Tags in Releases:"
msgstr "Releases 里 Tags 的关键字:"
msgid "OpenWrt download tags keyword:"
msgstr "OpenWrt 下载标签关键字:"
msgid "Set the keywords of Tags in Releases of github.com in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 的 Releases 里 Tags 的关键字。"
msgid "Set the OpenWrt files download tags keyword for github.com in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 的 OpenWrt 文件下载标签关键字。"
msgid "Suffix of OpenWrt files:"
msgstr "OpenWrt 件的后缀:"
msgid "OpenWrt files suffix:"
msgstr "OpenWrt 件的后缀:"
msgid "Set the suffix of the OpenWrt in Releases of github.com in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 的 Releases 里 OpenWrt 件的后缀。"
msgid "Set the OpenWrt files download suffix for github.com in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 的 OpenWrt 件的后缀。"
msgid "Download path of OpenWrt kernel:"
msgstr "OpenWrt 内核的下载路径"
msgid "Kernel download repository:"
msgstr "内核的下载仓库"
msgid "Set the download path of the kernel in the github.com repository in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 仓库里内核的下载路径。"
msgid "Set the kernel files download repository on github.com in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 的内核文件下载仓库。"
msgid "Kernel download tags:"
msgstr "内核的下载标签:"
msgid "Set the kernel files download tags on github.com in [Online Download Update]."
msgstr "设置 [在线下载更新] 中 github.com 的内核文件下载标签。"
msgid "kernel_rk3588 [Rockchip RK3588 Kernel]"
msgstr "kernel_rk3588 [Rockchip RK3588 内核]"
msgid "kernel_rk35xx [Rockchip RK35xx Kernel]"
msgstr "kernel_rk35xx [Rockchip RK35xx 内核]"
msgid "kernel_stable [Mainline Stable Kernel]"
msgstr "kernel_stable [主线稳定内核]"
msgid "kernel_flippy [Mainline Stable Kernel by Flippy]"
msgstr "kernel_flippy [Flippy 的主线稳定内核]"
msgid "kernel_h6 [Allwinner H6 Kernel]"
msgstr "kernel_h6 [Allwinner H6 内核]"
msgid "kernel_dev [Development Kernel]"
msgstr "kernel_dev [开发版内核]"
msgid "kernel_beta [Beta Kernel]"
msgstr "kernel_beta [测试版内核]"
msgid "Set version branch:"
msgstr "设置版本分支:"
msgid "Set the version branch of the openwrt firmware and kernel selected in [Online Download Update]."
msgstr "设置 [在线下载更新] 时 OpenWrt 件与内核所选用的版本分支。"
msgid "Set the version branch of the OpenWrt files and kernel selected in [Online Download Update]."
msgstr "设置 [在线下载更新] 时 OpenWrt 件与内核所选用的版本分支。"
msgid "Keep config update:"
msgstr "保留配置更新:"

View File

@@ -5,6 +5,7 @@ config amlogic 'config'
option amlogic_firmware_tag 'ARMv8'
option amlogic_firmware_suffix '.img.gz'
option amlogic_kernel_path 'https://github.com/breakingbadboy/OpenWrt'
option amlogic_kernel_tags ''
option amlogic_kernel_branch ''
option amlogic_firmware_config '1'
option amlogic_write_bootloader '0'

View File

@@ -93,13 +93,12 @@ FIRMWARE_DOWNLOAD_PATH="/mnt/${EMMC_NAME}${PARTITION_NAME}4"
if [[ -s "${AMLOGIC_SOC_FILE}" ]]; then
source "${AMLOGIC_SOC_FILE}" 2>/dev/null
PLATFORM="${PLATFORM}"
SOC="${SOC}"
BOARD="${BOARD}"
else
tolog "${AMLOGIC_SOC_FILE} file is missing!" "1"
fi
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" || -z "${SOC}" || -z "${BOARD}" ]]; then
tolog "Missing [ PLATFORM / SOC / BOARD ] value in ${AMLOGIC_SOC_FILE} file." "1"
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" || -z "${BOARD}" ]]; then
tolog "Missing [ PLATFORM / BOARD ] value in ${AMLOGIC_SOC_FILE} file." "1"
fi
tolog "PLATFORM: [ ${PLATFORM} ], BOARD: [ ${BOARD} ], Use in [ ${EMMC_NAME} ]"

View File

@@ -91,16 +91,14 @@ KERNEL_DOWNLOAD_PATH="/mnt/${EMMC_NAME}${PARTITION_NAME}4"
if [[ -s "${AMLOGIC_SOC_FILE}" ]]; then
source "${AMLOGIC_SOC_FILE}" 2>/dev/null
PLATFORM="${PLATFORM}"
SOC="${SOC}"
KERNEL_TAGS="${KERNEL_TAGS}"
else
tolog "${AMLOGIC_SOC_FILE} file is missing!" "1"
fi
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" || -z "${SOC}" ]]; then
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" ]]; then
tolog "Missing [ PLATFORM ] value in ${AMLOGIC_SOC_FILE} file." "1"
fi
tolog "PLATFORM: [ ${PLATFORM} ], SOC: [ ${SOC} ], Use in [ ${EMMC_NAME} ]"
tolog "PLATFORM: [ ${PLATFORM} ], Use in [ ${EMMC_NAME} ]"
sleep 2
# Step 1. Set the kernel query api
@@ -119,40 +117,48 @@ fi
# Convert kernel repo to api format
[[ "${kernel_repo}" =~ ^https: ]] && kernel_repo="$(echo ${kernel_repo} | awk -F'/' '{print $4"/"$5}')"
kernel_api="https://github.com/${kernel_repo}"
if [[ -n "${KERNEL_TAGS}" ]]; then
kernel_tag="${KERNEL_TAGS}"
tolog "01.03 Kernel repo: ${kernel_repo}"
# Get the current kernel uname
kernel_uname="$(uname -r 2>/dev/null)"
tolog "01.04 Current kernel uname: ${kernel_uname}"
# Get the kernel tag from uci config
op_kernel_tags="$(uci get amlogic.config.amlogic_kernel_tags 2>/dev/null)"
# Determine the kernel tag
if [[ -n "${op_kernel_tags}" ]]; then
kernel_tag="${op_kernel_tags/kernel_/}"
else
if [[ "${SOC}" == "rk3588" ]]; then
# Determine the kernel tag based on the current kernel uname
if [[ "${kernel_uname}" =~ -rk3588 ]]; then
kernel_tag="rk3588"
elif [[ "${SOC}" == "rk3528" ]]; then
elif [[ "${kernel_uname}" =~ -rk35xx ]]; then
kernel_tag="rk35xx"
elif [[ "${kernel_uname}" =~ -h6|-zicai ]]; then
kernel_tag="h6"
else
kernel_tag="stable"
fi
fi
# Remove the kernel_ prefix
kernel_tag="${kernel_tag/kernel_/}"
# If the kernel tag is a number, it is converted to a stable branch
[[ "${kernel_tag}" =~ ^[1-9]+ ]] && kernel_tag="stable"
# Save the kernel tag to uci config
uci set amlogic.config.amlogic_kernel_tags="kernel_${kernel_tag}" 2>/dev/null
uci commit amlogic 2>/dev/null
fi
tolog "01.05 Kernel tag: kernel_${kernel_tag}"
sleep 2
# Step 2: Check if there is the latest kernel version
check_kernel() {
# 02. Query local version information
tolog "02. Start checking the kernel version."
# 02.01 Query the current version
if [[ "${kernel_tag}" == "rk3588" || "${kernel_tag}" == "rk35xx" ]]; then
current_kernel_v=$(uname -r 2>/dev/null)
else
current_kernel_v=$(uname -r 2>/dev/null | grep -oE '^[1-9]\.[0-9]{1,2}\.[0-9]+')
fi
[[ -n "${current_kernel_v}" ]] || tolog "02.01 The current kernel version is not detected." "1"
tolog "02.01 current version: ${current_kernel_v}"
# 02.01 Get current kernel version
[[ ! "${kernel_tag}" =~ ^(rk3588|rk35xx)$ ]] && kernel_uname="$(echo "${kernel_uname}" | cut -d'-' -f1)"
[[ -n "${kernel_uname}" ]] || tolog "02.01 The current kernel version is not detected." "1"
tolog "02.01 current version: ${kernel_uname}"
sleep 2
# 02.02 Version comparison
main_line_version="$(echo ${current_kernel_v} | awk -F '.' '{print $1"."$2}')"
main_line_version="$(echo ${kernel_uname} | awk -F '.' '{print $1"."$2}')"
# 02.03 Query the selected branch in the settings
server_kernel_branch="$(uci get amlogic.config.amlogic_kernel_branch 2>/dev/null | grep -oE '^[1-9].[0-9]{1,3}')"
@@ -178,7 +184,7 @@ check_kernel() {
)"
[[ -n "${latest_version}" ]] || tolog "02.03 No kernel available, please use another kernel branch." "1"
tolog "02.04 current version: ${current_kernel_v}, Latest version: ${latest_version}"
tolog "02.04 current version: ${kernel_uname}, Latest version: ${latest_version}"
sleep 2
# Get the sha256 value of the latest version
@@ -190,7 +196,7 @@ check_kernel() {
)"
[[ -n "${latest_kernel_sha256}" ]] && tolog "02.05 Kernel sha256: ${latest_kernel_sha256}"
if [[ "${latest_version}" == "${current_kernel_v}" ]]; then
if [[ "${latest_version}" == "${kernel_uname}" ]]; then
tolog "02.06 Already the latest version, no need to update." "1"
sleep 2
else

View File

@@ -54,15 +54,14 @@ fi
if [[ -s "${AMLOGIC_SOC_FILE}" ]]; then
source "${AMLOGIC_SOC_FILE}" 2>/dev/null
PLATFORM="${PLATFORM}"
SOC="${SOC}"
else
tolog "${AMLOGIC_SOC_FILE} file is missing!" "1"
fi
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" || -z "${SOC}" ]]; then
if [[ -z "${PLATFORM}" || -z "$(echo "${support_platform[@]}" | grep -w "${PLATFORM}")" ]]; then
tolog "Missing [ PLATFORM ] value in ${AMLOGIC_SOC_FILE} file." "1"
fi
tolog "PLATFORM: [ ${PLATFORM} ], SOC: [ ${SOC} ]"
tolog "PLATFORM: [ ${PLATFORM} ]"
sleep 2
# 01. Query local version information

View File

@@ -97,7 +97,7 @@ jobs:
./build-release -t ${{ matrix.platform.target }} $compile_features $compile_compress $compile_nightly $compile_cargo_flags
- name: Upload Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: ${{ matrix.platform.target }}
path: build/release/*
@@ -138,7 +138,7 @@ jobs:
./build/build-host-release -t ${{ matrix.target }}
- name: Upload Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: ${{ matrix.target }}
path: build/release/*
@@ -164,7 +164,7 @@ jobs:
pwsh ./build/build-host-release.ps1 "full winservice"
- name: Upload Artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v5
with:
name: windows-native
path: build/release/*

View File

@@ -9,6 +9,12 @@ on:
push:
branches:
- master
tags:
- 'v*'
- 'V*'
permissions:
contents: write
env:
OutputArch: "linux-64"
@@ -21,7 +27,6 @@ jobs:
strategy:
matrix:
configuration: [Release]
runs-on: ubuntu-24.04
steps:
@@ -31,18 +36,18 @@ jobs:
submodules: 'recursive'
fetch-depth: '0'
- name: Setup
- name: Setup .NET
uses: actions/setup-dotnet@v5.0.0
with:
dotnet-version: '8.0.x'
- name: Build
run: |
cd v2rayN
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 --self-contained=true -o $OutputPath64
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 --self-contained=true -o $OutputPathArm64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 --self-contained=true -p:PublishTrimmed=true -o $OutputPath64
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 --self-contained=true -p:PublishTrimmed=true -o $OutputPathArm64
cd v2rayN
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 --self-contained=true -o "$OutputPath64"
dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 --self-contained=true -o "$OutputPathArm64"
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 --self-contained=true -p:PublishTrimmed=true -o "$OutputPath64"
dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 --self-contained=true -p:PublishTrimmed=true -o "$OutputPathArm64"
- name: Upload build artifacts
uses: actions/upload-artifact@v5.0.0
@@ -56,8 +61,8 @@ jobs:
if: github.event.inputs.release_tag != ''
run: |
chmod 755 package-debian.sh
./package-debian.sh $OutputArch $OutputPath64 ${{ github.event.inputs.release_tag }}
./package-debian.sh $OutputArchArm $OutputPathArm64 ${{ github.event.inputs.release_tag }}
./package-debian.sh "$OutputArch" "$OutputPath64" "${{ github.event.inputs.release_tag }}"
./package-debian.sh "$OutputArchArm" "$OutputPathArm64" "${{ github.event.inputs.release_tag }}"
- name: Upload deb to release
uses: svenstaro/upload-release-action@v2
@@ -73,8 +78,8 @@ jobs:
if: github.event.inputs.release_tag != ''
run: |
chmod 755 package-release-zip.sh
./package-release-zip.sh $OutputArch $OutputPath64
./package-release-zip.sh $OutputArchArm $OutputPathArm64
./package-release-zip.sh "$OutputArch" "$OutputPath64"
./package-release-zip.sh "$OutputArchArm" "$OutputPathArm64"
- name: Upload zip archive to release
uses: svenstaro/upload-release-action@v2
@@ -85,36 +90,62 @@ jobs:
file_glob: true
prerelease: true
# release RHEL package
- name: Package RPM (RHEL-family)
if: github.event.inputs.release_tag != ''
rpm:
needs: build
if: |
(github.event_name == 'workflow_dispatch' && github.event.inputs.release_tag != '') ||
(github.event_name == 'push' && startsWith(github.ref, 'refs/tags/'))
runs-on: ubuntu-24.04
container:
image: quay.io/almalinuxorg/10-base:latest
options: --platform=linux/amd64/v2
env:
RELEASE_TAG: ${{ github.event.inputs.release_tag != '' && github.event.inputs.release_tag || github.ref_name }}
steps:
- name: Prepare tools (Red Hat)
run: |
chmod 755 package-rhel.sh
# Build for both x86_64 and aarch64 in one go (explicit version passed; no --buildfrom)
./package-rhel.sh "${{ github.event.inputs.release_tag }}" --arch all
dnf -y makecache
dnf -y install epel-release
dnf -y install sudo git rpm-build rpmdevtools dnf-plugins-core rsync findutils tar gzip unzip which
- name: Checkout repo (for scripts)
uses: actions/checkout@v5.0.0
with:
submodules: 'recursive'
fetch-depth: '0'
- name: Restore build artifacts
uses: actions/download-artifact@v4
with:
name: v2rayN-linux
path: ${{ github.workspace }}/v2rayN/Release
- name: Ensure script permissions
run: chmod 755 package-rhel.sh
- name: Package RPM (RHEL-family)
run: ./package-rhel.sh "${RELEASE_TAG}" --arch all
- name: Collect RPMs into workspace
if: github.event.inputs.release_tag != ''
run: |
mkdir -p "${{ github.workspace }}/dist/rpm"
rsync -av "$HOME/rpmbuild/RPMS/" "${{ github.workspace }}/dist/rpm/"
# Rename to requested filenames
find "${{ github.workspace }}/dist/rpm" -name "v2rayN-*-1.x86_64.rpm" -exec mv {} "${{ github.workspace }}/dist/rpm/v2rayN-linux-rhel-x64.rpm" \; || true
find "${{ github.workspace }}/dist/rpm" -name "v2rayN-*-1.aarch64.rpm" -exec mv {} "${{ github.workspace }}/dist/rpm/v2rayN-linux-rhel-arm64.rpm" \; || true
mkdir -p "$GITHUB_WORKSPACE/dist/rpm"
rsync -av "$HOME/rpmbuild/RPMS/" "$GITHUB_WORKSPACE/dist/rpm/" || true
find "$GITHUB_WORKSPACE/dist/rpm" -name "v2rayN-*-1*.x86_64.rpm" -exec mv {} "$GITHUB_WORKSPACE/dist/rpm/v2rayN-linux-rhel-64.rpm" \; || true
find "$GITHUB_WORKSPACE/dist/rpm" -name "v2rayN-*-1*.aarch64.rpm" -exec mv {} "$GITHUB_WORKSPACE/dist/rpm/v2rayN-linux-rhel-arm64.rpm" \; || true
echo "==== Dist tree ===="
ls -R "$GITHUB_WORKSPACE/dist/rpm" || true
- name: Upload RPM artifacts
if: github.event.inputs.release_tag != ''
uses: actions/upload-artifact@v5.0.0
with:
name: v2rayN-rpm
path: |
${{ github.workspace }}/dist/rpm/**/*.rpm
path: dist/rpm/**/*.rpm
- name: Upload RPMs to release
uses: svenstaro/upload-release-action@v2
if: github.event.inputs.release_tag != ''
with:
file: ${{ github.workspace }}/dist/rpm/**/*.rpm
tag: ${{ github.event.inputs.release_tag }}
file: dist/rpm/**/*.rpm
tag: ${{ env.RELEASE_TAG }}
file_glob: true
prerelease: true

View File

@@ -19,6 +19,23 @@ else
exit 1
fi
# ======================== Kernel version check (require >= 6.11) =======================
MIN_KERNEL_MAJOR=6
MIN_KERNEL_MINOR=11
KERNEL_FULL=$(uname -r)
KERNEL_MAJOR=$(echo "$KERNEL_FULL" | cut -d. -f1)
KERNEL_MINOR=$(echo "$KERNEL_FULL" | cut -d. -f2)
echo "[INFO] Detected kernel version: $KERNEL_FULL"
if (( KERNEL_MAJOR < MIN_KERNEL_MAJOR )) || { (( KERNEL_MAJOR == MIN_KERNEL_MAJOR )) && (( KERNEL_MINOR < MIN_KERNEL_MINOR )); }; then
echo "[ERROR] Kernel $KERNEL_FULL is too old. Requires Linux >= ${MIN_KERNEL_MAJOR}.${MIN_KERNEL_MINOR}."
echo "Please upgrade your system or use a newer container (e.g. Fedora 42+, RHEL 10+, Debian 13+)."
exit 1
fi
echo "[OK] Kernel version >= ${MIN_KERNEL_MAJOR}.${MIN_KERNEL_MINOR}."
# ===== Config & Parse arguments =========================================================
VERSION_ARG="${1:-}" # Pass version number like 7.13.8, or leave empty
WITH_CORE="both" # Default: bundle both xray+sing-box

View File

@@ -35,9 +35,13 @@ public class JsonUtils
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static T DeepCopy<T>(T obj)
public static T? DeepCopy<T>(T? obj)
{
return Deserialize<T>(Serialize(obj, false))!;
if (obj is null)
{
return default;
}
return Deserialize<T>(Serialize(obj, false));
}
/// <summary>
@@ -67,7 +71,7 @@ public class JsonUtils
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
public static JsonNode? ParseJson(string strJson)
public static JsonNode? ParseJson(string? strJson)
{
try
{
@@ -116,7 +120,7 @@ public class JsonUtils
/// <param name="obj"></param>
/// <param name="options"></param>
/// <returns></returns>
public static string Serialize(object? obj, JsonSerializerOptions options)
public static string Serialize(object? obj, JsonSerializerOptions? options)
{
var result = string.Empty;
try
@@ -125,7 +129,7 @@ public class JsonUtils
{
return result;
}
result = JsonSerializer.Serialize(obj, options);
result = JsonSerializer.Serialize(obj, options ?? _defaultSerializeOptions);
}
catch (Exception ex)
{

View File

@@ -963,13 +963,13 @@ public class Utils
#region Platform
public static bool IsWindows() => RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
public static bool IsWindows() => OperatingSystem.IsWindows();
public static bool IsLinux() => RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
public static bool IsLinux() => OperatingSystem.IsLinux();
public static bool IsOSX() => RuntimeInformation.IsOSPlatform(OSPlatform.OSX);
public static bool IsOSX() => OperatingSystem.IsMacOS();
public static bool IsNonWindows() => !RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
public static bool IsNonWindows() => !OperatingSystem.IsWindows();
public static string GetExeName(string name)
{

View File

@@ -472,7 +472,7 @@
<value>Langue (redémarrage requis)</value>
</data>
<data name="menuAddServerViaClipboard" xml:space="preserve">
<value>Importer des liens depuis le presse-papiers (Ctrl+V)</value>
<value>Importer liens depuis le presse-papiers (Ctrl+V)</value>
</data>
<data name="menuAddServerViaScan" xml:space="preserve">
<value>Scanner le QR code à lécran (Ctrl+S)</value>
@@ -619,7 +619,7 @@
<value>Sécurité couche transport (TLS)</value>
</data>
<data name="TipNetwork" xml:space="preserve">
<value>*tcp par défaut ; un mauvais choix empêchera la connexion</value>
<value>*tcp par défaut ; un mauvais choix bloque la connexion</value>
</data>
<data name="TbCoreType" xml:space="preserve">
<value>Type de Core</value>
@@ -652,7 +652,7 @@
<value>Port Socks</value>
</data>
<data name="TipPreSocksPort" xml:space="preserve">
<value>*Valeur du port Socks pour la configuration personnalisée (facultatif). Si défini, Xray/sing-box (Tun) démarrera un service Socks en amont supplémentaire pour fournir le routage sélectif et laffichage de la vitesse.</value>
<value>*Valeur du port Socks (config perso, optionnelle). Si défini, Xray/sing-box (Tun) démarre un service Socks en amont supplémentaire pour fournir le routage sélectif et laffichage de la vitesse.</value>
</data>
<data name="TbBrowse" xml:space="preserve">
<value>Parcourir</value>
@@ -670,7 +670,7 @@
<value>Masquer la fenêtre au démarrage</value>
</data>
<data name="TbSettingsAutoUpdateInterval" xml:space="preserve">
<value>Intervalle de mise à jour automatique des fichiers Geo (heures)</value>
<value>Intervalle de mise à jour auto des fichiers Geo (heures)</value>
</data>
<data name="TbSettingsCore" xml:space="preserve">
<value>Core : paramètres de base</value>
@@ -691,7 +691,7 @@
<value>domainStrategy de Freedom (sortant)</value>
</data>
<data name="TbSettingsEnableAutoAdjustMainLvColWidth" xml:space="preserve">
<value>Auto-ajuster la largeur des colonnes après maj. des abonnements</value>
<value>Auto-ajuster la largeur des colonnes après maj. abonnements</value>
</data>
<data name="TbSettingsEnableCheckPreReleaseUpdate" xml:space="preserve">
<value>Vérifier les mises à jour pré-version (à activer avec prudence)</value>
@@ -724,7 +724,7 @@
<value>Mot de passe dauthentification</value>
</data>
<data name="TbSettingsRemoteDNS" xml:space="preserve">
<value>DNS personnalisés (plusieurs possibles, séparés par des virgules)</value>
<value>DNS perso (plusieurs configurables, séparés par virgules)</value>
</data>
<data name="TbSettingsSetUWP" xml:space="preserve">
<value>Lever la restriction de proxy en boucle locale pour les applications Win10 UWP</value>
@@ -865,7 +865,7 @@
<value>Documentation détaillée des règles</value>
</data>
<data name="TbDnsObjectDoc" xml:space="preserve">
<value>Saisie de DnsObject prise en charge (format JSON), cliquer pour voir la documentation</value>
<value>Saisie DnsObject prise en charge (format JSON), cliquer pour doc</value>
</data>
<data name="SubUrlTips" xml:space="preserve">
<value>Laissez vide pour les groupes ordinaires</value>
@@ -898,7 +898,7 @@
<value>Filtrage par alias (regex)</value>
</data>
<data name="TbDisplayLog" xml:space="preserve">
<value>Afficher les journaux</value>
<value>Afficher les logs</value>
</data>
<data name="TbEnableTunAs" xml:space="preserve">
<value>Activer Tun</value>
@@ -979,7 +979,7 @@
<value>En attente du test (appuyer sur Échap pour arrêter)...</value>
</data>
<data name="TipDisplayLog" xml:space="preserve">
<value>Désactivez ceci en cas de coupures anormales</value>
<value>Désactiver cette option si coupure anormale</value>
</data>
<data name="MsgSkipSubscriptionUpdate" xml:space="preserve">
<value>Mise à jour désactivée, abonnement ignoré</value>
@@ -1009,10 +1009,10 @@
<value>DNS personnalisé sing-box</value>
</data>
<data name="TbDnsSingboxObjectDoc" xml:space="preserve">
<value>Veuillez renseigner la structure JSON DNS ; cliquer pour voir la documentation</value>
<value>Saisissez la structure JSON DNS ; cliquez pour voir la doc.</value>
</data>
<data name="TbSettingDnsImportDefConfig" xml:space="preserve">
<value>Cliquez pour importer la configuration DNS par défaut</value>
<value>Cliquez pour importer la config DNS par défaut</value>
</data>
<data name="TbdomainStrategy4Singbox" xml:space="preserve">
<value>Stratégie résolution domaine (sing-box)</value>
@@ -1045,10 +1045,10 @@
<value>Algo contrôle congestion</value>
</data>
<data name="LvPrevProfile" xml:space="preserve">
<value>Alias de configuration du proxy amont</value>
<value>Alias de config du proxy amont</value>
</data>
<data name="LvNextProfile" xml:space="preserve">
<value>Alias de configuration du proxy aval</value>
<value>Alias de config du proxy aval</value>
</data>
<data name="LvPrevProfileTip" xml:space="preserve">
<value>Assurez-vous que lalias config existe et est unique</value>
@@ -1114,7 +1114,7 @@
<value>Activer le fragmentation (Fragment)</value>
</data>
<data name="TbSettingsEnableCacheFile4Sbox" xml:space="preserve">
<value>Activer le fichier de cache de sing-box (fichiers de reˋgles)</value>
<value>Activer le fichier de cache de sing-box (fichiers gles)</value>
</data>
<data name="LvCustomRulesetPath4Singbox" xml:space="preserve">
<value>Set de règles sing-box perso</value>
@@ -1207,7 +1207,7 @@
<value>Stratégie de résolution par défaut des sortants</value>
</data>
<data name="TbSettingsMainGirdOrientation" xml:space="preserve">
<value>Orientation de la mise en page principale (redémarrage requis)</value>
<value>Orientation mise en page principale (redémarrage requis)</value>
</data>
<data name="TbSettingsDomainDNSAddress" xml:space="preserve">
<value>Adresse de résolution de domaine pour sortants</value>
@@ -1330,7 +1330,7 @@
<value>JSON brut XHTTP Extra, format : { XHTTPObject }</value>
</data>
<data name="TbSettingsHide2TrayWhenClose" xml:space="preserve">
<value>Masquer dans la barre détat lors de la fermeture de la fenêtre</value>
<value>Masquer dans la barre détat à la fermeture de la fenêtre</value>
</data>
<data name="TbSettingsMixedConcurrencyCount" xml:space="preserve">
<value>Niveau de concurrence lors des tests multithread</value>
@@ -1351,7 +1351,7 @@
<value>Thème</value>
</data>
<data name="menuCopyProxyCmdToClipboard" xml:space="preserve">
<value>Copier la commande proxy terminal vers le presse-papiers</value>
<value>Copier la cmd proxy terminal dans le presse-papiers</value>
</data>
<data name="SpeedtestingTestFailedPart" xml:space="preserve">
<value>Recommencer le test des éléments échoués, {0} restants. Appuyez sur Échap pour arrêter...</value>
@@ -1369,7 +1369,7 @@
<value>Plage de ports sautés</value>
</data>
<data name="TbPorts7Tips" xml:space="preserve">
<value>Écrase le port ; pour plusieurs groupes, séparez par des virgules (,)</value>
<value>Écrase le port ; pour plusieurs groupes, séparer par virgules (,)</value>
</data>
<data name="menuGenGroupMultipleServer" xml:space="preserve">
<value>Générer un groupe de stratégie depuis plusieurs profils</value>
@@ -1447,7 +1447,7 @@
<value>Valider les IP des domaines de la région concernée</value>
</data>
<data name="TbValidateDirectExpectedIPsDesc" xml:space="preserve">
<value>Après configuration, les IP renvoyées pour les domaines régionaux (p. ex. geosite:cn) seront validées ; seules les IP attendues seront retournées</value>
<value>Après config, les IP renvoyées des domaines régionaux (ex. geosite:cn) seront vérifiées ; seules les IP attendues seront retournées.</value>
</data>
<data name="TbCustomDNSEnable" xml:space="preserve">
<value>Activer le DNS personnalisé</value>
@@ -1471,7 +1471,7 @@
<value>Modèle de configuration complet v2ray</value>
</data>
<data name="TbRayFullConfigTemplateDesc" xml:space="preserve">
<value>Ajoute seulement la configuration sortante, routing.balancers et routing.rules.outboundTag. Voir la documentation.</value>
<value>Ajoute seulement la config sortante, routing.balancers et routing.rules.outboundTag. Voir la doc.</value>
</data>
<data name="TbAddProxyProtocolOutboundOnly" xml:space="preserve">
<value>Najoutez pas de sorties pour protocoles non-proxy.</value>
@@ -1492,10 +1492,10 @@
<value>Début de lanalyse et du traitement du contenu dabonnement</value>
</data>
<data name="TbSelectProfile" xml:space="preserve">
<value>Sélectionner une configuration</value>
<value>Choisir une config.</value>
</data>
<data name="TbFakeIPTips" xml:space="preserve">
<value>Actif globalement par défaut, avec filtrage FakeIP intégré ; ne fonctionne que dans sing-box</value>
<value>Actif globalement par défaut, avec filtre FakeIP intégré ; ne fonctionne que dans sing-box</value>
</data>
<data name="PleaseAddAtLeastOneServer" xml:space="preserve">
<value>Veuillez ajouter au moins une configuration</value>

View File

@@ -10,15 +10,17 @@ public partial class App : Application
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
DataContext = StatusBarViewModel.Instance;
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
AppManager.Instance.InitComponents();
if (!Design.IsDesignMode)
{
AppManager.Instance.InitComponents();
DataContext = StatusBarViewModel.Instance;
}
desktop.Exit += OnExit;
desktop.MainWindow = new MainWindow();

View File

@@ -54,12 +54,19 @@ internal class Program
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()
{
return AppBuilder.Configure<App>()
.UsePlatformDetect()
//.WithInterFont()
.WithFontByDefault()
.LogToTrace()
.UseReactiveUI()
.With(new MacOSPlatformOptions { ShowInDock = AppManager.Instance.Config.UiItem.MacOSShowInDock });
var builder = AppBuilder.Configure<App>()
.UsePlatformDetect()
//.WithInterFont()
.WithFontByDefault()
.LogToTrace()
.UseReactiveUI();
if (OperatingSystem.IsMacOS())
{
var showInDock = Design.IsDesignMode || AppManager.Instance.Config.UiItem.MacOSShowInDock;
builder = builder.With(new MacOSPlatformOptions { ShowInDock = showInDock });
}
return builder;
}
}