Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions dist/index.html

This file was deleted.

10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@
"tauri:build": "npm run prepare:resources && tauri build"
},
"dependencies": {
"@tauri-apps/api": "^2.0.0",
"@tauri-apps/api": "^2.1.1",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"devDependencies": {
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.1",
"typescript": "^5.6.3",
"vite": "^5.4.10",
"@tauri-apps/cli": "^2.0.0"
"@vitejs/plugin-react": "^4.3.4",
"typescript": "^5.7.2",
"vite": "^5.4.11",
"@tauri-apps/cli": "^2.1.0"
}
}
14 changes: 7 additions & 7 deletions src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,25 @@ version = "1.0.1"
edition = "2021"

[build-dependencies]
tauri-build = { version = "2.6.2", features = [] }
tauri-build = { version = "2", features = [] }

[dependencies]
tauri = { version = "2.11.2", features = ["tray-icon"] }
tauri = { version = "2", features = ["tray-icon"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
keyring = "3.6"
keyring = "3"
tokio = { version = "1", features = ["full"] }
base64 = "0.21"
base64 = "0.22"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
parking_lot = "0.12"
once_cell = "1"
chrono = { version = "0.4", features = ["serde"] }
sysinfo = "0.32"
thiserror = "1"
sysinfo = "0.33"
thiserror = "2"

[target.'cfg(target_os = "windows")'.dependencies]
windows = { version = "0.52", features = [
windows = { version = "0.58", features = [
"Win32_Foundation",
"Win32_NetworkManagement_IpHelper",
"Win32_NetworkManagement_Ndis",
Expand Down
26 changes: 15 additions & 11 deletions src-tauri/src/wireguard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ use windows::Win32::Foundation::{FreeLibrary, BOOL, HANDLE, HMODULE};
use windows::Win32::System::LibraryLoader::{GetProcAddress, LoadLibraryW};

#[cfg(target_os = "windows")]
// ИСПРАВЛЕНО: Правильная сигнатура WireGuardCreateAdapter
type WireGuardCreateAdapterFunc =
unsafe extern "system" fn(flags: u32, adapter_name: PCWSTR, tunnel_name: PCWSTR) -> HANDLE;
unsafe extern "system" fn(adapter_name: PCWSTR, tunnel_name: PCWSTR, reserved: *const std::ffi::c_void) -> HANDLE;

#[cfg(target_os = "windows")]
type WireGuardSetConfigurationFunc = unsafe extern "system" fn(
Expand All @@ -37,7 +38,8 @@ type WireGuardGetConfigurationFunc = unsafe extern "system" fn(
) -> BOOL;

#[cfg(target_os = "windows")]
type WireGuardDeleteAdapterFunc = unsafe extern "system" fn(adapter: HANDLE, adapter_name: PCWSTR);
// ИСПРАВЛЕНО: Правильная сигнатура WireGuardDeleteAdapter (только HANDLE)
type WireGuardDeleteAdapterFunc = unsafe extern "system" fn(adapter: HANDLE);

fn get_dll_path(dll_name: &str) -> PathBuf {
let exe = std::env::current_exe().unwrap_or_else(|_| PathBuf::from("."));
Expand Down Expand Up @@ -144,13 +146,13 @@ impl WireGuardTunnel {
unsafe {
std::mem::transmute::<
unsafe extern "system" fn() -> isize,
unsafe extern "system" fn(u32, PCWSTR, PCWSTR) -> HANDLE,
WireGuardCreateAdapterFunc,
>(create_proc)
},
unsafe {
std::mem::transmute::<
unsafe extern "system" fn() -> isize,
unsafe extern "system" fn(HANDLE, PCWSTR),
WireGuardDeleteAdapterFunc,
>(delete_proc)
},
unsafe {
Expand Down Expand Up @@ -222,7 +224,9 @@ impl WireGuardTunnel {
fn connect_impl(&mut self) -> Result<(), String> {
let tunnel_wide = wide_str(&self.adapter_name);
let tunnel_name = PCWSTR(tunnel_wide.as_ptr());
let handle = unsafe { (self.fn_create)(0, tunnel_name, tunnel_name) };

// ИСПРАВЛЕНО: Передаем имя адаптера, имя туннеля и null для reserved
let handle = unsafe { (self.fn_create)(tunnel_name, tunnel_name, std::ptr::null()) };

if handle.0 == 0 {
return Err("failed to create WireGuard adapter".to_string());
Expand All @@ -232,9 +236,7 @@ impl WireGuardTunnel {

let config_blob = serialize_config(&self.config)
.map_err(|e| format!("failed to serialize config: {e}"))?;
// WireGuard-NT ABI: WireGuardSetConfiguration returns BOOL (non-zero = success, 0 = failure).
// Previously typed as NTSTATUS which inverted the check: a successful call (BOOL TRUE = 1)
// was treated as NTSTATUS error, causing connect() to always abort on Windows.

let ok = unsafe {
(self.fn_set_cfg)(
handle,
Expand Down Expand Up @@ -324,9 +326,9 @@ impl WireGuardTunnel {
return Ok(());
};

let tunnel_wide = wide_str(&self.adapter_name);
// ИСПРАВЛЕНО: Передаем только handle
unsafe {
(self.fn_delete)(handle, PCWSTR(tunnel_wide.as_ptr()));
(self.fn_delete)(handle);
let _ = windows::Win32::Foundation::CloseHandle(handle);
}
Ok(())
Expand All @@ -343,7 +345,6 @@ impl WireGuardTunnel {
}

let mut buffer = vec![0u8; buf_size as usize];
// WireGuard-NT ABI: WireGuardGetConfiguration returns BOOL.
let ok = unsafe { (self.fn_get_cfg)(handle, buffer.as_mut_ptr() as *mut _, &mut buf_size) };
if !ok.as_bool() {
return Ok((0, 0, 0));
Expand Down Expand Up @@ -376,6 +377,9 @@ fn wide_path(value: &std::path::Path) -> Vec<u16> {
#[cfg(target_os = "windows")]
impl Drop for WireGuardTunnel {
fn drop(&mut self) {
// ИСПРАВЛЕНО: Гарантированно удаляем адаптер перед уничтожением объекта
let _ = self.delete_adapter_handle();

// Free the DLL when tunnel is dropped
unsafe {
let _ = FreeLibrary(self.wg_lib);
Expand Down
Loading
Loading