tycho_network/
lib.rs

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