mirror of
https://github.com/lionsoul2014/ip2region.git
synced 2025-12-08 19:25:22 +00:00
Merge pull request #392 from gongzhengyang/master
Fix: rust bind return empty string for not found IP
This commit is contained in:
commit
08d3ef69b0
@ -120,21 +120,31 @@ $ cargo build -r
|
|||||||
```
|
```
|
||||||
构建的执行程序位置 `binding/rust/target/release/searcher`
|
构建的执行程序位置 `binding/rust/target/release/searcher`
|
||||||
|
|
||||||
|
测试 IPv6 以及 IPv4 需要结合 ipv6_source.txt 以及 ipv4_source.txt 的内容进行查询结果校验
|
||||||
|
|
||||||
|
**此处展示的查询结果只表示当前时间数据的查询,后续查询结果可能会由于 ip_source.txt 以及 xdb 二进制数据的 IP region 段更新修正导致不同**
|
||||||
|
|
||||||
#### 测试 IPv6
|
#### 测试 IPv6
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ cd binding/rust
|
$ cd binding/rust
|
||||||
$ cargo build -r
|
$ cargo build -r
|
||||||
$ ./target/release/searcher --xdb='../../data/ip2region_v6.xdb' query
|
$ ./target/release/searcher --xdb='../../data/ip2region_v6.xdb' query
|
||||||
|
|
||||||
ip2region xdb searcher test program, type `quit` or `Ctrl + c` to exit
|
ip2region xdb searcher test program, type `quit` or `Ctrl + c` to exit
|
||||||
ip2region>> 2001:5:4::
|
ip2region>> 2001:5:4::
|
||||||
region: Ok("荷兰|北荷兰省|阿姆斯特丹|专线用户"), took: 284.80775ms
|
region: Ok("0|0|内网IP|内网IP"), took: 16.941042ms
|
||||||
ip2region>> 2001::
|
ip2region>> 2001::
|
||||||
region: Ok("美国|加利福尼亚州|洛杉矶|专线用户"), took: 12.75µs
|
region: Ok("日本|东京都|千代田区|专线用户"), took: 231.75µs
|
||||||
ip2region>> 2001:5:6::
|
ip2region>> 2001:268:989e::1
|
||||||
region: Ok("荷兰|北荷兰省|阿姆斯特丹|专线用户"), took: 52.958µs
|
region: Ok("日本|东京都||移动网络"), took: 12.167µs
|
||||||
ip2region>> 2001:5:5::
|
ip2region>> 2001:268:9a02:8888::
|
||||||
region: Ok("比利时|弗拉芒大区|泽勒|专线用户"), took: 123.375µs
|
region: Ok("日本|静冈县|菊川市|移动网络"), took: 107.834µs
|
||||||
|
ip2region>> 2001:268:9b87:5f00::
|
||||||
|
region: Ok("日本|爱知县|高滨市|移动网络"), took: 812.625µs
|
||||||
|
ip2region>> 2a02:26f7:b408:a6c2::
|
||||||
|
region: Ok("美国|弗吉尼亚州|恩波里亚|数据中心"), took: 132.333µs
|
||||||
|
ip2region>> 2c99::
|
||||||
|
region: Ok("0|0|内网IP|内网IP"), took: 861.25µs
|
||||||
ip2region>>
|
ip2region>>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -81,7 +81,10 @@ impl Searcher {
|
|||||||
let offset = start_ptr + mid * segment_index_size;
|
let offset = start_ptr + mid * segment_index_size;
|
||||||
let buffer_ip_value = self.read_buf(offset, segment_index_size)?;
|
let buffer_ip_value = self.read_buf(offset, segment_index_size)?;
|
||||||
if ip.ip_lt(Cow::Borrowed(&buffer_ip_value[0..ip_bytes_len])) {
|
if ip.ip_lt(Cow::Borrowed(&buffer_ip_value[0..ip_bytes_len])) {
|
||||||
right = mid - 1;
|
let Some(m) = mid.checked_sub(1) else {
|
||||||
|
break
|
||||||
|
};
|
||||||
|
right = m;
|
||||||
} else if ip.ip_gt(Cow::Borrowed(&buffer_ip_value[ip_bytes_len..ip_end_offset])) {
|
} else if ip.ip_gt(Cow::Borrowed(&buffer_ip_value[ip_bytes_len..ip_end_offset])) {
|
||||||
left = mid + 1;
|
left = mid + 1;
|
||||||
} else {
|
} else {
|
||||||
@ -99,7 +102,11 @@ impl Searcher {
|
|||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(Ip2RegionError::NoMatchedIP)
|
// From xdb 3.0 version no matched IP result change to empty string,
|
||||||
|
// so users should check string is empty.
|
||||||
|
//
|
||||||
|
// Err(Ip2RegionError::NoMatchedIP)
|
||||||
|
Ok(String::new())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn vector_index(&self) -> Result<Cow<'_, [u8]>> {
|
pub fn vector_index(&self) -> Result<Cow<'_, [u8]>> {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user