1mod behaviour;
10pub mod compress;
12pub mod errors;
13pub mod network;
14mod network_group;
15mod peer;
16pub mod peer_registry;
17pub mod peer_store;
18mod protocols;
19mod services;
20
21#[cfg(test)]
22mod tests;
23
24pub use crate::{
25 behaviour::Behaviour,
26 errors::Error,
27 network::{
28 DefaultExitHandler, EventHandler, ExitHandler, NetworkController, NetworkService,
29 NetworkState,
30 },
31 peer::{Peer, PeerIdentifyInfo},
32 peer_registry::PeerRegistry,
33 peer_store::Score,
34 protocols::{
35 identify::Flags, support_protocols::SupportProtocols, BoxedCKBProtocolContext, CKBProtocol,
36 CKBProtocolContext, CKBProtocolHandler, PeerIndex,
37 },
38};
39pub use p2p::{
40 async_trait,
41 builder::ServiceBuilder,
42 bytes, multiaddr, runtime,
43 secio::{self, PeerId, PublicKey},
44 service::{ServiceControl, SessionType, TargetProtocol, TargetSession},
45 traits::ServiceProtocol,
46 utils::{extract_peer_id, multiaddr_to_socketaddr},
47 ProtocolId, SessionId,
48};
49pub use tokio;
50
51pub type ProtocolVersion = String;
53
54pub async fn observe_listen_port_occupancy(
56 _addrs: &[multiaddr::MultiAddr],
57) -> Result<(), std::io::Error> {
58 #[cfg(target_os = "linux")]
59 {
60 use p2p::utils::dns::DnsResolver;
61 use std::net::{SocketAddr, TcpListener};
62
63 for raw_addr in _addrs {
64 let ip_addr: Option<SocketAddr> = match DnsResolver::new(raw_addr.clone()) {
65 Some(dns) => dns.await.ok().as_ref().and_then(multiaddr_to_socketaddr),
66 None => multiaddr_to_socketaddr(raw_addr),
67 };
68
69 if let Some(addr) = ip_addr {
70 if let Err(e) = TcpListener::bind(addr) {
71 ckb_logger::error!(
72 "addr {} can't use on your machines by error: {}, please check",
73 raw_addr,
74 e
75 );
76 return Err(e);
77 }
78 }
79 }
80 }
81
82 Ok(())
83}