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, SessionType},
32 peer_registry::PeerRegistry,
33 peer_store::Score,
34 protocols::{
35 BoxedCKBProtocolContext, CKBProtocol, CKBProtocolContext, CKBProtocolHandler, PeerIndex,
36 identify::Flags, support_protocols::SupportProtocols,
37 },
38};
39pub use p2p::{
40 ProtocolId, SessionId, async_trait,
41 builder::ServiceBuilder,
42 bytes, multiaddr, runtime,
43 secio::{self, PeerId, PublicKey},
44 service::{ServiceControl, SessionType as RawSessionType, TargetProtocol, TargetSession},
45 traits::ServiceProtocol,
46 utils::{extract_peer_id, multiaddr_to_socketaddr},
47};
48pub use tokio;
49
50pub type ProtocolVersion = String;
52
53pub async fn observe_listen_port_occupancy(
55 _addrs: &[multiaddr::MultiAddr],
56) -> Result<(), std::io::Error> {
57 #[cfg(target_os = "linux")]
58 {
59 use p2p::utils::dns::DnsResolver;
60 use std::net::{SocketAddr, TcpListener};
61
62 for raw_addr in _addrs {
63 let ip_addr: Option<SocketAddr> = match DnsResolver::new(raw_addr.clone()) {
64 Some(dns) => dns.await.ok().as_ref().and_then(multiaddr_to_socketaddr),
65 None => multiaddr_to_socketaddr(raw_addr),
66 };
67
68 if let Some(addr) = ip_addr {
69 if let Err(e) = TcpListener::bind(addr) {
70 ckb_logger::error!(
71 "addr {} can't use on your machines by error: {}, please check",
72 raw_addr,
73 e
74 );
75 return Err(e);
76 }
77 }
78 }
79 }
80
81 Ok(())
82}