mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-06-12 17:41:22 +00:00
protocols/gossipsub/: Allow custom protocol id (#2718)
Allow for custom protocol ID via `GossipsubConfigBuilder::protocol_id()`.
This commit is contained in:
@ -18,7 +18,7 @@
|
||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
// DEALINGS IN THE SOFTWARE.
|
||||
|
||||
use crate::config::ValidationMode;
|
||||
use crate::config::{GossipsubVersion, ValidationMode};
|
||||
use crate::error::{GossipsubHandlerError, ValidationError};
|
||||
use crate::handler::HandlerEvent;
|
||||
use crate::rpc_proto;
|
||||
@ -59,21 +59,31 @@ impl ProtocolConfig {
|
||||
///
|
||||
/// Sets the maximum gossip transmission size.
|
||||
pub fn new(
|
||||
id_prefix: Cow<'static, str>,
|
||||
id: Cow<'static, str>,
|
||||
custom_id_peer_kind: Option<GossipsubVersion>,
|
||||
max_transmit_size: usize,
|
||||
validation_mode: ValidationMode,
|
||||
support_floodsub: bool,
|
||||
) -> ProtocolConfig {
|
||||
// support version 1.1.0 and 1.0.0 with user-customized prefix
|
||||
let mut protocol_ids = vec![
|
||||
ProtocolId::new(id_prefix.clone(), PeerKind::Gossipsubv1_1),
|
||||
ProtocolId::new(id_prefix, PeerKind::Gossipsub),
|
||||
];
|
||||
let protocol_ids = match custom_id_peer_kind {
|
||||
Some(v) => match v {
|
||||
GossipsubVersion::V1_0 => vec![ProtocolId::new(id, PeerKind::Gossipsub, false)],
|
||||
GossipsubVersion::V1_1 => vec![ProtocolId::new(id, PeerKind::Gossipsubv1_1, false)],
|
||||
},
|
||||
None => {
|
||||
let mut protocol_ids = vec![
|
||||
ProtocolId::new(id.clone(), PeerKind::Gossipsubv1_1, true),
|
||||
ProtocolId::new(id, PeerKind::Gossipsub, true),
|
||||
];
|
||||
|
||||
// add floodsub support if enabled.
|
||||
if support_floodsub {
|
||||
protocol_ids.push(ProtocolId::new(Cow::from(""), PeerKind::Floodsub));
|
||||
}
|
||||
// add floodsub support if enabled.
|
||||
if support_floodsub {
|
||||
protocol_ids.push(ProtocolId::new(Cow::from(""), PeerKind::Floodsub, false));
|
||||
}
|
||||
|
||||
protocol_ids
|
||||
}
|
||||
};
|
||||
|
||||
ProtocolConfig {
|
||||
protocol_ids,
|
||||
@ -94,10 +104,16 @@ pub struct ProtocolId {
|
||||
|
||||
/// An RPC protocol ID.
|
||||
impl ProtocolId {
|
||||
pub fn new(prefix: Cow<'static, str>, kind: PeerKind) -> Self {
|
||||
pub fn new(id: Cow<'static, str>, kind: PeerKind, prefix: bool) -> Self {
|
||||
let protocol_id = match kind {
|
||||
PeerKind::Gossipsubv1_1 => format!("/{}/{}", prefix, "1.1.0"),
|
||||
PeerKind::Gossipsub => format!("/{}/{}", prefix, "1.0.0"),
|
||||
PeerKind::Gossipsubv1_1 => match prefix {
|
||||
true => format!("/{}/{}", id, "1.1.0"),
|
||||
false => format!("{}", id),
|
||||
},
|
||||
PeerKind::Gossipsub => match prefix {
|
||||
true => format!("/{}/{}", id, "1.0.0"),
|
||||
false => format!("{}", id),
|
||||
},
|
||||
PeerKind::Floodsub => format!("/{}/{}", "floodsub", "1.0.0"),
|
||||
// NOTE: This is used for informing the behaviour of unsupported peers. We do not
|
||||
// advertise this variant.
|
||||
|
Reference in New Issue
Block a user