1pub use dht::{
2 xor_distance, DhtClient, DhtConfig, DhtQueryBuilder, DhtQueryMode, DhtQueryWithDataBuilder,
3 DhtService, DhtServiceBackgroundTasks, DhtServiceBuilder, DhtValueMerger, DhtValueSource,
4 FindValueError, PeerResolver, PeerResolverBuilder, PeerResolverConfig, PeerResolverHandle,
5 StorageError,
6};
7pub use network::{
8 ActivePeers, Connection, KnownPeerHandle, KnownPeers, KnownPeersError, Network, NetworkBuilder,
9 NetworkConfig, Peer, PeerBannedError, QuicConfig, RecvStream, SendStream, ToSocket,
10 WeakActivePeers, WeakKnownPeerHandle, WeakNetwork,
11};
12pub use quinn;
13pub use types::{
14 service_datagram_fn, service_message_fn, service_query_fn, Address, BoxCloneService,
15 BoxService, Direction, DisconnectReason, InboundRequestMeta, PeerAffinity, PeerEvent, PeerId,
16 PeerInfo, Request, Response, RpcQuery, Service, ServiceDatagramFn, ServiceExt,
17 ServiceMessageFn, ServiceQueryFn, ServiceRequest, Version,
18};
19
20pub use self::overlay::{
21 ChooseMultiplePrivateOverlayEntries, ChooseMultiplePublicOverlayEntries, OverlayConfig,
22 OverlayId, OverlayService, OverlayServiceBackgroundTasks, OverlayServiceBuilder,
23 PrivateOverlay, PrivateOverlayBuilder, PrivateOverlayEntries, PrivateOverlayEntriesEvent,
24 PrivateOverlayEntriesReadGuard, PrivateOverlayEntriesWriteGuard, PrivateOverlayEntryData,
25 PublicOverlay, PublicOverlayBuilder, PublicOverlayEntries, PublicOverlayEntriesReadGuard,
26 PublicOverlayEntryData,
27};
28pub use self::util::{
29 check_peer_signature, try_handle_prefix, try_handle_prefix_with_offset, NetworkExt, Routable,
30 Router, RouterBuilder,
31};
32
33mod dht;
34mod network;
35mod overlay;
36mod types;
37mod util;
38
39pub mod proto {
40 pub mod dht;
41 pub mod overlay;
42}
43
44#[doc(hidden)]
45pub mod __internal {
46 pub use tl_proto;
47}
48
49#[cfg(test)]
50mod tests {
51 use std::net::Ipv4Addr;
52
53 use super::*;
54
55 #[tokio::test]
56 async fn init_works() {
57 let keypair = everscale_crypto::ed25519::KeyPair::generate(&mut rand::thread_rng());
58 let peer_id: PeerId = keypair.public_key.into();
59
60 let (dht_tasks, dht_service) = DhtService::builder(peer_id).build();
61
62 let (overlay_tasks, overlay_service) = OverlayService::builder(peer_id)
63 .with_dht_service(dht_service.clone())
64 .build();
65
66 let router = Router::builder()
67 .route(dht_service.clone())
68 .route(overlay_service.clone())
69 .build();
70
71 let network = Network::builder()
72 .with_random_private_key()
73 .build((Ipv4Addr::LOCALHOST, 0), router)
74 .unwrap();
75
76 dht_tasks.spawn(&network);
77 overlay_tasks.spawn(&network);
78
79 let peer_resolver = dht_service.make_peer_resolver().build(&network);
80
81 let private_overlay = PrivateOverlay::builder(rand::random())
82 .with_peer_resolver(peer_resolver)
83 .build(service_message_fn(|_| futures_util::future::ready(())));
84
85 let public_overlay = PublicOverlay::builder(rand::random())
86 .build(service_message_fn(|_| futures_util::future::ready(())));
87
88 overlay_service.add_private_overlay(&private_overlay);
89 overlay_service.add_public_overlay(&public_overlay);
90 }
91}