Correct and consolidate RPC protocol names (#645)
This commit is contained in:
parent
c04026d073
commit
1259883de6
@ -1,7 +1,9 @@
|
|||||||
use crate::rpc::methods::*;
|
use crate::rpc::methods::*;
|
||||||
use crate::rpc::{
|
use crate::rpc::{
|
||||||
codec::base::OutboundCodec,
|
codec::base::OutboundCodec,
|
||||||
protocol::{ProtocolId, RPCError},
|
protocol::{
|
||||||
|
ProtocolId, RPCError, RPC_BLOCKS_BY_RANGE, RPC_BLOCKS_BY_ROOT, RPC_GOODBYE, RPC_STATUS,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
use crate::rpc::{ErrorMessage, RPCErrorResponse, RPCRequest, RPCResponse};
|
use crate::rpc::{ErrorMessage, RPCErrorResponse, RPCRequest, RPCResponse};
|
||||||
use libp2p::bytes::{BufMut, Bytes, BytesMut};
|
use libp2p::bytes::{BufMut, Bytes, BytesMut};
|
||||||
@ -76,25 +78,25 @@ impl Decoder for SSZInboundCodec {
|
|||||||
fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
|
fn decode(&mut self, src: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
|
||||||
match self.inner.decode(src).map_err(RPCError::from) {
|
match self.inner.decode(src).map_err(RPCError::from) {
|
||||||
Ok(Some(packet)) => match self.protocol.message_name.as_str() {
|
Ok(Some(packet)) => match self.protocol.message_name.as_str() {
|
||||||
"status" => match self.protocol.version.as_str() {
|
RPC_STATUS => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCRequest::Status(StatusMessage::from_ssz_bytes(
|
"1" => Ok(Some(RPCRequest::Status(StatusMessage::from_ssz_bytes(
|
||||||
&packet,
|
&packet,
|
||||||
)?))),
|
)?))),
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
"goodbye" => match self.protocol.version.as_str() {
|
RPC_GOODBYE => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCRequest::Goodbye(GoodbyeReason::from_ssz_bytes(
|
"1" => Ok(Some(RPCRequest::Goodbye(GoodbyeReason::from_ssz_bytes(
|
||||||
&packet,
|
&packet,
|
||||||
)?))),
|
)?))),
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
"blocks_by_range" => match self.protocol.version.as_str() {
|
RPC_BLOCKS_BY_RANGE => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCRequest::BlocksByRange(
|
"1" => Ok(Some(RPCRequest::BlocksByRange(
|
||||||
BlocksByRangeRequest::from_ssz_bytes(&packet)?,
|
BlocksByRangeRequest::from_ssz_bytes(&packet)?,
|
||||||
))),
|
))),
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
"blocks_by_root" => match self.protocol.version.as_str() {
|
RPC_BLOCKS_BY_ROOT => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCRequest::BlocksByRoot(BlocksByRootRequest {
|
"1" => Ok(Some(RPCRequest::BlocksByRoot(BlocksByRootRequest {
|
||||||
block_roots: Vec::from_ssz_bytes(&packet)?,
|
block_roots: Vec::from_ssz_bytes(&packet)?,
|
||||||
}))),
|
}))),
|
||||||
@ -164,18 +166,18 @@ impl Decoder for SSZOutboundCodec {
|
|||||||
// clear the buffer and return an empty object
|
// clear the buffer and return an empty object
|
||||||
src.clear();
|
src.clear();
|
||||||
match self.protocol.message_name.as_str() {
|
match self.protocol.message_name.as_str() {
|
||||||
"status" => match self.protocol.version.as_str() {
|
RPC_STATUS => match self.protocol.version.as_str() {
|
||||||
"1" => Err(RPCError::Custom(
|
"1" => Err(RPCError::Custom(
|
||||||
"Status stream terminated unexpectedly".into(),
|
"Status stream terminated unexpectedly".into(),
|
||||||
)), // cannot have an empty HELLO message. The stream has terminated unexpectedly
|
)), // cannot have an empty HELLO message. The stream has terminated unexpectedly
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
"goodbye" => Err(RPCError::InvalidProtocol("GOODBYE doesn't have a response")),
|
RPC_GOODBYE => Err(RPCError::InvalidProtocol("GOODBYE doesn't have a response")),
|
||||||
"blocks_by_range" => match self.protocol.version.as_str() {
|
RPC_BLOCKS_BY_RANGE => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCResponse::BlocksByRange(Vec::new()))),
|
"1" => Ok(Some(RPCResponse::BlocksByRange(Vec::new()))),
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
"blocks_by_root" => match self.protocol.version.as_str() {
|
RPC_BLOCKS_BY_ROOT => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCResponse::BlocksByRoot(Vec::new()))),
|
"1" => Ok(Some(RPCResponse::BlocksByRoot(Vec::new()))),
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
@ -188,20 +190,20 @@ impl Decoder for SSZOutboundCodec {
|
|||||||
let raw_bytes = packet.take();
|
let raw_bytes = packet.take();
|
||||||
|
|
||||||
match self.protocol.message_name.as_str() {
|
match self.protocol.message_name.as_str() {
|
||||||
"status" => match self.protocol.version.as_str() {
|
RPC_STATUS => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCResponse::Status(StatusMessage::from_ssz_bytes(
|
"1" => Ok(Some(RPCResponse::Status(StatusMessage::from_ssz_bytes(
|
||||||
&raw_bytes,
|
&raw_bytes,
|
||||||
)?))),
|
)?))),
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
"goodbye" => {
|
RPC_GOODBYE => {
|
||||||
Err(RPCError::InvalidProtocol("GOODBYE doesn't have a response"))
|
Err(RPCError::InvalidProtocol("GOODBYE doesn't have a response"))
|
||||||
}
|
}
|
||||||
"blocks_by_range" => match self.protocol.version.as_str() {
|
RPC_BLOCKS_BY_RANGE => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCResponse::BlocksByRange(raw_bytes.to_vec()))),
|
"1" => Ok(Some(RPCResponse::BlocksByRange(raw_bytes.to_vec()))),
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
"blocks_by_root" => match self.protocol.version.as_str() {
|
RPC_BLOCKS_BY_ROOT => match self.protocol.version.as_str() {
|
||||||
"1" => Ok(Some(RPCResponse::BlocksByRoot(raw_bytes.to_vec()))),
|
"1" => Ok(Some(RPCResponse::BlocksByRoot(raw_bytes.to_vec()))),
|
||||||
_ => unreachable!("Cannot negotiate an unknown version"),
|
_ => unreachable!("Cannot negotiate an unknown version"),
|
||||||
},
|
},
|
||||||
|
@ -31,6 +31,16 @@ const TTFB_TIMEOUT: u64 = 5;
|
|||||||
/// established before the stream is terminated.
|
/// established before the stream is terminated.
|
||||||
const REQUEST_TIMEOUT: u64 = 15;
|
const REQUEST_TIMEOUT: u64 = 15;
|
||||||
|
|
||||||
|
/// Protocol names to be used.
|
||||||
|
/// The Status protocol name.
|
||||||
|
pub const RPC_STATUS: &str = "status";
|
||||||
|
/// The Goodbye protocol name.
|
||||||
|
pub const RPC_GOODBYE: &str = "goodbye";
|
||||||
|
/// The `BlocksByRange` protocol name.
|
||||||
|
pub const RPC_BLOCKS_BY_RANGE: &str = "beacon_blocks_by_range";
|
||||||
|
/// The `BlocksByRoot` protocol name.
|
||||||
|
pub const RPC_BLOCKS_BY_ROOT: &str = "beacon_blocks_by_root";
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct RPCProtocol;
|
pub struct RPCProtocol;
|
||||||
|
|
||||||
@ -40,10 +50,10 @@ impl UpgradeInfo for RPCProtocol {
|
|||||||
|
|
||||||
fn protocol_info(&self) -> Self::InfoIter {
|
fn protocol_info(&self) -> Self::InfoIter {
|
||||||
vec![
|
vec![
|
||||||
ProtocolId::new("status", "1", "ssz"),
|
ProtocolId::new(RPC_STATUS, "1", "ssz"),
|
||||||
ProtocolId::new("goodbye", "1", "ssz"),
|
ProtocolId::new(RPC_GOODBYE, "1", "ssz"),
|
||||||
ProtocolId::new("blocks_by_range", "1", "ssz"),
|
ProtocolId::new(RPC_BLOCKS_BY_RANGE, "1", "ssz"),
|
||||||
ProtocolId::new("blocks_by_root", "1", "ssz"),
|
ProtocolId::new(RPC_BLOCKS_BY_ROOT, "1", "ssz"),
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,10 +181,10 @@ impl RPCRequest {
|
|||||||
pub fn supported_protocols(&self) -> Vec<ProtocolId> {
|
pub fn supported_protocols(&self) -> Vec<ProtocolId> {
|
||||||
match self {
|
match self {
|
||||||
// add more protocols when versions/encodings are supported
|
// add more protocols when versions/encodings are supported
|
||||||
RPCRequest::Status(_) => vec![ProtocolId::new("status", "1", "ssz")],
|
RPCRequest::Status(_) => vec![ProtocolId::new(RPC_STATUS, "1", "ssz")],
|
||||||
RPCRequest::Goodbye(_) => vec![ProtocolId::new("goodbye", "1", "ssz")],
|
RPCRequest::Goodbye(_) => vec![ProtocolId::new(RPC_GOODBYE, "1", "ssz")],
|
||||||
RPCRequest::BlocksByRange(_) => vec![ProtocolId::new("blocks_by_range", "1", "ssz")],
|
RPCRequest::BlocksByRange(_) => vec![ProtocolId::new(RPC_BLOCKS_BY_RANGE, "1", "ssz")],
|
||||||
RPCRequest::BlocksByRoot(_) => vec![ProtocolId::new("blocks_by_root", "1", "ssz")],
|
RPCRequest::BlocksByRoot(_) => vec![ProtocolId::new(RPC_BLOCKS_BY_ROOT, "1", "ssz")],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user