|
|
@ -6,7 +6,6 @@ use crate::core::value::{ |
|
|
ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError,
|
|
|
ValueDecode, ValueDecodeError, ValueDecoder, ValueEncode, ValueEncodeError,
|
|
|
ValueEncoder,
|
|
|
ValueEncoder,
|
|
|
};
|
|
|
};
|
|
|
use crate::packet::{Packet, PacketReadError, ReadFromPacket};
|
|
|
|
|
|
use crate::server::constants::*;
|
|
|
use crate::server::constants::*;
|
|
|
use crate::{User, UserStatus};
|
|
|
use crate::{User, UserStatus};
|
|
|
|
|
|
|
|
|
@ -39,83 +38,6 @@ pub enum ServerResponse { |
|
|
UnknownResponse(u32),
|
|
|
UnknownResponse(u32),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for ServerResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let code: u32 = packet.read_value()?;
|
|
|
|
|
|
let resp = match code {
|
|
|
|
|
|
CODE_CONNECT_TO_PEER => {
|
|
|
|
|
|
ServerResponse::ConnectToPeerResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_FILE_SEARCH => {
|
|
|
|
|
|
ServerResponse::FileSearchResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_LOGIN => ServerResponse::LoginResponse(packet.read_value()?),
|
|
|
|
|
|
|
|
|
|
|
|
CODE_PEER_ADDRESS => {
|
|
|
|
|
|
ServerResponse::PeerAddressResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_PRIVILEGED_USERS => {
|
|
|
|
|
|
ServerResponse::PrivilegedUsersResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_ROOM_JOIN => ServerResponse::RoomJoinResponse(packet.read_value()?),
|
|
|
|
|
|
|
|
|
|
|
|
CODE_ROOM_LEAVE => {
|
|
|
|
|
|
ServerResponse::RoomLeaveResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_ROOM_LIST => ServerResponse::RoomListResponse(packet.read_value()?),
|
|
|
|
|
|
|
|
|
|
|
|
CODE_ROOM_MESSAGE => {
|
|
|
|
|
|
ServerResponse::RoomMessageResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_ROOM_TICKERS => {
|
|
|
|
|
|
ServerResponse::RoomTickersResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_ROOM_USER_JOINED => {
|
|
|
|
|
|
ServerResponse::RoomUserJoinedResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_ROOM_USER_LEFT => {
|
|
|
|
|
|
ServerResponse::RoomUserLeftResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_USER_INFO => ServerResponse::UserInfoResponse(packet.read_value()?),
|
|
|
|
|
|
|
|
|
|
|
|
CODE_USER_STATUS => {
|
|
|
|
|
|
ServerResponse::UserStatusResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_WISHLIST_INTERVAL => {
|
|
|
|
|
|
ServerResponse::WishlistIntervalResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_PARENT_MIN_SPEED => {
|
|
|
|
|
|
ServerResponse::ParentMinSpeedResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CODE_PARENT_SPEED_RATIO => {
|
|
|
|
|
|
ServerResponse::ParentSpeedRatioResponse(packet.read_value()?)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
code => ServerResponse::UnknownResponse(code),
|
|
|
|
|
|
};
|
|
|
|
|
|
let bytes_remaining = packet.bytes_remaining();
|
|
|
|
|
|
if bytes_remaining > 0 {
|
|
|
|
|
|
warn!(
|
|
|
|
|
|
"Packet with code {} contains {} extra bytes",
|
|
|
|
|
|
code, bytes_remaining
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
Ok(resp)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for ServerResponse {
|
|
|
impl ValueEncode for ServerResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -303,26 +225,6 @@ impl From<ConnectToPeerResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for ConnectToPeerResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
let connection_type = packet.read_value()?;
|
|
|
|
|
|
let ip = packet.read_value()?;
|
|
|
|
|
|
let port = packet.read_value()?;
|
|
|
|
|
|
let token = packet.read_value()?;
|
|
|
|
|
|
let is_privileged = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
Ok(ConnectToPeerResponse {
|
|
|
|
|
|
user_name,
|
|
|
|
|
|
connection_type,
|
|
|
|
|
|
ip,
|
|
|
|
|
|
port,
|
|
|
|
|
|
token,
|
|
|
|
|
|
is_privileged,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for ConnectToPeerResponse {
|
|
|
impl ValueEncode for ConnectToPeerResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -374,20 +276,6 @@ impl From<FileSearchResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for FileSearchResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
let ticket = packet.read_value()?;
|
|
|
|
|
|
let query = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
Ok(FileSearchResponse {
|
|
|
|
|
|
user_name,
|
|
|
|
|
|
ticket,
|
|
|
|
|
|
query,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for FileSearchResponse {
|
|
|
impl ValueEncode for FileSearchResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -435,31 +323,6 @@ impl From<LoginResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for LoginResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let ok = packet.read_value()?;
|
|
|
|
|
|
if ok {
|
|
|
|
|
|
let motd = packet.read_value()?;
|
|
|
|
|
|
let ip = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
match packet.read_value::<bool>() {
|
|
|
|
|
|
Ok(value) => debug!("LoginResponse last field: {}", value),
|
|
|
|
|
|
Err(e) => debug!("Error reading LoginResponse field: {:?}", e),
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Ok(LoginResponse::LoginOk {
|
|
|
|
|
|
motd,
|
|
|
|
|
|
ip,
|
|
|
|
|
|
password_md5_opt: None,
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
Ok(LoginResponse::LoginFail {
|
|
|
|
|
|
reason: packet.read_value()?,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for LoginResponse {
|
|
|
impl ValueEncode for LoginResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -524,13 +387,6 @@ impl From<ParentMinSpeedResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for ParentMinSpeedResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let value = packet.read_value()?;
|
|
|
|
|
|
Ok(ParentMinSpeedResponse { value })
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for ParentMinSpeedResponse {
|
|
|
impl ValueEncode for ParentMinSpeedResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -562,13 +418,6 @@ impl From<ParentSpeedRatioResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for ParentSpeedRatioResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let value = packet.read_value()?;
|
|
|
|
|
|
Ok(ParentSpeedRatioResponse { value })
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for ParentSpeedRatioResponse {
|
|
|
impl ValueEncode for ParentSpeedRatioResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -602,20 +451,6 @@ impl From<PeerAddressResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for PeerAddressResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
let ip = packet.read_value()?;
|
|
|
|
|
|
let port = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
Ok(PeerAddressResponse {
|
|
|
|
|
|
user_name,
|
|
|
|
|
|
ip,
|
|
|
|
|
|
port,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for PeerAddressResponse {
|
|
|
impl ValueEncode for PeerAddressResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -655,13 +490,6 @@ impl From<PrivilegedUsersResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for PrivilegedUsersResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let users = packet.read_value()?;
|
|
|
|
|
|
Ok(PrivilegedUsersResponse { users })
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for PrivilegedUsersResponse {
|
|
|
impl ValueEncode for PrivilegedUsersResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -696,100 +524,6 @@ impl From<RoomJoinResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for RoomJoinResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let mut response = RoomJoinResponse {
|
|
|
|
|
|
room_name: packet.read_value()?,
|
|
|
|
|
|
users: Vec::new(),
|
|
|
|
|
|
owner: None,
|
|
|
|
|
|
operators: Vec::new(),
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
let num_users: usize = packet.read_value()?;
|
|
|
|
|
|
for _ in 0..num_users {
|
|
|
|
|
|
let name: String = packet.read_value()?;
|
|
|
|
|
|
let user = User {
|
|
|
|
|
|
name,
|
|
|
|
|
|
status: UserStatus::Offline,
|
|
|
|
|
|
average_speed: 0,
|
|
|
|
|
|
num_downloads: 0,
|
|
|
|
|
|
unknown: 0,
|
|
|
|
|
|
num_files: 0,
|
|
|
|
|
|
num_folders: 0,
|
|
|
|
|
|
num_free_slots: 0,
|
|
|
|
|
|
country: String::new(),
|
|
|
|
|
|
};
|
|
|
|
|
|
response.users.push(user);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
response.read_user_infos(packet)?;
|
|
|
|
|
|
|
|
|
|
|
|
if packet.bytes_remaining() > 0 {
|
|
|
|
|
|
response.owner = Some(packet.read_value()?);
|
|
|
|
|
|
|
|
|
|
|
|
let num_operators: usize = packet.read_value()?;
|
|
|
|
|
|
for _ in 0..num_operators {
|
|
|
|
|
|
response.operators.push(packet.read_value()?);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Ok(response)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl RoomJoinResponse {
|
|
|
|
|
|
fn read_user_infos(
|
|
|
|
|
|
&mut self,
|
|
|
|
|
|
packet: &mut Packet,
|
|
|
|
|
|
) -> Result<(), PacketReadError> {
|
|
|
|
|
|
let num_statuses: usize = packet.read_value()?;
|
|
|
|
|
|
for i in 0..num_statuses {
|
|
|
|
|
|
if let Some(user) = self.users.get_mut(i) {
|
|
|
|
|
|
user.status = packet.read_value()?;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let num_infos: usize = packet.read_value()?;
|
|
|
|
|
|
for i in 0..num_infos {
|
|
|
|
|
|
if let Some(user) = self.users.get_mut(i) {
|
|
|
|
|
|
user.average_speed = packet.read_value()?;
|
|
|
|
|
|
user.num_downloads = packet.read_value()?;
|
|
|
|
|
|
user.unknown = packet.read_value()?;
|
|
|
|
|
|
user.num_files = packet.read_value()?;
|
|
|
|
|
|
user.num_folders = packet.read_value()?;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let num_free_slots: usize = packet.read_value()?;
|
|
|
|
|
|
for i in 0..num_free_slots {
|
|
|
|
|
|
if let Some(user) = self.users.get_mut(i) {
|
|
|
|
|
|
user.num_free_slots = packet.read_value()?;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let num_countries: usize = packet.read_value()?;
|
|
|
|
|
|
for i in 0..num_countries {
|
|
|
|
|
|
if let Some(user) = self.users.get_mut(i) {
|
|
|
|
|
|
user.country = packet.read_value()?;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let num_users = self.users.len();
|
|
|
|
|
|
if num_users != num_statuses
|
|
|
|
|
|
|| num_users != num_infos
|
|
|
|
|
|
|| num_users != num_free_slots
|
|
|
|
|
|
|| num_users != num_countries
|
|
|
|
|
|
{
|
|
|
|
|
|
warn!(
|
|
|
|
|
|
"RoomJoinResponse: mismatched vector sizes {}, {}, {}, {}, {}",
|
|
|
|
|
|
num_users, num_statuses, num_infos, num_free_slots, num_countries
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// This struct is defined to enable decoding a vector of such values for
|
|
|
// This struct is defined to enable decoding a vector of such values for
|
|
|
// `RoomJoinResponse`, but its data is inlined in the `User` struct.
|
|
|
// `RoomJoinResponse`, but its data is inlined in the `User` struct.
|
|
|
// For details about individual fields, see said `User` struct.
|
|
|
// For details about individual fields, see said `User` struct.
|
|
|
@ -974,14 +708,6 @@ impl From<RoomLeaveResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for RoomLeaveResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
Ok(RoomLeaveResponse {
|
|
|
|
|
|
room_name: packet.read_value()?,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for RoomLeaveResponse {
|
|
|
impl ValueEncode for RoomLeaveResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -1016,49 +742,7 @@ impl From<RoomListResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for RoomListResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let rooms = Self::read_rooms(packet)?;
|
|
|
|
|
|
let owned_private_rooms = Self::read_rooms(packet)?;
|
|
|
|
|
|
let other_private_rooms = Self::read_rooms(packet)?;
|
|
|
|
|
|
let operated_private_room_names = packet.read_value()?;
|
|
|
|
|
|
Ok(RoomListResponse {
|
|
|
|
|
|
rooms,
|
|
|
|
|
|
owned_private_rooms,
|
|
|
|
|
|
other_private_rooms,
|
|
|
|
|
|
operated_private_room_names,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl RoomListResponse {
|
|
|
impl RoomListResponse {
|
|
|
fn read_rooms(
|
|
|
|
|
|
packet: &mut Packet,
|
|
|
|
|
|
) -> Result<Vec<(String, u32)>, PacketReadError> {
|
|
|
|
|
|
let num_rooms: usize = packet.read_value()?;
|
|
|
|
|
|
let mut rooms = Vec::new();
|
|
|
|
|
|
for _ in 0..num_rooms {
|
|
|
|
|
|
let room_name = packet.read_value()?;
|
|
|
|
|
|
rooms.push((room_name, 0));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let num_user_counts: usize = packet.read_value()?;
|
|
|
|
|
|
for i in 0..num_user_counts {
|
|
|
|
|
|
if let Some(&mut (_, ref mut count)) = rooms.get_mut(i) {
|
|
|
|
|
|
*count = packet.read_value()?;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if num_rooms != num_user_counts {
|
|
|
|
|
|
warn!(
|
|
|
|
|
|
"Numbers of rooms and user counts do not match: {} != {}",
|
|
|
|
|
|
num_rooms, num_user_counts
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Ok(rooms)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fn build_rooms(
|
|
|
fn build_rooms(
|
|
|
mut room_names: Vec<String>,
|
|
|
mut room_names: Vec<String>,
|
|
|
mut user_counts: Vec<u32>,
|
|
|
mut user_counts: Vec<u32>,
|
|
|
@ -1163,19 +847,6 @@ impl From<RoomMessageResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for RoomMessageResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let room_name = packet.read_value()?;
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
let message = packet.read_value()?;
|
|
|
|
|
|
Ok(RoomMessageResponse {
|
|
|
|
|
|
room_name,
|
|
|
|
|
|
user_name,
|
|
|
|
|
|
message,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for RoomMessageResponse {
|
|
|
impl ValueEncode for RoomMessageResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -1216,22 +887,6 @@ impl From<RoomTickersResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for RoomTickersResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let room_name = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
let num_tickers: usize = packet.read_value()?;
|
|
|
|
|
|
let mut tickers = Vec::new();
|
|
|
|
|
|
for _ in 0..num_tickers {
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
let message = packet.read_value()?;
|
|
|
|
|
|
tickers.push((user_name, message))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Ok(RoomTickersResponse { room_name, tickers })
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for RoomTickersResponse {
|
|
|
impl ValueEncode for RoomTickersResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -1266,39 +921,6 @@ impl From<RoomUserJoinedResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for RoomUserJoinedResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let room_name = packet.read_value()?;
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
let status = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
let average_speed = packet.read_value()?;
|
|
|
|
|
|
let num_downloads = packet.read_value()?;
|
|
|
|
|
|
let unknown = packet.read_value()?;
|
|
|
|
|
|
let num_files = packet.read_value()?;
|
|
|
|
|
|
let num_folders = packet.read_value()?;
|
|
|
|
|
|
let num_free_slots = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
let country = packet.read_value()?;
|
|
|
|
|
|
|
|
|
|
|
|
Ok(RoomUserJoinedResponse {
|
|
|
|
|
|
room_name,
|
|
|
|
|
|
user: User {
|
|
|
|
|
|
name: user_name,
|
|
|
|
|
|
status,
|
|
|
|
|
|
average_speed,
|
|
|
|
|
|
num_downloads,
|
|
|
|
|
|
unknown,
|
|
|
|
|
|
num_files,
|
|
|
|
|
|
num_folders,
|
|
|
|
|
|
num_free_slots,
|
|
|
|
|
|
country,
|
|
|
|
|
|
},
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for RoomUserJoinedResponse {
|
|
|
impl ValueEncode for RoomUserJoinedResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -1344,17 +966,6 @@ impl From<RoomUserLeftResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for RoomUserLeftResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let room_name = packet.read_value()?;
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
Ok(RoomUserLeftResponse {
|
|
|
|
|
|
room_name,
|
|
|
|
|
|
user_name,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for RoomUserLeftResponse {
|
|
|
impl ValueEncode for RoomUserLeftResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -1395,23 +1006,6 @@ impl From<UserInfoResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for UserInfoResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
let average_speed = packet.read_value()?;
|
|
|
|
|
|
let num_downloads = packet.read_value()?;
|
|
|
|
|
|
let num_files = packet.read_value()?;
|
|
|
|
|
|
let num_folders = packet.read_value()?;
|
|
|
|
|
|
Ok(UserInfoResponse {
|
|
|
|
|
|
user_name,
|
|
|
|
|
|
average_speed,
|
|
|
|
|
|
num_downloads,
|
|
|
|
|
|
num_files,
|
|
|
|
|
|
num_folders,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for UserInfoResponse {
|
|
|
impl ValueEncode for UserInfoResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -1459,19 +1053,6 @@ impl From<UserStatusResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for UserStatusResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let user_name = packet.read_value()?;
|
|
|
|
|
|
let status = packet.read_value()?;
|
|
|
|
|
|
let is_privileged = packet.read_value()?;
|
|
|
|
|
|
Ok(UserStatusResponse {
|
|
|
|
|
|
user_name,
|
|
|
|
|
|
status,
|
|
|
|
|
|
is_privileged,
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for UserStatusResponse {
|
|
|
impl ValueEncode for UserStatusResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
@ -1511,13 +1092,6 @@ impl From<WishlistIntervalResponse> for ServerResponse { |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
impl ReadFromPacket for WishlistIntervalResponse {
|
|
|
|
|
|
fn read_from_packet(packet: &mut Packet) -> Result<Self, PacketReadError> {
|
|
|
|
|
|
let seconds = packet.read_value()?;
|
|
|
|
|
|
Ok(WishlistIntervalResponse { seconds })
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl ValueEncode for WishlistIntervalResponse {
|
|
|
impl ValueEncode for WishlistIntervalResponse {
|
|
|
fn encode_to(
|
|
|
fn encode_to(
|
|
|
&self,
|
|
|
&self,
|
|
|
|