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, Connection, ConnectionError, KnownPeerHandle, KnownPeers, KnownPeersError, Network,
9    NetworkBuilder, NetworkConfig, Peer, PeerBannedError, QuicConfig, RecvStream, SendStream,
10    ToSocket, WeakKnownPeerHandle, WeakNetwork,
11};
12pub use quinn;
13pub use types::{
14    Address, BoxCloneService, BoxService, Direction, DisconnectReason, InboundRequestMeta,
15    PeerAffinity, PeerEvent, PeerEventData, PeerId, PeerInfo, Request, Response, RpcQuery, Service,
16    ServiceExt, ServiceMessageFn, ServiceQueryFn, ServiceRequest, Version, service_message_fn,
17    service_query_fn,
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, UnknownPeersQueue,
27};
28pub use self::util::{
29    NetworkExt, Routable, Router, RouterBuilder, UnknownPeerError, check_peer_signature,
30    try_handle_prefix, try_handle_prefix_with_offset,
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 = rand::random::<tycho_crypto::ed25519::KeyPair>();
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}