Skip to main content

Module protocol_negotiator

Module protocol_negotiator 

Source
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