Skip to content

Commit 2e580ae

Browse files
committed
update
1 parent f6a8345 commit 2e580ae

File tree

1 file changed

+40
-5
lines changed

1 file changed

+40
-5
lines changed

bindings/src/peermanager.rs

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

23+
fn construct_socket_desc (
24+
index: usize,
25+
send_data_ptr: Ref<socket_descriptor_fn::SendData>,
26+
disconnect_socket_ptr: Ref<socket_descriptor_fn::DisconnectSocket>,
27+
) -> FFISocketDescriptor {
28+
let send_data_ref = unsafe_block!("" => send_data_ptr.as_ref());
29+
let disconnect_socket_ref = unsafe_block!("" => disconnect_socket_ptr.as_ref());
30+
let socket = FFISocketDescriptor { index, send_data_ptr: *send_data_ref, disconnect_socket_ptr: *disconnect_socket_ref };
31+
socket
32+
}
33+
34+
fn read_event(
35+
index: usize,
36+
send_data_ptr: Ref<socket_descriptor_fn::SendData>,
37+
disconnect_socket_ptr: Ref<socket_descriptor_fn::DisconnectSocket>,
38+
data_ptr: Ref<FFIBytes>,
39+
handle: FFIArcPeerManagerHandle
40+
) -> FFIResult {
41+
let mut socket = construct_socket_desc(index, send_data_ptr, disconnect_socket_ptr);
42+
let peer_man: &FFISimpleArcPeerManager = unsafe_block!("We know handle points to valid PeerManager" => handle.as_ref());
43+
let data = unsafe_block!("We know it points to valid data" => data_ptr.as_ref());
44+
peer_man.read_event(&mut socket, data.as_ref());
45+
FFIResult::ok()
46+
}
47+
2348
ffi! {
2449
fn create_peer_manager(
2550
seed_ptr: Ref<u8>,
@@ -100,29 +125,27 @@ ffi! {
100125
}
101126

102127
fn new_inbound_connection(
128+
index: usize,
103129
send_data_ptr: Ref<socket_descriptor_fn::SendData>,
104130
disconnect_socket_ptr: Ref<socket_descriptor_fn::DisconnectSocket>,
105131
handle: FFIArcPeerManagerHandle
106132
) -> FFIResult {
107133
let send_data_ref = unsafe_block!("" => send_data_ptr.as_ref());
108134
let disconnect_socket_ref = unsafe_block!("" => disconnect_socket_ptr.as_ref());
109-
let index = SOCKET_DESC_INDEX.fetch_add(1, Ordering::SeqCst);
110135
let socket = FFISocketDescriptor { index, send_data_ptr: *send_data_ref, disconnect_socket_ptr: *disconnect_socket_ref };
111136
let peer_man: &FFISimpleArcPeerManager = unsafe_block!("We know handle points to valid PeerManager" => handle.as_ref());
112137
peer_man.new_inbound_connection(socket)?;
113138
FFIResult::ok()
114139
}
115140

116141
fn new_outbound_connection(
142+
index: usize,
117143
send_data_ptr: Ref<socket_descriptor_fn::SendData>,
118144
disconnect_socket_ptr: Ref<socket_descriptor_fn::DisconnectSocket>,
119145
their_node_id: Ref<PublicKey>,
120146
handle: FFIArcPeerManagerHandle
121147
) -> 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 };
148+
let socket = construct_socket_desc(index, send_data_ptr, disconnect_socket_ptr);
126149
let peer_man: &FFISimpleArcPeerManager = unsafe_block!("We know handle points to valid PeerManager" => handle.as_ref());
127150
let their_node_id: &PublicKey = unsafe_block!("" => their_node_id.as_ref());
128151
let their_node_id: secp256k1::PublicKey = their_node_id.deep_copy().try_into()?;
@@ -136,6 +159,18 @@ ffi! {
136159
FFIResult::ok()
137160
}
138161

162+
fn write_buffer_space_avail(
163+
index: usize,
164+
send_data_ptr: Ref<socket_descriptor_fn::SendData>,
165+
disconnect_socket_ptr: Ref<socket_descriptor_fn::DisconnectSocket>,
166+
handle: FFIArcPeerManagerHandle
167+
) -> FFIResult {
168+
let mut socket = construct_socket_desc(index, send_data_ptr, disconnect_socket_ptr);
169+
let peer_man: &FFISimpleArcPeerManager = unsafe_block!("We know handle points to valid PeerManager" => handle.as_ref());
170+
peer_man.write_buffer_space_avail(&mut socket)?;
171+
FFIResult::ok()
172+
}
173+
139174
fn release_peer_manager(handle: FFIArcPeerManagerHandle) -> FFIResult {
140175
unsafe_block!("The upstream caller guarantees the handle will not be accessed after being freed" => FFIArcPeerManagerHandle::dealloc(handle, |mut handle| {
141176
FFIResult::ok()

0 commit comments

Comments
 (0)