mirror of
https://github.com/tribufu/rust-gamedig
synced 2026-06-01 09:42:41 +00:00
[Crate] Refactor: Buffer (#62)
* merge: local -> fresh pr * fix: utf16 bugs + clean up * docs: buffer * [feat/buffer] Replaced errors, partial valve protocol ported * fix: change buffer name + add endian switch * chore: update module * refactor: valve_master * refactor: mc bedrock * refactor: mc java * refactor: mc types * refactor: mc legacy 1.8 * refactor: mc legacy 1.4 * refactor: valve * refactor: valve types * refactor: quake * refactor: mc legacy 1.6 * refactor: gamespy 1 * fix: make switch endian move cursor * fix: reset cursor on switch * chore: add switch endian tests * chore: remove todo comment * chore: clean up buffer generic types * refactor: prop len when switching in mc bedrock * fix: tests and current pos fn * refactor: ffow * refactor: jc2mp * refactor: gs 3 * refactor: gs 2 * fix: mc bedrock prop on move + move data * fix: mc java lifetime error * fix: mc legacy 1.6 using pub not pub crate * fix: quake client lifetime * fix: quake 2 clippy warning * fix: valve lifetime issue * fix: buffer test * chore: format to keep ci happy * fix: buffer move_cursor * fix: quake client * feat: GameSpy 1 small optimization * fix: incomplete gamespy 3 fix * fix: gamespy 3 fix * fix: minecraft java * fix: minecraft bedrock * feat: update the CHANGELOG to mention the buffer rewrite and thank @cainthebest for it * fix: minecraft legacy 1.6 --------- Co-authored-by: CosminPerRam <cosmin.p@live.com>
This commit is contained in:
parent
a8342296d6
commit
66cc39eb26
20 changed files with 859 additions and 568 deletions
|
|
@ -1,9 +1,15 @@
|
|||
use crate::bufferer::{Bufferer, Endianess};
|
||||
use crate::socket::{Socket, UdpSocket};
|
||||
use crate::valve_master_server::{Region, SearchFilters};
|
||||
use crate::{GDError, GDResult};
|
||||
use crate::{
|
||||
buffer::Buffer,
|
||||
socket::{Socket, UdpSocket},
|
||||
valve_master_server::{Region, SearchFilters},
|
||||
GDError,
|
||||
GDResult,
|
||||
};
|
||||
|
||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
|
||||
|
||||
use byteorder::BigEndian;
|
||||
|
||||
/// The default master ip, which is the one for Source.
|
||||
pub fn default_master_address() -> SocketAddr {
|
||||
SocketAddr::new(IpAddr::V4(Ipv4Addr::new(208, 64, 201, 194)), 27011) // hl2master.steampowered.com
|
||||
|
|
@ -63,21 +69,22 @@ impl ValveMasterServer {
|
|||
self.socket.send(&payload)?;
|
||||
|
||||
let received_data = self.socket.receive(Some(1400))?;
|
||||
let mut buf = Bufferer::new_with_data(Endianess::Big, &received_data);
|
||||
let mut buf = Buffer::<BigEndian>::new(&received_data);
|
||||
|
||||
if buf.get_u32()? != 4294967295 || buf.get_u16()? != 26122 {
|
||||
if buf.read::<u32>()? != 4294967295 || buf.read::<u16>()? != 26122 {
|
||||
return Err(GDError::PacketBad);
|
||||
}
|
||||
|
||||
let mut ips: Vec<(IpAddr, u16)> = Vec::new();
|
||||
while !buf.is_remaining_empty() {
|
||||
|
||||
while !buf.remaining_length() == 0 {
|
||||
let ip = IpAddr::V4(Ipv4Addr::new(
|
||||
buf.get_u8()?,
|
||||
buf.get_u8()?,
|
||||
buf.get_u8()?,
|
||||
buf.get_u8()?,
|
||||
buf.read::<u8>()?,
|
||||
buf.read::<u8>()?,
|
||||
buf.read::<u8>()?,
|
||||
buf.read::<u8>()?,
|
||||
));
|
||||
let port = buf.get_u16()?;
|
||||
let port = buf.read::<u16>()?;
|
||||
|
||||
ips.push((ip, port));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue