pub mod utils;
#[cfg(all(target_os = "windows", feature = "game"))]
pub mod game;
#[cfg(all(target_os = "windows", feature = "elevated"))]
pub mod elevated;
#[cfg(all(target_os = "windows", feature = "port_forwarding"))]
pub mod port_forwarding;
#[cfg(all(target_os = "windows", feature = "registry"))]
pub mod registry;
#[cfg(all(feature = "vdf"))]
pub mod vdf;
#[cfg(all(feature = "steam"))]
pub mod steam;
#[cfg(all(test, target_os = "windows", feature = "port_forwarding"))]
mod tests_port_forwarding {
use crate::port_forwarding::PortForwarding;
use crate::utils::{check_ipv4_by_string, run_multiple_commands, Println};
#[test]
fn list_port_proxy() {
let p = PortForwarding::get_ipv4_to_ipv4();
println!("ipv4_to_ipv4 {:?}", p);
}
#[test]
fn port_forwarding_roundtrip() {
assert!(check_ipv4_by_string("127.0.0.1"));
assert!(!check_ipv4_by_string("asef.asef.0.1"));
assert!(!check_ipv4_by_string("12.0.0"));
PortForwarding::reset();
let item = PortForwarding::new(
("127.0.0.1".to_string(), 100),
("127.0.0.1".to_string(), 666),
);
item.forward();
let p = PortForwarding::get_ipv4_to_ipv4();
println!("ipv4_to_ipv4 {:?}", p);
println!("item.check {}", item.check());
}
#[test]
fn multiple_cmd() {
let vl = vec![
"netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=100 connectaddress=127.0.0.1 connectport=100",
"netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=100 connectaddress=127.0.0.1 connectport=106",
"netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=100 connectaddress=127.0.0.1 connectport=108",
"netsh interface portproxy show v4tov4",
];
let out = run_multiple_commands(&vl, true, true);
out.print_ln()
}
}
#[cfg(all(test, target_os = "windows", feature = "elevated"))]
mod tests_elevated {
use crate::elevated::is_elevated;
#[test]
fn elevated_state() {
let _ = is_elevated();
}
}
#[cfg(all(test, target_os = "windows", feature = "registry"))]
mod tests_registry {
use crate::registry::backups::{backups_explorer_registry, check_backups_explorer_registry};
#[test]
fn explorer_registry_backup() {
assert!(backups_explorer_registry("mx_tools"));
assert!(check_backups_explorer_registry("mx_tools"));
}
}
#[cfg(all(test, target_os = "windows", feature = "steam"))]
mod tests_steam {
use crate::steam::get_steam_game_language;
use crate::steam::user::{get_steam_users, get_steam_users_id};
#[test]
fn steam_users_and_language() {
let users = get_steam_users_id();
println!("all steam users id {:?}", users);
if let Ok(users) = users {
for user in users {
let ui = user.parse::<usize>().unwrap();
let a = get_steam_game_language(ui, 1172470);
println!("language {:#?}", a);
}
}
println!("get_steam_users {:?}", get_steam_users());
}
}
#[cfg(all(test, target_os = "windows"))]
mod tests_hex_sample {
#[test]
fn decode_userconfig_hex_sample() {
let hex_string = "0055736572436f6e66696700016c616e677561676500736368696e657365000808";
let bytes = hex::decode(hex_string).unwrap();
println!("原始字节: {:?}", bytes);
let parts: Vec<&[u8]> = bytes.split(|&b| b == 0x00).collect();
for (i, part) in parts.iter().enumerate() {
if !part.is_empty() {
match std::str::from_utf8(part) {
Ok(s) => println!("部分 {}: '{}'", i, s),
Err(_) => println!("部分 {}: 非UTF8数据: {:?}", i, part),
}
}
}
let decoded = unsafe { String::from_utf8_unchecked(bytes) };
println!("\n整体转换: {}", decoded);
println!("encode\t{}", hex::encode(decoded));
}
}