From 0352982c1405c6b6e387943aab84acfee1d9f2eb Mon Sep 17 00:00:00 2001 From: lubeilin <1791778603@qq.com> Date: Fri, 19 Apr 2024 18:35:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E8=B0=83=E5=A2=9E=E5=8A=A0=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/src/args_parse.rs | 4 ++-- vnt-jni/java/top/wherewego/vnt/jni/IpUtils.java | 13 +++++++++++++ vnt-jni/src/callback.rs | 12 ++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/common/src/args_parse.rs b/common/src/args_parse.rs index fc0f6ab..fe62350 100644 --- a/common/src/args_parse.rs +++ b/common/src/args_parse.rs @@ -68,10 +68,10 @@ pub fn out_ips_parse(ips: &Vec) -> Result, String> { pub fn to_ip(mask: &str) -> Result { if let Ok(m) = mask.parse::() { - if m >= 32 { + if m > 32 { return Err("not netmask".to_string()); } - let mut mask = 0 as u32; + let mut mask = 0u32; for i in 0..m { mask = mask | (1 << (31 - i)); } diff --git a/vnt-jni/java/top/wherewego/vnt/jni/IpUtils.java b/vnt-jni/java/top/wherewego/vnt/jni/IpUtils.java index 6a07746..607666f 100644 --- a/vnt-jni/java/top/wherewego/vnt/jni/IpUtils.java +++ b/vnt-jni/java/top/wherewego/vnt/jni/IpUtils.java @@ -6,6 +6,12 @@ package top.wherewego.vnt.jni; * @author https://github.com/lbl8603/vnt */ public class IpUtils { + /** + * 将整数的ip地址转成字符串,例如 0 转成 "0.0.0.0" + * + * @param ipAddress + * @return + */ public static String intToIpAddress(int ipAddress) { return ((ipAddress & 0xFF000000) >>> 24) + "." + @@ -13,6 +19,13 @@ public class IpUtils { ((ipAddress & 0x0000FF00) >>> 8) + "." + (ipAddress & 0x000000FF); } + + /** + * 返回掩码的长度 + * + * @param subnetMask + * @return + */ public static int subnetMaskToPrefixLength(int subnetMask) { int prefixLength = 0; int bit = 1 << 31; diff --git a/vnt-jni/src/callback.rs b/vnt-jni/src/callback.rs index b909646..f9f73ae 100644 --- a/vnt-jni/src/callback.rs +++ b/vnt-jni/src/callback.rs @@ -176,6 +176,17 @@ impl CallBack { fn generate_tun0(&self, info: DeviceConfig) -> jni::errors::Result { let mut env = self.jvm.attach_current_thread_as_daemon()?; let class = unsafe { JClass::from_raw(self.device_config_class.as_raw()) }; + + let object_array = env.new_object_array( + info.external_route.len() as _, + "java/lang/String", + JObject::null(), + )?; + for (index, (network, mask)) in info.external_route.into_iter().enumerate() { + let param = + env.new_string(format!("{}/{}", network, u32::from(mask).leading_ones()))?; + env.set_object_array_element(&object_array, index as _, ¶m)?; + } let param = env.new_object( class, "(IIII)V", @@ -184,6 +195,7 @@ impl CallBack { JValue::Int(Into::::into(info.virtual_netmask) as _), JValue::Int(Into::::into(info.virtual_gateway) as _), JValue::Int(Into::::into(info.virtual_network) as _), + JValue::Object(&object_array), ], )?; let rs = env.call_method(