Pumpkin/pumpkin-protocol/src/java/server/play/cookie_response.rs
Alexander Medvedev 3303bb7b97 chore(net): change get_string to get_str
changed return value from `String` to `Box<str>` which is smaller and makes more sense since we don't mutate packet data

String — 24 bytes (ptr + len + capacity)
Box<str> — 16 bytes (ptr + len)
2026-05-23 11:21:53 +02:00

44 lines
1.2 KiB
Rust

use std::io::Read;
use pumpkin_data::packet::serverbound::PLAY_COOKIE_RESPONSE;
use pumpkin_macros::java_packet;
use pumpkin_util::version::JavaMinecraftVersion;
use crate::{
ServerPacket,
ser::{NetworkReadExt, ReadingError},
};
#[java_packet(PLAY_COOKIE_RESPONSE)]
/// Response to a `CCookieRequest` (play) from the server.
/// The Notchian (vanilla) server only accepts responses of up to 5 KiB in size.
pub struct SCookieResponse {
pub key: Box<str>,
pub payload: Option<Box<[u8]>>, // 5120,
}
const MAX_COOKIE_LENGTH: usize = 5120;
impl ServerPacket for SCookieResponse {
fn read(mut read: impl Read, _version: &JavaMinecraftVersion) -> Result<Self, ReadingError> {
let key = read.get_str()?;
let has_payload = read.get_bool()?;
if !has_payload {
return Ok(Self { key, payload: None });
}
let payload_length = read.get_var_int()?.0 as usize;
if payload_length > MAX_COOKIE_LENGTH {
return Err(ReadingError::TooLarge("SCookieResponse".to_string()));
}
let payload = read.read_boxed_slice(payload_length)?;
Ok(Self {
key,
payload: Some(payload),
})
}
}