diff options
Diffstat (limited to 'src/server/net/property_parser.rs')
| -rw-r--r-- | src/server/net/property_parser.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/server/net/property_parser.rs b/src/server/net/property_parser.rs new file mode 100644 index 0000000..8a4f960 --- /dev/null +++ b/src/server/net/property_parser.rs @@ -0,0 +1,38 @@ +// Copyleft 2021-2021 Whirlsplash +// SPDX-License-Identifier: GPL-3.0-only + +use std::str::from_utf8; + +use crate::server::net::structure::NetworkProperty; + +/// Iterate over a network property in the form of bytes and return a list of +/// human-readable properties. +pub fn parse_network_property(mut data: Vec<u8>) -> Vec<NetworkProperty> { + let mut property_list = vec![]; + + // Iterate over all network properties + loop { + // Check if any commands are present + if data.len() <= 2 { + break; + } + debug!("iteration: {:?}", data); + // if data[0] == 0 { + // break; + // } + + let property_length = data[1] + 2; + property_list.push(NetworkProperty { + prop_id: data[0] as i32, + value: from_utf8(&data[2..data[1] as usize + 2]) + .unwrap() + .to_string(), + }); + + // Remove current property from the network property + data = data[property_length as usize..].to_vec(); + } + + // Return the human-readable network property + property_list +} |