Skip to content

Commit f6a8345

Browse files
committed
add deep_copy method to array_struct
1 parent 00e6b09 commit f6a8345

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

bindings/src/adaptors/primitives.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ macro_rules! array_struct{
2828
unsafe_impl!("Simulate `Unique<T>`" => impl<'a> Sync for $name<'a> where $ty: Sync{});
2929
impl<'a> $name<'a> {
3030
fn new(ptr: *const $ty, len: usize) -> Self { $name{ ptr: ptr, len: len, _marker: std::marker::PhantomData } }
31+
pub fn deep_copy(&self) -> Self {
32+
let r = self.as_ref();
33+
let mut result = Vec::with_capacity(self.len);
34+
result.copy_from_slice(r);
35+
From::from(result.into_boxed_slice())
36+
}
3137
}
3238
impl<'a> From<&'a [$ty]> for $name<'a> {
3339
fn from(slice: &'a [$ty]) -> Self {
@@ -76,6 +82,7 @@ impl<'a> TryFrom<SecretKey<'a>> for secp256k1::SecretKey {
7682

7783
#[doc="The length must be [the same as a byte number of secp256k1 public key] `secp256k1::constants::PUBLIC_KEY_SIZE`"]
7884
array_struct!(PublicKey, u8);
85+
7986
impl<'a> TryFrom<PublicKey<'a>> for secp256k1::PublicKey {
8087
type Error = FFIResult;
8188

bindings/src/peermanager.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,6 @@ lazy_static! {
2020
static ref SOCKET_DESC_INDEX: AtomicUsize = AtomicUsize::new(0);
2121
}
2222

23-
fn new_outbound_connection(
24-
send_data_ptr: Ref<socket_descriptor_fn::SendData>,
25-
disconnect_socket_ptr: Ref<socket_descriptor_fn::DisconnectSocket>,
26-
theirNodeId: Ref<PublicKey>,
27-
handle: FFIArcPeerManagerHandle
28-
) -> FFIResult {
29-
let send_data_ref = unsafe_block!("" => send_data_ptr.as_ref());
30-
let disconnect_socket_ref = unsafe_block!("" => disconnect_socket_ptr.as_ref());
31-
let index = SOCKET_DESC_INDEX.fetch_add(1, Ordering::SeqCst);
32-
let socket = FFISocketDescriptor { index, send_data_ptr: *send_data_ref, disconnect_socket_ptr: *disconnect_socket_ref };
33-
let peer_man: &FFISimpleArcPeerManager = unsafe_block!("We know handle points to valid PeerManager" => handle.as_ref());
34-
let theirNodeId: &PublicKey = unsafe_block!("" => theirNodeId.as_ref());
35-
let theirNodeId: secp256k1::PublicKey = theirNodeId.clone().try_into()?;
36-
peer_man.new_outbound_connection(theirNodeId.clone(),socket)?;
37-
FFIResult::ok()
38-
}
39-
4023
ffi! {
4124
fn create_peer_manager(
4225
seed_ptr: Ref<u8>,
@@ -130,6 +113,23 @@ ffi! {
130113
FFIResult::ok()
131114
}
132115

116+
fn new_outbound_connection(
117+
send_data_ptr: Ref<socket_descriptor_fn::SendData>,
118+
disconnect_socket_ptr: Ref<socket_descriptor_fn::DisconnectSocket>,
119+
their_node_id: Ref<PublicKey>,
120+
handle: FFIArcPeerManagerHandle
121+
) -> FFIResult {
122+
let send_data_ref = unsafe_block!("" => send_data_ptr.as_ref());
123+
let disconnect_socket_ref = unsafe_block!("" => disconnect_socket_ptr.as_ref());
124+
let index = SOCKET_DESC_INDEX.fetch_add(1, Ordering::SeqCst);
125+
let socket = FFISocketDescriptor { index, send_data_ptr: *send_data_ref, disconnect_socket_ptr: *disconnect_socket_ref };
126+
let peer_man: &FFISimpleArcPeerManager = unsafe_block!("We know handle points to valid PeerManager" => handle.as_ref());
127+
let their_node_id: &PublicKey = unsafe_block!("" => their_node_id.as_ref());
128+
let their_node_id: secp256k1::PublicKey = their_node_id.deep_copy().try_into()?;
129+
peer_man.new_outbound_connection(their_node_id, socket)?;
130+
FFIResult::ok()
131+
}
132+
133133
fn timer_tick_occured(handle: FFIArcPeerManagerHandle) -> FFIResult {
134134
let peer_man: &FFISimpleArcPeerManager = unsafe_block!("We know handle points to valid PeerManager" => handle.as_ref());
135135
peer_man.timer_tick_occured();

0 commit comments

Comments
 (0)