(&mut self, event: Event)
| 606 | |
| 607 | #[tracing::instrument(skip_all)] |
| 608 | async fn handle_node_event(&mut self, event: Event) -> Result<Option<SwarmEventResult>> { |
| 609 | match event { |
| 610 | Event::Bitswap(e) => { |
| 611 | match e { |
| 612 | BitswapEvent::Provide { key } => { |
| 613 | info!("bitswap provide {}", key); |
| 614 | if let Some(kad) = self.swarm.behaviour_mut().kad.as_mut() { |
| 615 | match kad.start_providing(key.hash().to_bytes().into()) { |
| 616 | Ok(_query_id) => { |
| 617 | // TODO: track query? |
| 618 | } |
| 619 | Err(err) => { |
| 620 | error!("failed to provide {}: {:?}", key, err); |
| 621 | } |
| 622 | } |
| 623 | }; |
| 624 | Ok(None) |
| 625 | } |
| 626 | BitswapEvent::FindProviders { |
| 627 | key, |
| 628 | response, |
| 629 | limit, |
| 630 | } => { |
| 631 | info!("bitswap find providers {}", key); |
| 632 | self.handle_rpc_message(RpcMessage::ProviderRequest { |
| 633 | key: ProviderRequestKey::Dht(key.hash().to_bytes().into()), |
| 634 | response_channel: response, |
| 635 | limit, |
| 636 | }) |
| 637 | .await?; |
| 638 | Ok(None) |
| 639 | } |
| 640 | BitswapEvent::Ping { peer, response } => { |
| 641 | match self.swarm.behaviour().peer_manager.info_for_peer(&peer) { |
| 642 | Some(info) => { |
| 643 | response.send(info.latency()).ok(); |
| 644 | Ok(None) |
| 645 | } |
| 646 | None => { |
| 647 | response.send(None).ok(); |
| 648 | Ok(None) |
| 649 | } |
| 650 | } |
| 651 | } |
| 652 | } |
| 653 | } |
| 654 | Event::Kademlia(e) => { |
| 655 | libp2p_metrics().record(&e); |
| 656 | |
| 657 | if let kad::Event::OutboundQueryProgressed { |
| 658 | id, result, step, .. |
| 659 | } = e |
| 660 | { |
| 661 | match result { |
| 662 | QueryResult::StartProviding(_result) => Ok(None), |
| 663 | QueryResult::GetProviders(Ok(p)) => { |
| 664 | match p { |
| 665 | GetProvidersOk::FoundProviders { key, providers } => { |
no test coverage detected