aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol
diff options
context:
space:
mode:
authorLuis <luis@lu15.dev>2024-04-27 07:03:20 +0100
committerGitHub <noreply@github.com>2024-04-27 01:03:20 -0500
commit6553d9510ddc52469dd7557aa9675982cb5187ab (patch)
treee2d0cc0e36be8b2d4be5857c2790cb79eb84dece /azalea-protocol
parent84f66a55a5e5b1618111e522c25704ac96d45806 (diff)
downloadazalea-drasl-6553d9510ddc52469dd7557aa9675982cb5187ab.tar.xz
Use ClientIntention over ConnectionProtocol for ClientIntentionPacket (#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
Diffstat (limited to 'azalea-protocol')
-rw-r--r--azalea-protocol/examples/handshake_proxy.rs10
-rwxr-xr-xazalea-protocol/src/connect.rs4
-rwxr-xr-xazalea-protocol/src/packets/handshaking/client_intention_packet.rs4
-rwxr-xr-xazalea-protocol/src/packets/mod.rs37
4 files changed, 42 insertions, 13 deletions
diff --git a/azalea-protocol/examples/handshake_proxy.rs b/azalea-protocol/examples/handshake_proxy.rs
index a7ac67c7..442db386 100644
--- a/azalea-protocol/examples/handshake_proxy.rs
+++ b/azalea-protocol/examples/handshake_proxy.rs
@@ -16,7 +16,7 @@ use azalea_protocol::{
},
ServerboundStatusPacket,
},
- ConnectionProtocol, PROTOCOL_VERSION,
+ ClientIntention, PROTOCOL_VERSION,
},
read::ReadPacketError,
};
@@ -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 {
@@ -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 {
@@ -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")
}
}
diff --git a/azalea-protocol/src/connect.rs b/azalea-protocol/src/connect.rs
index cf98e419..691d25c0 100755
--- a/azalea-protocol/src/connect.rs
+++ b/azalea-protocol/src/connect.rs
@@ -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,
@@ -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(),
/// )
diff --git a/azalea-protocol/src/packets/handshaking/client_intention_packet.rs b/azalea-protocol/src/packets/handshaking/client_intention_packet.rs
index cac64a01..82be621a 100755
--- a/azalea-protocol/src/packets/handshaking/client_intention_packet.rs
+++ b/azalea-protocol/src/packets/handshaking/client_intention_packet.rs
@@ -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;
@@ -9,5 +9,5 @@ pub struct ClientIntentionPacket {
pub protocol_version: i32,
pub hostname: String,
pub port: u16,
- pub intention: ConnectionProtocol,
+ pub intention: ClientIntention,
}
diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs
index 63a0c1c9..044bb56c 100755
--- a/azalea-protocol/src/packets/mod.rs
+++ b/azalea-protocol/src/packets/mod.rs
@@ -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)
}
-}
+} \ No newline at end of file