Change valve get_request_data return type from vec<u8> to Bufferer

This commit is contained in:
CosminPerRam 2022-12-31 14:32:35 +02:00
parent 0e68f8c830
commit a37e2506b4

View file

@ -178,21 +178,24 @@ impl ValveProtocol {
} }
/// Ask for a specific request only. /// Ask for a specific request only.
fn get_request_data(&mut self, app: &App, protocol: u8, kind: Request) -> GDResult<Vec<u8>> { fn get_request_data(&mut self, app: &App, protocol: u8, kind: Request) -> GDResult<Bufferer> {
let request_initial_packet = Packet::initial(kind.clone()).to_bytes(); let request_initial_packet = Packet::initial(kind.clone()).to_bytes();
self.socket.send(&request_initial_packet)?; self.socket.send(&request_initial_packet)?;
let packet = self.receive(app, protocol, PACKET_SIZE)?; let packet = self.receive(app, protocol, PACKET_SIZE)?;
if packet.kind != 0x41 { //'A' if packet.kind != 0x41 { //'A'
return Ok(packet.payload.clone()); let data = packet.payload.clone();
return Ok(Bufferer::new_with_data(Endianess::Little, &data));
} }
let challenge = packet.payload; let challenge = packet.payload;
let challenge_packet = Packet::challenge(kind.clone(), challenge).to_bytes(); let challenge_packet = Packet::challenge(kind.clone(), challenge).to_bytes();
self.socket.send(&challenge_packet)?; self.socket.send(&challenge_packet)?;
Ok(self.receive(app, protocol, PACKET_SIZE)?.payload)
let data = self.receive(app, protocol, PACKET_SIZE)?.payload;
Ok(Bufferer::new_with_data(Endianess::Little, &data))
} }
fn get_goldsrc_server_info(buffer: &mut Bufferer) -> GDResult<ServerInfo> { fn get_goldsrc_server_info(buffer: &mut Bufferer) -> GDResult<ServerInfo> {
@ -256,8 +259,7 @@ impl ValveProtocol {
/// Get the server information's. /// Get the server information's.
fn get_server_info(&mut self, app: &App) -> GDResult<ServerInfo> { fn get_server_info(&mut self, app: &App) -> GDResult<ServerInfo> {
let data = self.get_request_data(&app, 0, Request::INFO)?; let mut buffer = self.get_request_data(&app, 0, Request::INFO)?;
let mut buffer = Bufferer::new_with_data(Endianess::Little, &data);
if let App::GoldSrc(force) = app { if let App::GoldSrc(force) = app {
if *force { if *force {
@ -356,8 +358,7 @@ impl ValveProtocol {
/// Get the server player's. /// Get the server player's.
fn get_server_players(&mut self, app: &App, protocol: u8) -> GDResult<Vec<ServerPlayer>> { fn get_server_players(&mut self, app: &App, protocol: u8) -> GDResult<Vec<ServerPlayer>> {
let data = self.get_request_data(&app, protocol, Request::PLAYERS)?; let mut buffer = self.get_request_data(&app, protocol, Request::PLAYERS)?;
let mut buffer = Bufferer::new_with_data(Endianess::Little, &data);
let count = buffer.get_u8()? as usize; let count = buffer.get_u8()? as usize;
let mut players: Vec<ServerPlayer> = Vec::with_capacity(count); let mut players: Vec<ServerPlayer> = Vec::with_capacity(count);
@ -384,8 +385,7 @@ impl ValveProtocol {
/// Get the server rules's. /// Get the server rules's.
fn get_server_rules(&mut self, app: &App, protocol: u8) -> GDResult<Option<Vec<ServerRule>>> { fn get_server_rules(&mut self, app: &App, protocol: u8) -> GDResult<Option<Vec<ServerRule>>> {
let data = self.get_request_data(&app, protocol, Request::RULES)?; let mut buffer = self.get_request_data(&app, protocol, Request::RULES)?;
let mut buffer = Bufferer::new_with_data(Endianess::Little, &data);
let count = buffer.get_u16()? as usize; let count = buffer.get_u16()? as usize;
let mut rules: Vec<ServerRule> = Vec::with_capacity(count); let mut rules: Vec<ServerRule> = Vec::with_capacity(count);