@@ -20,6 +20,31 @@ lazy_static! {
20
20
static ref SOCKET_DESC_INDEX : AtomicUsize = AtomicUsize :: new( 0 ) ;
21
21
}
22
22
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
+
23
48
ffi ! {
24
49
fn create_peer_manager(
25
50
seed_ptr: Ref <u8 >,
@@ -100,29 +125,27 @@ ffi! {
100
125
}
101
126
102
127
fn new_inbound_connection(
128
+ index: usize ,
103
129
send_data_ptr: Ref <socket_descriptor_fn:: SendData >,
104
130
disconnect_socket_ptr: Ref <socket_descriptor_fn:: DisconnectSocket >,
105
131
handle: FFIArcPeerManagerHandle
106
132
) -> FFIResult {
107
133
let send_data_ref = unsafe_block!( "" => send_data_ptr. as_ref( ) ) ;
108
134
let disconnect_socket_ref = unsafe_block!( "" => disconnect_socket_ptr. as_ref( ) ) ;
109
- let index = SOCKET_DESC_INDEX . fetch_add( 1 , Ordering :: SeqCst ) ;
110
135
let socket = FFISocketDescriptor { index, send_data_ptr: * send_data_ref, disconnect_socket_ptr: * disconnect_socket_ref } ;
111
136
let peer_man: & FFISimpleArcPeerManager = unsafe_block!( "We know handle points to valid PeerManager" => handle. as_ref( ) ) ;
112
137
peer_man. new_inbound_connection( socket) ?;
113
138
FFIResult :: ok( )
114
139
}
115
140
116
141
fn new_outbound_connection(
142
+ index: usize ,
117
143
send_data_ptr: Ref <socket_descriptor_fn:: SendData >,
118
144
disconnect_socket_ptr: Ref <socket_descriptor_fn:: DisconnectSocket >,
119
145
their_node_id: Ref <PublicKey >,
120
146
handle: FFIArcPeerManagerHandle
121
147
) -> 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) ;
126
149
let peer_man: & FFISimpleArcPeerManager = unsafe_block!( "We know handle points to valid PeerManager" => handle. as_ref( ) ) ;
127
150
let their_node_id: & PublicKey = unsafe_block!( "" => their_node_id. as_ref( ) ) ;
128
151
let their_node_id: secp256k1:: PublicKey = their_node_id. deep_copy( ) . try_into( ) ?;
@@ -136,6 +159,18 @@ ffi! {
136
159
FFIResult :: ok( )
137
160
}
138
161
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
+
139
174
fn release_peer_manager( handle: FFIArcPeerManagerHandle ) -> FFIResult {
140
175
unsafe_block!( "The upstream caller guarantees the handle will not be accessed after being freed" => FFIArcPeerManagerHandle :: dealloc( handle, |mut handle| {
141
176
FFIResult :: ok( )
0 commit comments