Skip to content

Commit

Permalink
Use ClientIntention over ConnectionProtocol for ClientIntentionPacket (
Browse files Browse the repository at this point in the history
…#143)

* fix!: use ClientIntention over ConnectionProtocol for ClientIntentionPacket

* chore: remove McBufRead/Writable from ConnectionProtocol

* chore: use From over Into for ClientIntention to ConnectionProtocol conversion

* chore: organise imports in existing style
  • Loading branch information
LooFifteen authored Apr 27, 2024
1 parent 84f66a5 commit 6553d95
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 17 deletions.
4 changes: 2 additions & 2 deletions azalea-client/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ use azalea_protocol::{
serverbound_login_acknowledged_packet::ServerboundLoginAcknowledgedPacket,
ClientboundLoginPacket,
},
ConnectionProtocol, PROTOCOL_VERSION,
ConnectionProtocol, ClientIntention, PROTOCOL_VERSION,
},
resolver, ServerAddress,
};
Expand Down Expand Up @@ -358,7 +358,7 @@ impl Client {
protocol_version: PROTOCOL_VERSION,
hostname: address.host.clone(),
port: address.port,
intention: ConnectionProtocol::Login,
intention: ClientIntention::Login,
}
.get(),
)
Expand Down
4 changes: 2 additions & 2 deletions azalea-client/src/ping.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use azalea_protocol::{
serverbound_status_request_packet::ServerboundStatusRequestPacket,
ClientboundStatusPacket,
},
ConnectionProtocol, PROTOCOL_VERSION,
ClientIntention, PROTOCOL_VERSION,
},
resolver, ServerAddress,
};
Expand Down Expand Up @@ -79,7 +79,7 @@ pub async fn ping_server_with_connection(
protocol_version: PROTOCOL_VERSION,
hostname: address.host.clone(),
port: address.port,
intention: ConnectionProtocol::Status,
intention: ClientIntention::Status,
}
.get(),
)
Expand Down
10 changes: 5 additions & 5 deletions azalea-protocol/examples/handshake_proxy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use azalea_protocol::{
},
ServerboundStatusPacket,
},
ConnectionProtocol, PROTOCOL_VERSION,
ClientIntention, PROTOCOL_VERSION,
},
read::ReadPacketError,
};
Expand Down Expand Up @@ -95,7 +95,7 @@ async fn handle_connection(stream: TcpStream) -> anyhow::Result<()> {
match intent.intention {
// If the client is pinging the proxy,
// reply with the information below.
ConnectionProtocol::Status => {
ClientIntention::Status => {
let mut conn = conn.status();
loop {
match conn.read().await {
Expand Down Expand Up @@ -135,7 +135,7 @@ async fn handle_connection(stream: TcpStream) -> anyhow::Result<()> {
// wait for them to send the `Hello` packet to
// log their username and uuid, then forward the
// connection along to the proxy target.
ConnectionProtocol::Login => {
ClientIntention::Login => {
let mut conn = conn.login();
loop {
match conn.read().await {
Expand Down Expand Up @@ -169,8 +169,8 @@ async fn handle_connection(stream: TcpStream) -> anyhow::Result<()> {
}
}
}
_ => {
warn!("Client provided weird intent: {:?}", intent.intention);
ClientIntention::Transfer => {
warn!("Client attempted to join via transfer")
}
}

Expand Down
4 changes: 2 additions & 2 deletions azalea-protocol/src/connect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ pub struct WriteConnection<W: ProtocolPacket> {
/// resolver,
/// connect::Connection,
/// packets::{
/// ConnectionProtocol, PROTOCOL_VERSION,
/// ClientIntention, PROTOCOL_VERSION,
/// login::{
/// ClientboundLoginPacket,
/// serverbound_hello_packet::ServerboundHelloPacket,
Expand All @@ -82,7 +82,7 @@ pub struct WriteConnection<W: ProtocolPacket> {
/// protocol_version: PROTOCOL_VERSION,
/// hostname: resolved_address.ip().to_string(),
/// port: resolved_address.port(),
/// intention: ConnectionProtocol::Login,
/// intention: ClientIntention::Login,
/// }
/// .get(),
/// )
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::packets::ConnectionProtocol;
use crate::packets::ClientIntention;
use azalea_buf::McBuf;
use azalea_protocol_macros::ServerboundHandshakePacket;
use std::hash::Hash;
Expand All @@ -9,5 +9,5 @@ pub struct ClientIntentionPacket {
pub protocol_version: i32,
pub hostname: String,
pub port: u16,
pub intention: ConnectionProtocol,
pub intention: ClientIntention,
}
37 changes: 33 additions & 4 deletions azalea-protocol/src/packets/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,44 @@ where
fn write(&self, buf: &mut impl Write) -> Result<(), std::io::Error>;
}

impl azalea_buf::McBufReadable for ConnectionProtocol {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ClientIntention {
Status = 1,
Login = 2,
Transfer = 3
}

impl TryFrom<i32> for ClientIntention {
type Error = ();

fn try_from(value: i32) -> Result<Self, Self::Error> {
match value {
1 => Ok(ClientIntention::Status),
2 => Ok(ClientIntention::Login),
3 => Ok(ClientIntention::Transfer),
_ => Err(()),
}
}
}

impl From<ClientIntention> for ConnectionProtocol {
fn from(intention: ClientIntention) -> Self {
match intention {
ClientIntention::Status => ConnectionProtocol::Status,
ClientIntention::Login | ClientIntention::Transfer => ConnectionProtocol::Login,
}
}
}

impl azalea_buf::McBufReadable for ClientIntention {
fn read_from(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
let id = i32::var_read_from(buf)?;
ConnectionProtocol::from_i32(id).ok_or(BufReadError::UnexpectedEnumVariant { id })
id.try_into().map_err(|_| BufReadError::UnexpectedEnumVariant { id })
}
}

impl McBufWritable for ConnectionProtocol {
impl McBufWritable for ClientIntention {
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
(*self as i32).var_write_into(buf)
}
}
}

0 comments on commit 6553d95

Please sign in to comment.