// This file is part of Bizinikiwi. // Copyright (C) Parity Technologies (UK) Ltd. and Dijital Kurdistan Tech Institute // SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . //! Network event types. These are not the part of the protocol, but rather //! events that happen on the network like DHT get/put results received. use crate::types::ProtocolName; use bytes::Bytes; use pezsc_network_common::role::ObservedRole; use pezsc_network_types::{ kad::{Key, PeerRecord}, multiaddr::Multiaddr, PeerId, }; /// Events generated by DHT as a response to get_value and put_value requests. #[derive(Debug, Clone)] #[must_use] pub enum DhtEvent { /// Found closest peers to the target `PeerId`. With libp2p also delivers a partial result /// in case the query timed out, because it can contain the target peer's address. ClosestPeersFound(PeerId, Vec<(PeerId, Vec)>), /// Closest peers to the target `PeerId` has not been found. ClosestPeersNotFound(PeerId), /// The value was found. ValueFound(PeerRecord), /// The requested record has not been found in the DHT. ValueNotFound(Key), /// The record has been successfully inserted into the DHT. ValuePut(Key), /// An error has occurred while putting a record into the DHT. ValuePutFailed(Key), /// Successfully started providing the given key. StartedProviding(Key), /// An error occured while registering as a content provider on the DHT. StartProvidingFailed(Key), /// The DHT received a put record request. PutRecordRequest(Key, Vec, Option, Option), /// The providers for [`Key`] were found. Multiple such events can be generated per provider /// discovery request. ProvidersFound(Key, Vec), /// `GET_PROVIDERS` query finished and won't yield any more providers. NoMoreProviders(Key), /// `GET_PROVIDERS` query failed and no providers for [`Key`] were found. libp2p also emits /// this event after already yielding some results via [`DhtEvent::ProvidersFound`]. ProvidersNotFound(Key), } /// Type for events generated by networking layer. #[derive(Debug, Clone)] #[must_use] pub enum Event { /// Event generated by a DHT. Dht(DhtEvent), /// Opened a substream with the given node with the given notifications protocol. /// /// The protocol is always one of the notification protocols that have been registered. NotificationStreamOpened { /// Node we opened the substream with. remote: PeerId, /// The concerned protocol. Each protocol uses a different substream. /// This is always equal to the value of /// `pezsc_network::config::NonDefaultSetConfig::notifications_protocol` of one of the /// configured sets. protocol: ProtocolName, /// If the negotiation didn't use the main name of the protocol (the one in /// `notifications_protocol`), then this field contains which name has actually been /// used. /// Always contains a value equal to the value in /// `pezsc_network::config::NonDefaultSetConfig::fallback_names`. negotiated_fallback: Option, /// Role of the remote. role: ObservedRole, /// Received handshake. received_handshake: Vec, }, /// Closed a substream with the given node. Always matches a corresponding previous /// `NotificationStreamOpened` message. NotificationStreamClosed { /// Node we closed the substream with. remote: PeerId, /// The concerned protocol. Each protocol uses a different substream. protocol: ProtocolName, }, /// Received one or more messages from the given node using the given protocol. NotificationsReceived { /// Node we received the message from. remote: PeerId, /// Concerned protocol and associated message. messages: Vec<(ProtocolName, Bytes)>, }, }