feat: refactor prudp code and start working on refactoring rmc
This commit is contained in:
parent
7d24a71f09
commit
3ea7c7e671
37 changed files with 2029 additions and 456 deletions
121
src/main.rs
121
src/main.rs
|
|
@ -14,25 +14,21 @@ use simplelog::{ColorChoice, CombinedLogger, Config, LevelFilter, TerminalMode,
|
|||
use tokio::sync::RwLock;
|
||||
use tokio::task::JoinHandle;
|
||||
use crate::nex::account::Account;
|
||||
use crate::protocols::{auth, block_if_maintenance};
|
||||
use crate::protocols::auth::AuthProtocolConfig;
|
||||
use crate::protocols::matchmake_common::MatchmakeData;
|
||||
use crate::protocols::server::RMCProtocolServer;
|
||||
use crate::prudp::socket::{ActiveSecureConnectionData, EncryptionPair, Socket};
|
||||
use crate::prudp::socket::{EncryptionPair, Unsecure};
|
||||
use crate::prudp::packet::{VirtualPort};
|
||||
use crate::prudp::router::Router;
|
||||
use crate::prudp::secure::{generate_secure_encryption_pairs, read_secure_connection_data};
|
||||
use crate::rmc::message::RMCMessage;
|
||||
use crate::rmc::structures::RmcSerialize;
|
||||
use crate::prudp::sockaddr::PRUDPSockAddr;
|
||||
use crate::prudp::station_url::Type::PRUDP;
|
||||
|
||||
mod endianness;
|
||||
mod prudp;
|
||||
pub mod rmc;
|
||||
mod protocols;
|
||||
//mod protocols;
|
||||
|
||||
mod nex;
|
||||
mod grpc;
|
||||
mod kerberos;
|
||||
mod web;
|
||||
|
||||
static KERBEROS_SERVER_PASSWORD: Lazy<String> = Lazy::new(||{
|
||||
env::var("AUTH_SERVER_PASSWORD")
|
||||
|
|
@ -97,6 +93,7 @@ async fn main() {
|
|||
|
||||
start_servers().await;
|
||||
}
|
||||
/*
|
||||
|
||||
struct AuthServer{
|
||||
router: Arc<Router>,
|
||||
|
|
@ -236,74 +233,66 @@ async fn start_secure_server() -> SecureServer{
|
|||
router,
|
||||
socket,
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
async fn start_servers(){
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
let a = tokio::spawn(async{
|
||||
let (router_auth, _) =
|
||||
Router::new(SocketAddrV4::new(*OWN_IP_PRIVATE, *AUTH_SERVER_PORT)).await.expect("unable to start router");
|
||||
|
||||
let mut socket_auth = router_auth.add_socket(VirtualPort::new(1,10), Unsecure("CD&ML")).await
|
||||
.expect("unable to add socket");
|
||||
|
||||
let mut conn = socket_auth.accept().await.unwrap();
|
||||
info!("got conn");
|
||||
|
||||
if let Some(data) = conn.recv().await{
|
||||
let str = String::from_utf8(data).unwrap();
|
||||
|
||||
println!("{}", str)
|
||||
}
|
||||
});
|
||||
|
||||
let b = tokio::spawn(async{
|
||||
let auth_ip = SocketAddrV4::new(*OWN_IP_PRIVATE, *AUTH_SERVER_PORT);
|
||||
let auth_port = VirtualPort::new(1,10);
|
||||
|
||||
let auth_sockaddr = PRUDPSockAddr::new(auth_ip,auth_port);
|
||||
|
||||
|
||||
let (router_secure, _) =
|
||||
Router::new(SocketAddrV4::new(*OWN_IP_PRIVATE, *SECURE_SERVER_PORT)).await.expect("unable to start router");
|
||||
|
||||
let mut socket_secure = router_secure.add_socket(VirtualPort::new(1,10), Unsecure("CD&ML")).await
|
||||
.expect("unable to add socket");
|
||||
|
||||
let conn = socket_secure.connect(auth_sockaddr).await.unwrap();
|
||||
|
||||
let conn = conn.duplicate_sender();
|
||||
|
||||
conn.send("Yippie".as_bytes().to_owned()).await;
|
||||
|
||||
info!("got conn");
|
||||
});
|
||||
|
||||
a.await;
|
||||
b.await;
|
||||
|
||||
/*
|
||||
#[cfg(feature = "auth")]
|
||||
let auth_server = start_auth_server().await;
|
||||
#[cfg(feature = "secure")]
|
||||
let secure_server = start_secure_server().await;
|
||||
let web_server = web::start_web().await;
|
||||
|
||||
#[cfg(feature = "auth")]
|
||||
auth_server.join_handle.await.expect("auth server crashed");
|
||||
#[cfg(feature = "secure")]
|
||||
secure_server.join_handle.await.expect("auth server crashed");
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test{
|
||||
use std::io::Cursor;
|
||||
use std::num::ParseIntError;
|
||||
use std::str::from_utf8;
|
||||
use hmac::digest::consts::U5;
|
||||
use rc4::{KeyInit, Rc4, StreamCipher};
|
||||
use crate::prudp::packet::PRUDPPacket;
|
||||
use crate::rmc;
|
||||
|
||||
fn from_hex_stream(val: &str) -> Result<Vec<u8>, ParseIntError> {
|
||||
let res: Result<Vec<u8>, _> = val.as_bytes()
|
||||
.chunks_exact(2)
|
||||
.map(|c| from_utf8(c).expect("unable to convert back to string"))
|
||||
.map(|s| u8::from_str_radix(s, 16))
|
||||
.collect();
|
||||
|
||||
res
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn simulate_packets(){
|
||||
let val = from_hex_stream("ead001037d00afa1e200a5000200d9e4a4050368c18c6de4e2fb1cc40f0c020100768744db99f92c5005a061fd2a1df280cd64d5c1a565952c6befa607cbaf34661312b16db0fa6fccfb81e28b5a3a9bed02b49152bbc99cc112b7e29b9e45ec3d4b89df0fe71390883d9a927c264d07ada0de9cd28499e3ccdf3fd079e4a9848d4d783778c42da2af06106a7326634dc5bec5c3438ef18e30109839ffcc").expect("uuuuh");
|
||||
|
||||
let mut packet = PRUDPPacket::new(&mut Cursor::new(&val)).expect("invalid packet");
|
||||
|
||||
let mut rc4: Rc4<U5> =
|
||||
Rc4::new_from_slice("CD&ML".as_bytes().into()).expect("invalid key");
|
||||
|
||||
rc4.apply_keystream(&mut packet.payload);
|
||||
|
||||
println!("packet: {:?}", packet);
|
||||
|
||||
let rmc_packet = rmc::message::RMCMessage::new(&mut Cursor::new(&packet.payload)).expect("unable to read message");
|
||||
|
||||
let mut a = Cursor::new(&rmc_packet.rest_of_data);
|
||||
|
||||
//let pid = rmc::structures::string::read(&mut a).expect("unable to read pid");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn simulate_packets_response(){
|
||||
let val = from_hex_stream("ead001032501a1af6200a500010013ffcdbc3a2ebc44efc6e38ea32a72b40201002e8644db19fe2a5005a2637d2a16f3b1fe5633037c1ed61c5aefad8afebdf2ff8600e9350fba1298b570c70f6dd647eac2d3faf0ab74ef761e2ee43dc10e249e5f91aed6813dcc04b3c707d9442b6e353b9b0b654e98f860fe5379c41d3c2a1874b7dd37ebf499e03bd2fd3e9a9203c0959feb760c38f504dcd0c9e99b17fd410657da4efa3e01c8a68ab3042d6d489788d5580778d32249cdf1fba8bf68cf4019d116ea7c580622ea1e3635139d91b44635d5e95b6c35b33898fdc0117fa6fc7162840d07a49f1e7089aa0ea65409a8ddeb2334449ba73a0ff7de462cf4a706a696de0f0521b84ae5a3f8587f3585d202d3cc0fb0451519c1b830b5e3cdd6de52e9add7325cbbf08a7c2f8b875934942b226703a22b4bc8931932dab055049051e4144b02").expect("uuuuh");
|
||||
|
||||
let mut packet = PRUDPPacket::new(&mut Cursor::new(&val)).expect("invalid packet");
|
||||
|
||||
let mut rc4: Rc4<U5> =
|
||||
Rc4::new_from_slice("CD&ML".as_bytes().into()).expect("invalid key");
|
||||
|
||||
rc4.apply_keystream(&mut packet.payload);
|
||||
|
||||
println!("packet: {:?}", packet);
|
||||
}
|
||||
web_server.await.expect("webserver crashed");*/
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue