1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 06:16:04 +00:00

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
This commit is contained in:
Luis 2024-04-27 07:03:20 +01:00 committed by GitHub
parent 84f66a55a5
commit 6553d9510d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 48 additions and 19 deletions

View file

@ -51,7 +51,7 @@ use azalea_protocol::{
serverbound_login_acknowledged_packet::ServerboundLoginAcknowledgedPacket,
ClientboundLoginPacket,
},
ConnectionProtocol, PROTOCOL_VERSION,
ConnectionProtocol, ClientIntention, PROTOCOL_VERSION,
},
resolver, ServerAddress,
};
@ -358,7 +358,7 @@ impl Client {
protocol_version: PROTOCOL_VERSION,
hostname: address.host.clone(),
port: address.port,
intention: ConnectionProtocol::Login,
intention: ClientIntention::Login,
}
.get(),
)

View file

@ -12,7 +12,7 @@ use azalea_protocol::{
serverbound_status_request_packet::ServerboundStatusRequestPacket,
ClientboundStatusPacket,
},
ConnectionProtocol, PROTOCOL_VERSION,
ClientIntention, PROTOCOL_VERSION,
},
resolver, ServerAddress,
};
@ -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(),
)

View file

@ -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")
}
}

View file

@ -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(),
/// )

View file

@ -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,
}

View file

@ -50,15 +50,44 @@ where
fn write(&self, buf: &mut impl Write) -> Result<(), std::io::Error>;
}
impl azalea_buf::McBufReadable for ConnectionProtocol {
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 })
#[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 McBufWritable for ConnectionProtocol {
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)?;
id.try_into().map_err(|_| BufReadError::UnexpectedEnumVariant { id })
}
}
impl McBufWritable for ClientIntention {
fn write_into(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
(*self as i32).var_write_into(buf)
}
}
}