@@ -83,7 +83,7 @@ impl P2pChannelsSignalingDiscoveryState {
8383 P2pChannelsSignalingDiscoveryAction :: DiscoveryRequestReceived { .. } => {
8484 let Self :: Ready { local, .. } = state else {
8585 bug_condition ! (
86- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
86+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveryRequestReceived `, state: {state:?}" ,
8787 ) ;
8888 return Ok ( ( ) ) ;
8989 } ;
@@ -92,7 +92,7 @@ impl P2pChannelsSignalingDiscoveryState {
9292
9393 let ( dispatcher, state) = state_context. into_dispatcher_and_state ( ) ;
9494 let state: & P2pState = state. substate ( ) ?;
95- state. webrtc_discovery_respond_with_availble_peers ( dispatcher) ;
95+ state. webrtc_discovery_respond_with_availble_peers ( dispatcher, meta . time ( ) ) ;
9696
9797 Ok ( ( ) )
9898 }
@@ -101,7 +101,7 @@ impl P2pChannelsSignalingDiscoveryState {
101101 } => {
102102 let Self :: Ready { local, .. } = state else {
103103 bug_condition ! (
104- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
104+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredSend `, state: {state:?}" ,
105105 ) ;
106106 return Ok ( ( ) ) ;
107107 } ;
@@ -123,7 +123,7 @@ impl P2pChannelsSignalingDiscoveryState {
123123 P2pChannelsSignalingDiscoveryAction :: DiscoveredRejectReceived { .. } => {
124124 let Self :: Ready { local, .. } = state else {
125125 bug_condition ! (
126- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
126+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredRejectReceived `, state: {state:?}" ,
127127 ) ;
128128 return Ok ( ( ) ) ;
129129 } ;
@@ -134,7 +134,7 @@ impl P2pChannelsSignalingDiscoveryState {
134134 } => target_public_key. clone ( ) ,
135135 state => {
136136 bug_condition ! (
137- "Invalid local state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
137+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredRejectReceived `, state: {state:?}" ,
138138 ) ;
139139 return Ok ( ( ) ) ;
140140 }
@@ -145,12 +145,16 @@ impl P2pChannelsSignalingDiscoveryState {
145145 target_public_key,
146146 } ;
147147
148+ let ( dispatcher, state) = state_context. into_dispatcher_and_state ( ) ;
149+ let state: & P2pState = state. substate ( ) ?;
150+ state. webrtc_discovery_respond_with_availble_peers ( dispatcher, meta. time ( ) ) ;
151+
148152 Ok ( ( ) )
149153 }
150154 P2pChannelsSignalingDiscoveryAction :: DiscoveredAcceptReceived { offer, .. } => {
151155 let Self :: Ready { local, .. } = state else {
152156 bug_condition ! (
153- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
157+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredAcceptReceived `, state: {state:?}" ,
154158 ) ;
155159 return Ok ( ( ) ) ;
156160 } ;
@@ -161,7 +165,7 @@ impl P2pChannelsSignalingDiscoveryState {
161165 } => target_public_key. clone ( ) ,
162166 state => {
163167 bug_condition ! (
164- "Invalid local state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
168+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredAcceptReceived `, state: {state:?}" ,
165169 ) ;
166170 return Ok ( ( ) ) ;
167171 }
@@ -183,7 +187,7 @@ impl P2pChannelsSignalingDiscoveryState {
183187 P2pChannelsSignalingDiscoveryAction :: AnswerSend { answer, .. } => {
184188 let Self :: Ready { local, .. } = state else {
185189 bug_condition ! (
186- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
190+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::AnswerSend `, state: {state:?}" ,
187191 ) ;
188192 return Ok ( ( ) ) ;
189193 } ;
@@ -212,7 +216,7 @@ impl P2pChannelsSignalingDiscoveryState {
212216 P2pChannelsSignalingDiscoveryAction :: DiscoveryRequestSend { .. } => {
213217 let Self :: Ready { remote, .. } = state else {
214218 bug_condition ! (
215- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferSend `, state: {state:?}" ,
219+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveryRequestSend `, state: {state:?}" ,
216220 ) ;
217221 return Ok ( ( ) ) ;
218222 } ;
@@ -231,7 +235,7 @@ impl P2pChannelsSignalingDiscoveryState {
231235 } => {
232236 let Self :: Ready { remote, .. } = state else {
233237 bug_condition ! (
234- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferSend `, state: {state:?}" ,
238+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredReceived `, state: {state:?}" ,
235239 ) ;
236240 return Ok ( ( ) ) ;
237241 } ;
@@ -240,27 +244,62 @@ impl P2pChannelsSignalingDiscoveryState {
240244 time : meta. time ( ) ,
241245 target_public_key : target_public_key. clone ( ) ,
242246 } ;
243- let dispatcher = state_context. into_dispatcher ( ) ;
244- // TODO(binier): this action might not be enabled, in
245- // which case we sshould be rejecting discovered peer.
246- dispatcher. push ( P2pConnectionOutgoingAction :: Init {
247+ let ( dispatcher, state) = state_context. into_dispatcher_and_state ( ) ;
248+ let state: & P2pState = state. substate ( ) ?;
249+ let action = P2pConnectionOutgoingAction :: Init {
247250 opts : P2pConnectionOutgoingInitOpts :: WebRTC {
248251 peer_id : target_public_key. peer_id ( ) ,
249252 signaling : SignalingMethod :: P2p {
250253 relay_peer_id : peer_id,
251254 } ,
252255 } ,
253256 rpc_id : None ,
254- } ) ;
257+ } ;
258+ let accepted = redux:: EnablingCondition :: is_enabled ( & action, state, meta. time ( ) ) ;
259+ if accepted {
260+ dispatcher. push ( action) ;
261+ } else {
262+ dispatcher
263+ . push ( P2pChannelsSignalingDiscoveryAction :: DiscoveredReject { peer_id } ) ;
264+ }
255265 Ok ( ( ) )
256266 }
257267 P2pChannelsSignalingDiscoveryAction :: DiscoveredReject { .. } => {
258- todo ! ( "handle peer rejection" )
268+ let Self :: Ready { remote, .. } = state else {
269+ bug_condition ! (
270+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredReject`, state: {state:?}" ,
271+ ) ;
272+ return Ok ( ( ) ) ;
273+ } ;
274+
275+ let target_public_key = match remote {
276+ SignalingDiscoveryState :: Discovered {
277+ target_public_key, ..
278+ } => target_public_key. clone ( ) ,
279+ state => {
280+ bug_condition ! (
281+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredReject`, state: {state:?}" ,
282+ ) ;
283+ return Ok ( ( ) ) ;
284+ }
285+ } ;
286+
287+ * remote = SignalingDiscoveryState :: DiscoveredRejected {
288+ time : meta. time ( ) ,
289+ target_public_key,
290+ } ;
291+ let dispatcher = state_context. into_dispatcher ( ) ;
292+ let message = SignalingDiscoveryChannelMsg :: DiscoveredReject ;
293+ dispatcher. push ( P2pChannelsSignalingDiscoveryEffectfulAction :: MessageSend {
294+ peer_id,
295+ message,
296+ } ) ;
297+ Ok ( ( ) )
259298 }
260299 P2pChannelsSignalingDiscoveryAction :: DiscoveredAccept { offer, .. } => {
261300 let Self :: Ready { remote, .. } = state else {
262301 bug_condition ! (
263- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferSend `, state: {state:?}" ,
302+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredAccept `, state: {state:?}" ,
264303 ) ;
265304 return Ok ( ( ) ) ;
266305 } ;
@@ -271,7 +310,7 @@ impl P2pChannelsSignalingDiscoveryState {
271310 } => target_public_key. clone ( ) ,
272311 state => {
273312 bug_condition ! (
274- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferSend `, state: {state:?}" ,
313+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::DiscoveredAccept `, state: {state:?}" ,
275314 ) ;
276315 return Ok ( ( ) ) ;
277316 }
@@ -299,7 +338,7 @@ impl P2pChannelsSignalingDiscoveryState {
299338 P2pChannelsSignalingDiscoveryAction :: AnswerReceived { answer, .. } => {
300339 let Self :: Ready { remote, .. } = state else {
301340 bug_condition ! (
302- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferSend `, state: {state:?}" ,
341+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::AnswerReceived `, state: {state:?}" ,
303342 ) ;
304343 return Ok ( ( ) ) ;
305344 } ;
@@ -310,7 +349,7 @@ impl P2pChannelsSignalingDiscoveryState {
310349 } => target_public_key. clone ( ) ,
311350 state => {
312351 bug_condition ! (
313- "Invalid remote state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
352+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::AnswerReceived `, state: {state:?}" ,
314353 ) ;
315354 return Ok ( ( ) ) ;
316355 }
@@ -336,7 +375,7 @@ impl P2pChannelsSignalingDiscoveryState {
336375 P2pChannelsSignalingDiscoveryAction :: AnswerDecrypted { answer, .. } => {
337376 let Self :: Ready { remote, .. } = state else {
338377 bug_condition ! (
339- "Invalid state for `P2pChannelsSignalingDiscoveryAction::OfferSend `, state: {state:?}" ,
378+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::AnswerDecrypted `, state: {state:?}" ,
340379 ) ;
341380 return Ok ( ( ) ) ;
342381 } ;
@@ -347,15 +386,15 @@ impl P2pChannelsSignalingDiscoveryState {
347386 } => target_public_key. clone ( ) ,
348387 state => {
349388 bug_condition ! (
350- "Invalid remote state for `P2pChannelsSignalingDiscoveryAction::OfferDecryptError `, state: {state:?}" ,
389+ "Invalid state for `P2pChannelsSignalingDiscoveryAction::AnswerDecrypted `, state: {state:?}" ,
351390 ) ;
352391 return Ok ( ( ) ) ;
353392 }
354393 } ;
355394
356395 * remote = SignalingDiscoveryState :: Answered { time : meta. time ( ) } ;
357396
358- let dispatcher = state_context. into_dispatcher ( ) ;
397+ let ( dispatcher, state ) = state_context. into_dispatcher_and_state ( ) ;
359398 match answer {
360399 P2pConnectionResponse :: Accepted ( answer) => {
361400 dispatcher. push ( P2pConnectionOutgoingAction :: AnswerRecvSuccess {
@@ -382,6 +421,9 @@ impl P2pChannelsSignalingDiscoveryState {
382421 } )
383422 }
384423 }
424+
425+ let state: & P2pState = state. substate ( ) ?;
426+ state. webrtc_discovery_respond_with_availble_peers ( dispatcher, meta. time ( ) ) ;
385427 Ok ( ( ) )
386428 }
387429 }
0 commit comments