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