|
|
@ -11,7 +11,7 @@ use crate::proto::server::constants::*; |
|
|
* SERVER REQUEST *
|
|
|
* SERVER REQUEST *
|
|
|
*================*/
|
|
|
*================*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub enum ServerRequest {
|
|
|
pub enum ServerRequest {
|
|
|
CannotConnectRequest(CannotConnectRequest),
|
|
|
CannotConnectRequest(CannotConnectRequest),
|
|
|
ConnectToPeerRequest(ConnectToPeerRequest),
|
|
|
ConnectToPeerRequest(ConnectToPeerRequest),
|
|
|
@ -26,7 +26,65 @@ pub enum ServerRequest { |
|
|
UserStatusRequest(UserStatusRequest),
|
|
|
UserStatusRequest(UserStatusRequest),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// TODO: Implement From<*Request> for ServerRequest.
|
|
|
|
|
|
|
|
|
impl From<CannotConnectRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: CannotConnectRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::CannotConnectRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<ConnectToPeerRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: ConnectToPeerRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::ConnectToPeerRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<FileSearchRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: FileSearchRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::FileSearchRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<LoginRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: LoginRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::LoginRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<PeerAddressRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: PeerAddressRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::PeerAddressRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<RoomJoinRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: RoomJoinRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::RoomJoinRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<RoomLeaveRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: RoomLeaveRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::RoomLeaveRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<RoomMessageRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: RoomMessageRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::RoomMessageRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<SetListenPortRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: SetListenPortRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::SetListenPortRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
impl From<UserStatusRequest> for ServerRequest {
|
|
|
|
|
|
fn from(inner: UserStatusRequest) -> ServerRequest {
|
|
|
|
|
|
ServerRequest::UserStatusRequest(inner)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
impl WriteToPacket for ServerRequest {
|
|
|
impl WriteToPacket for ServerRequest {
|
|
|
fn write_to_packet(&self, packet: &mut MutPacket) -> io::Result<()> {
|
|
|
fn write_to_packet(&self, packet: &mut MutPacket) -> io::Result<()> {
|
|
|
@ -202,7 +260,7 @@ impl ValueDecode for ServerRequest { |
|
|
* CANNOT CONNECT *
|
|
|
* CANNOT CONNECT *
|
|
|
*================*/
|
|
|
*================*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct CannotConnectRequest {
|
|
|
pub struct CannotConnectRequest {
|
|
|
pub token: u32,
|
|
|
pub token: u32,
|
|
|
pub user_name: String,
|
|
|
pub user_name: String,
|
|
|
@ -235,7 +293,7 @@ impl ValueDecode for CannotConnectRequest { |
|
|
* CONNECT TO PEER *
|
|
|
* CONNECT TO PEER *
|
|
|
*=================*/
|
|
|
*=================*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct ConnectToPeerRequest {
|
|
|
pub struct ConnectToPeerRequest {
|
|
|
pub token: u32,
|
|
|
pub token: u32,
|
|
|
pub user_name: String,
|
|
|
pub user_name: String,
|
|
|
@ -276,7 +334,7 @@ impl ValueDecode for ConnectToPeerRequest { |
|
|
* FILE SEARCH *
|
|
|
* FILE SEARCH *
|
|
|
*=============*/
|
|
|
*=============*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct FileSearchRequest {
|
|
|
pub struct FileSearchRequest {
|
|
|
pub ticket: u32,
|
|
|
pub ticket: u32,
|
|
|
pub query: String,
|
|
|
pub query: String,
|
|
|
@ -309,7 +367,7 @@ impl ValueDecode for FileSearchRequest { |
|
|
* LOGIN *
|
|
|
* LOGIN *
|
|
|
*=======*/
|
|
|
*=======*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct LoginRequest {
|
|
|
pub struct LoginRequest {
|
|
|
// TODO: Rename to `user_name`.
|
|
|
// TODO: Rename to `user_name`.
|
|
|
pub username: String,
|
|
|
pub username: String,
|
|
|
@ -361,7 +419,7 @@ impl ValueDecode for LoginRequest { |
|
|
* PEER ADDRESS *
|
|
|
* PEER ADDRESS *
|
|
|
*==============*/
|
|
|
*==============*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct PeerAddressRequest {
|
|
|
pub struct PeerAddressRequest {
|
|
|
pub username: String,
|
|
|
pub username: String,
|
|
|
}
|
|
|
}
|
|
|
@ -390,7 +448,7 @@ impl ValueDecode for PeerAddressRequest { |
|
|
* ROOM JOIN *
|
|
|
* ROOM JOIN *
|
|
|
*===========*/
|
|
|
*===========*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct RoomJoinRequest {
|
|
|
pub struct RoomJoinRequest {
|
|
|
pub room_name: String,
|
|
|
pub room_name: String,
|
|
|
}
|
|
|
}
|
|
|
@ -421,7 +479,7 @@ impl ValueDecode for RoomJoinRequest { |
|
|
* ROOM LEAVE *
|
|
|
* ROOM LEAVE *
|
|
|
*============*/
|
|
|
*============*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct RoomLeaveRequest {
|
|
|
pub struct RoomLeaveRequest {
|
|
|
pub room_name: String,
|
|
|
pub room_name: String,
|
|
|
}
|
|
|
}
|
|
|
@ -452,7 +510,7 @@ impl ValueDecode for RoomLeaveRequest { |
|
|
* ROOM MESSAGE *
|
|
|
* ROOM MESSAGE *
|
|
|
*==============*/
|
|
|
*==============*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct RoomMessageRequest {
|
|
|
pub struct RoomMessageRequest {
|
|
|
pub room_name: String,
|
|
|
pub room_name: String,
|
|
|
pub message: String,
|
|
|
pub message: String,
|
|
|
@ -485,7 +543,7 @@ impl ValueDecode for RoomMessageRequest { |
|
|
* SET LISTEN PORT *
|
|
|
* SET LISTEN PORT *
|
|
|
*=================*/
|
|
|
*=================*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct SetListenPortRequest {
|
|
|
pub struct SetListenPortRequest {
|
|
|
pub port: u16,
|
|
|
pub port: u16,
|
|
|
}
|
|
|
}
|
|
|
@ -514,7 +572,7 @@ impl ValueDecode for SetListenPortRequest { |
|
|
* USER STATUS *
|
|
|
* USER STATUS *
|
|
|
*=============*/
|
|
|
*=============*/
|
|
|
|
|
|
|
|
|
#[derive(Debug, Eq, PartialEq)]
|
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
|
pub struct UserStatusRequest {
|
|
|
pub struct UserStatusRequest {
|
|
|
pub user_name: String,
|
|
|
pub user_name: String,
|
|
|
}
|
|
|
}
|
|
|
@ -571,6 +629,18 @@ mod tests { |
|
|
);
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_cannot_connect_request() {
|
|
|
|
|
|
let request = CannotConnectRequest {
|
|
|
|
|
|
token: 1337,
|
|
|
|
|
|
user_name: "alice".to_string(),
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::CannotConnectRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_cannot_connect_request() {
|
|
|
fn roundtrip_cannot_connect_request() {
|
|
|
roundtrip(ServerRequest::CannotConnectRequest(CannotConnectRequest {
|
|
|
roundtrip(ServerRequest::CannotConnectRequest(CannotConnectRequest {
|
|
|
@ -579,6 +649,19 @@ mod tests { |
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_connect_to_peer_request() {
|
|
|
|
|
|
let request = ConnectToPeerRequest {
|
|
|
|
|
|
token: 1337,
|
|
|
|
|
|
user_name: "alice".to_string(),
|
|
|
|
|
|
connection_type: "P".to_string(),
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::ConnectToPeerRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_connect_to_peer_request() {
|
|
|
fn roundtrip_connect_to_peer_request() {
|
|
|
roundtrip(ServerRequest::ConnectToPeerRequest(ConnectToPeerRequest {
|
|
|
roundtrip(ServerRequest::ConnectToPeerRequest(ConnectToPeerRequest {
|
|
|
@ -588,6 +671,18 @@ mod tests { |
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_file_search_request() {
|
|
|
|
|
|
let request = FileSearchRequest {
|
|
|
|
|
|
ticket: 1337,
|
|
|
|
|
|
query: "foo.txt".to_string(),
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::FileSearchRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_file_search_request() {
|
|
|
fn roundtrip_file_search_request() {
|
|
|
roundtrip(ServerRequest::FileSearchRequest(FileSearchRequest {
|
|
|
roundtrip(ServerRequest::FileSearchRequest(FileSearchRequest {
|
|
|
@ -596,6 +691,21 @@ mod tests { |
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_login_request() {
|
|
|
|
|
|
let request = LoginRequest {
|
|
|
|
|
|
username: "alice".to_string(),
|
|
|
|
|
|
password: "sekrit".to_string(),
|
|
|
|
|
|
digest: "abcdef".to_string(),
|
|
|
|
|
|
major: 13,
|
|
|
|
|
|
minor: 37,
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::LoginRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_login_request() {
|
|
|
fn roundtrip_login_request() {
|
|
|
roundtrip(ServerRequest::LoginRequest(LoginRequest {
|
|
|
roundtrip(ServerRequest::LoginRequest(LoginRequest {
|
|
|
@ -607,6 +717,17 @@ mod tests { |
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_peer_address_request() {
|
|
|
|
|
|
let request = PeerAddressRequest {
|
|
|
|
|
|
username: "alice".to_string(),
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::PeerAddressRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_peer_address_request() {
|
|
|
fn roundtrip_peer_address_request() {
|
|
|
roundtrip(ServerRequest::PeerAddressRequest(PeerAddressRequest {
|
|
|
roundtrip(ServerRequest::PeerAddressRequest(PeerAddressRequest {
|
|
|
@ -614,6 +735,17 @@ mod tests { |
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_room_join_request() {
|
|
|
|
|
|
let request = RoomJoinRequest {
|
|
|
|
|
|
room_name: "best room ever".to_string(),
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::RoomJoinRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_room_join_request() {
|
|
|
fn roundtrip_room_join_request() {
|
|
|
roundtrip(ServerRequest::RoomJoinRequest(RoomJoinRequest {
|
|
|
roundtrip(ServerRequest::RoomJoinRequest(RoomJoinRequest {
|
|
|
@ -621,10 +753,21 @@ mod tests { |
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_room_leave_request() {
|
|
|
|
|
|
let request = RoomLeaveRequest {
|
|
|
|
|
|
room_name: "worst room ever".to_string(),
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::RoomLeaveRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_room_leave_request() {
|
|
|
fn roundtrip_room_leave_request() {
|
|
|
roundtrip(ServerRequest::RoomLeaveRequest(RoomLeaveRequest {
|
|
|
roundtrip(ServerRequest::RoomLeaveRequest(RoomLeaveRequest {
|
|
|
room_name: "best room ever".to_string(),
|
|
|
|
|
|
|
|
|
room_name: "worst room ever".to_string(),
|
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -633,6 +776,18 @@ mod tests { |
|
|
roundtrip(ServerRequest::RoomListRequest)
|
|
|
roundtrip(ServerRequest::RoomListRequest)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_room_message_request() {
|
|
|
|
|
|
let request = RoomMessageRequest {
|
|
|
|
|
|
room_name: "best room ever".to_string(),
|
|
|
|
|
|
message: "hello world!".to_string(),
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::RoomMessageRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_room_message_request() {
|
|
|
fn roundtrip_room_message_request() {
|
|
|
roundtrip(ServerRequest::RoomMessageRequest(RoomMessageRequest {
|
|
|
roundtrip(ServerRequest::RoomMessageRequest(RoomMessageRequest {
|
|
|
@ -641,6 +796,15 @@ mod tests { |
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_set_listen_port_request() {
|
|
|
|
|
|
let request = SetListenPortRequest { port: 1337 };
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::SetListenPortRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_set_listen_port_request() {
|
|
|
fn roundtrip_set_listen_port_request() {
|
|
|
roundtrip(ServerRequest::SetListenPortRequest(SetListenPortRequest {
|
|
|
roundtrip(ServerRequest::SetListenPortRequest(SetListenPortRequest {
|
|
|
@ -648,6 +812,17 @@ mod tests { |
|
|
}))
|
|
|
}))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
fn from_user_status_request() {
|
|
|
|
|
|
let request = UserStatusRequest {
|
|
|
|
|
|
user_name: "alice".to_string(),
|
|
|
|
|
|
};
|
|
|
|
|
|
assert_eq!(
|
|
|
|
|
|
ServerRequest::from(request.clone()),
|
|
|
|
|
|
ServerRequest::UserStatusRequest(request)
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_user_status_request() {
|
|
|
fn roundtrip_user_status_request() {
|
|
|
roundtrip(ServerRequest::UserStatusRequest(UserStatusRequest {
|
|
|
roundtrip(ServerRequest::UserStatusRequest(UserStatusRequest {
|
|
|
|