@@ -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+
2348ffi ! {
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