Expand description
Protocol version and feature negotiation between peers.
When two IPFRS peers connect, they exchange ProtocolOffer messages to
determine the best mutually supported configuration:
- The highest protocol version both sides understand
- The intersection of supported feature flags
- A safe chunk size (minimum of both peers’ preferences)
§Example
use ipfrs_network::protocol_negotiator::{
NegotiatorConfig, ProtocolFeature, ProtocolNegotiator, NegotiationResult,
};
let config = NegotiatorConfig::default();
let negotiator = ProtocolNegotiator::new(config);
let local = negotiator.config.local_offer(
"local-peer".to_string(),
vec![ProtocolFeature::Encryption, ProtocolFeature::Compression],
);
let remote = negotiator.config.local_offer(
"remote-peer".to_string(),
vec![ProtocolFeature::Encryption, ProtocolFeature::Multiplexing],
);
match negotiator.negotiate(&local, &remote) {
NegotiationResult::Agreed { version, features, chunk_size } => {
assert_eq!(version, 3);
assert_eq!(features, vec![ProtocolFeature::Encryption]);
assert_eq!(chunk_size, 65536);
}
other => panic!("unexpected result: {:?}", other),
}Re-exports§
pub use types::*;
Modules§
- constants
- Auto-generated module
- functions
- Auto-generated module
- negotiatorconfig_
traits NegotiatorConfig- Trait Implementations- peerprotocolnegotiator_
traits PeerProtocolNegotiator- Trait Implementations- peerprotocolversion_
traits PeerProtocolVersion- Trait Implementations- pnnegotiatorconfig_
traits PnNegotiatorConfig- Trait Implementations- pnprotocolnegotiator_
traits PnProtocolNegotiator- Trait Implementations- pnprotocolversion_
traits PnProtocolVersion- Trait Implementations- types
- Auto-generated module