Skip to content

Commit df2f137

Browse files
committed
chore: fix socket_addr
1 parent e8b4c06 commit df2f137

File tree

2 files changed

+23
-34
lines changed

2 files changed

+23
-34
lines changed

dash-spv-apple-bindings/src/custom/std.rs

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use ferment::{boxed, from_primitive_group, FFIConversionFrom, FFIConversionTo};
1+
use std::net::{Ipv4Addr, Ipv6Addr};
2+
use ferment::{boxed, FFIConversionDestroy, FFIConversionFrom, FFIConversionTo};
23
use crate::fermented::generics::{Arr_u8_16, Arr_u8_4};
34

45
#[allow(non_camel_case_types)]
@@ -8,61 +9,49 @@ pub enum SocketAddr {
89
V4 { ip: *mut Arr_u8_4, port: u16 },
910
V6 { ip: *mut Arr_u8_16, port: u16, flowinfo: u32, scope_id: u32 },
1011
}
11-
impl FFIConversionFrom<std::net::Ipv4Addr> for Arr_u8_4 {
12-
unsafe fn ffi_from_const(ffi: *const Self) -> std::net::Ipv4Addr {
13-
let octets: [u8; 4] = FFIConversionFrom::ffi_from_const(ffi);
14-
std::net::Ipv4Addr::from(octets)
15-
}
16-
}
17-
impl FFIConversionTo<std::net::Ipv4Addr> for Arr_u8_4 {
18-
unsafe fn ffi_to_const(obj: std::net::Ipv4Addr) -> *const Self {
19-
FFIConversionTo::ffi_to_const(obj.octets())
20-
}
21-
}
22-
impl FFIConversionFrom<std::net::Ipv6Addr> for Arr_u8_16 {
23-
unsafe fn ffi_from_const(ffi: *const Self) -> std::net::Ipv6Addr {
24-
let octets: [u8; 16] = FFIConversionFrom::ffi_from_const(ffi);
25-
std::net::Ipv6Addr::from(octets)
26-
}
27-
}
28-
impl FFIConversionTo<std::net::Ipv6Addr> for Arr_u8_16 {
29-
unsafe fn ffi_to_const(obj: std::net::Ipv6Addr) -> *const Self {
30-
FFIConversionTo::ffi_to_const(obj.octets())
31-
}
32-
}
3312

3413
impl FFIConversionFrom<std::net::SocketAddr> for SocketAddr {
3514
unsafe fn ffi_from_const(ffi: *const Self) -> std::net::SocketAddr {
3615
let ffi = &*ffi;
3716
match ffi {
38-
Self::V4 { ip, port } =>
39-
std::net::SocketAddr::V4(std::net::SocketAddrV4::new(FFIConversionFrom::ffi_from(*ip), *port)),
40-
Self::V6 { ip, port, flowinfo, scope_id } =>
41-
std::net::SocketAddr::V6(std::net::SocketAddrV6::new(FFIConversionFrom::ffi_from(*ip), *port, *flowinfo, *scope_id))
17+
Self::V4 { ip, port } => {
18+
let octets = FFIConversionFrom::<[u8; 4]>::ffi_from_const(*ip);
19+
std::net::SocketAddr::V4(std::net::SocketAddrV4::new(Ipv4Addr::from(octets), *port))
20+
},
21+
Self::V6 { ip, port, flowinfo, scope_id } => {
22+
let octets = FFIConversionFrom::<[u8; 16]>::ffi_from_const(*ip);
23+
std::net::SocketAddr::V6(std::net::SocketAddrV6::new(Ipv6Addr::from(octets), *port, *flowinfo, *scope_id))
24+
}
4225
}
4326
}
4427
}
4528

4629
impl FFIConversionTo<std::net::SocketAddr> for SocketAddr {
4730
unsafe fn ffi_to_const(obj: std::net::SocketAddr) -> *const Self {
4831
boxed(match obj {
49-
std::net::SocketAddr::V4(addr) =>
50-
Self::V4 { ip: FFIConversionTo::ffi_to(addr.ip().octets()), port: addr.port() },
51-
std::net::SocketAddr::V6(addr) =>
52-
Self::V6 { ip: FFIConversionTo::ffi_to(addr.ip().octets()), port: addr.port(), flowinfo: addr.flowinfo(), scope_id: addr.scope_id() }
32+
std::net::SocketAddr::V4(addr) => {
33+
let octets = addr.ip().octets();
34+
Self::V4 { ip: FFIConversionTo::ffi_to(octets), port: addr.port() }
35+
},
36+
std::net::SocketAddr::V6(addr) => {
37+
let octets = addr.ip().octets();
38+
Self::V6 { ip: FFIConversionTo::ffi_to(octets), port: addr.port(), flowinfo: addr.flowinfo(), scope_id: addr.scope_id() }
39+
}
5340
})
5441
}
5542
}
5643

44+
impl FFIConversionDestroy<std::net::SocketAddr> for SocketAddr {}
45+
5746
impl Drop for SocketAddr {
5847
fn drop(&mut self) {
5948
unsafe {
6049
match self {
6150
Self::V4 { ip, port } => {
62-
ferment::unbox_any(ip);
51+
ferment::unbox_any(*ip);
6352
}
6453
Self::V6 { ip, port, flowinfo, scope_id } => {
65-
ferment::unbox_any(ip);
54+
ferment::unbox_any(*ip);
6655
}
6756
}
6857
}

dash-spv-apple-bindings/src/fermented.rs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)