mirror of
https://github.com/MeexReay/sRAC.git
synced 2025-06-23 18:12:57 +03:00
move proto stuff to the new module + add splash.txt
This commit is contained in:
parent
ff3e779962
commit
9fc712db85
9
splash.txt
Normal file
9
splash.txt
Normal file
@ -0,0 +1,9 @@
|
||||
[7m[38;5;236m [0m[38;5;1;48;5;236m [38;5;242;48;5;237m▗[38;5;243;48;5;239m▆[48;5;244m [38;5;244;48;5;241m▇[38;5;242;48;5;238m▄[38;5;236;48;5;237m╴[48;5;236m [38;5;238;48;5;246m▊[38;5;244;48;5;188m▗[38;5;145;48;5;240m▍[38;5;239;48;5;248m▍[38;5;246;48;5;251m▖[38;5;102;48;5;237m▏[38;5;250;48;5;238m▄[38;5;248;48;5;239m━[38;5;238;48;5;237m╴[48;5;236m [38;5;237;48;5;243m▋[38;5;239;48;5;250m╺[38;5;251;48;5;242m▁[38;5;248;48;5;239m▘[38;5;251;48;5;238m▗[38;5;242;48;5;237m▖[38;5;251;48;5;239m▗[38;5;243;48;5;238m▏[38;5;247;48;5;236m▅[38;5;248;48;5;237m▅[38;5;246;48;5;239m▖[38;5;248;48;5;237m▄[38;5;247;48;5;236m▅[38;5;248;48;5;237m▖[38;5;251;48;5;239m▗[38;5;246;48;5;238m▄[38;5;250m▄[38;5;249;48;5;240m╼[38;5;246;48;5;237m▄[38;5;237;48;5;241m▉[38;5;248;48;5;59m┲[38;5;145;48;5;238m▄[38;5;239;48;5;237m▏[0m
|
||||
[7m[38;5;236m [0m[38;5;243;48;5;239m▗[48;5;244m [38;5;250m▂[38;5;254;48;5;102m▃[38;5;253m▃[48;5;244m▂[48;5;102m▂[38;5;255m▃[38;5;254m▂[38;5;246;48;5;244m▁ [38;5;239;48;5;243m▝[48;5;237m▏[48;5;236m [38;5;237;48;5;249m▌[38;5;248;48;5;237m▌[38;5;240;48;5;248m▖[38;5;248;48;5;59m▌[38;5;239;48;5;252m▌[38;5;246;48;5;240m▎[38;5;250;48;5;238m▊[38;5;236m╵[38;5;246;48;5;237m▂[48;5;236m [38;5;102m▗[38;5;250;48;5;240m▂[38;5;242;48;5;252m▇[38;5;250;48;5;243m▊[38;5;239;48;5;251m▌[38;5;247;48;5;239m▎[38;5;241;48;5;250m▎[38;5;240;48;5;246m▊[38;5;244;48;5;248m╻[38;5;241;48;5;247m▃[38;5;240;48;5;244m▉[38;5;250;48;5;241m▋[38;5;247;48;5;238m▂[38;5;250;48;5;242m▋[38;5;59;48;5;250m▍[38;5;246;48;5;236m▎[38;5;240;48;5;250m▎[38;5;242;48;5;237m▎[38;5;249;48;5;238m▉[38;5;145;48;5;239m▗[38;5;240;48;5;247m▗[38;5;244;48;5;252m▍[38;5;243;48;5;237m▍[0m
|
||||
[38;5;240;48;5;237m▗[38;5;242;48;5;244m▏ [38;5;254;48;5;246m▗[48;5;231m [38;5;246;48;5;254m▝[48;5;244m▏ [38;5;243;48;5;238m▌[48;5;236m [38;5;237;48;5;244m▇[48;5;59m▇[38;5;236;48;5;237m▇▇[38;5;237;48;5;244m▇[38;5;236;48;5;242m▆[48;5;246m▆[48;5;237m╴[48;5;102m▆[48;5;236m [48;5;237m╴[48;5;247m▆[48;5;250m▆[38;5;237;48;5;242m▇[48;5;59m▇[38;5;236;48;5;250m▆[48;5;247m▆[38;5;239;48;5;246m▊[38;5;240;48;5;248m▁[48;5;247m▁[38;5;249;48;5;239m▘[38;5;236;48;5;244m▆[48;5;250m▆[38;5;237;48;5;240m▇[38;5;236;48;5;102m▆[48;5;237m╴[48;5;246m▆[38;5;237;48;5;239m▇[38;5;236;48;5;246m▆[48;5;237m╴[48;5;250m▆[48;5;248m▆[48;5;237m╴[0m
|
||||
[38;5;237;48;5;243m▋[48;5;244m [38;5;244;48;5;248m▊[38;5;251;48;5;255m▏[48;5;231m [38;5;244;48;5;188m▗[38;5;246;48;5;255m▆[38;5;255;48;5;231m▏[38;5;246;48;5;254m▗[38;5;244m▆[38;5;253;48;5;231m▎ [38;5;252;48;5;102m▌[48;5;244m [38;5;243;48;5;238m▊[48;5;236m [0m
|
||||
[38;5;240;48;5;237m▝[38;5;242;48;5;244m▏ [38;5;244;48;5;250m▊[38;5;253;48;5;231m▁ [38;5;254;48;5;251m▇[38;5;255;48;5;248m▇[38;5;254;48;5;231m▁[38;5;255;48;5;253m▇[38;5;254;48;5;246m▇[48;5;231m▏[38;5;255m▁[38;5;254;48;5;246m▌[48;5;244m [38;5;243;48;5;238m▌[48;5;236m [38;5;242;48;5;237m▗[38;5;246;48;5;236m▄▄▄ [0m
|
||||
[7m[38;5;236m [0m[38;5;243;48;5;239m▝[48;5;244m [38;5;244;48;5;249m▇[48;5;253m▅[38;5;254;48;5;244m▘[38;5;244;48;5;247m▇[48;5;145m▇[48;5;248m▇[38;5;250;48;5;244m▝[38;5;102;48;5;255m▅[38;5;244;48;5;251m▆[48;5;244m [38;5;239;48;5;243m▗[48;5;237m▏[48;5;236m [38;5;250;48;5;239m▝[38;5;249m▃[38;5;248;48;5;237m▃[38;5;247;48;5;243m▋[48;5;236m [38;5;237;48;5;238m▊[38;5;249;48;5;242m┓[38;5;250;48;5;238m▁[38;5;102m▋[38;5;242;48;5;237m╺[38;5;244;48;5;242m▁[38;5;246;48;5;238m▆[38;5;237;48;5;242m▉[38;5;247;48;5;238m▌[38;5;237;48;5;242m▉[38;5;246;48;5;238m▌[48;5;240m▗[38;5;243;48;5;238m▂[38;5;247m▆[38;5;238;48;5;242m▉[38;5;247;48;5;241m▖[38;5;102;48;5;240m▘[38;5;246;48;5;239m╸[38;5;237;48;5;102m▖[38;5;236;48;5;244m▗[48;5;237m╴[38;5;237;48;5;238m▉[38;5;59m▖[38;5;240;48;5;237m▁[38;5;239m▁[38;5;240m▁[38;5;242;48;5;238m▗[38;5;239;48;5;237m┎[0m
|
||||
[7m[38;5;236m [0m[38;5;1;48;5;236m [38;5;242;48;5;237m▝[38;5;239;48;5;243m▂[48;5;244m [38;5;241m▁[38;5;238;48;5;242m▄[38;5;236;48;5;237m╴[48;5;236m [38;5;248;48;5;238m▗[48;5;240m▘[38;5;237;48;5;59m▉[38;5;244;48;5;239m▉[48;5;236m [38;5;237;48;5;238m▊[38;5;247m▊[38;5;238;48;5;249m▇[38;5;246;48;5;237m▊[38;5;238;48;5;102m▌[38;5;239;48;5;244m┗[38;5;243;48;5;248m▍[38;5;238;48;5;244m▉[48;5;248m▝[38;5;249;48;5;239m▂[38;5;145;48;5;240m▋[38;5;240;48;5;248m▌[38;5;237;48;5;102m▗[38;5;239m▎[38;5;238;48;5;243m▊[38;5;237;48;5;246m▝[38;5;247;48;5;238m▃[38;5;244m╴[38;5;238;48;5;244m▋[38;5;247;48;5;237m▍[48;5;236m [38;5;237;48;5;239m▋[38;5;240;48;5;238m▌[38;5;239;48;5;59m▎[38;5;238;48;5;240m▗[48;5;59m▎[38;5;239;48;5;242m▌[38;5;238;48;5;240m▍[0m
|
||||
[7m[38;5;236m [0m[38;5;1;48;5;236m [38;5;236;48;5;237m╴[38;5;237;48;5;242m▆[48;5;243m▄[38;5;238;48;5;244m▃▂[38;5;236;48;5;243m▁▁[38;5;239;48;5;244m▃[38;5;237;48;5;243m▃[48;5;242m▅[48;5;239m▇[48;5;236m [38;5;236;48;5;237m▇[48;5;236m [48;5;237m▇[48;5;236m [48;5;237m▇[48;5;236m [48;5;237m▇[48;5;236m [48;5;238m▇[48;5;237m▇[48;5;236m [48;5;238m▇▇[38;5;248m▝[38;5;236;48;5;237m▇[48;5;236m [48;5;237m▇[48;5;236m [48;5;237m▇[48;5;238m▇[48;5;236m [48;5;239m▆[48;5;237m▇▇▇▇▇[0m
|
||||
[?25h
|
@ -26,7 +26,7 @@ pub struct Context {
|
||||
pub messages: RwLock<Vec<u8>>,
|
||||
pub accounts: RwLock<Vec<Account>>,
|
||||
pub messages_offset: AtomicU64,
|
||||
pub notifications: RwLock<HashMap<u32, Vec<u8>>>,
|
||||
pub notifications: RwLock<HashMap<u32, Vec<u8>>>, // u32 - ip
|
||||
pub timeouts: RwLock<HashMap<u32, Duration>>,
|
||||
}
|
||||
|
||||
|
125
src/main.rs
125
src/main.rs
@ -1,30 +1,16 @@
|
||||
use std::{
|
||||
error::Error,
|
||||
fs,
|
||||
io::{Read, Write},
|
||||
net::{SocketAddr, TcpListener},
|
||||
sync::Arc,
|
||||
thread,
|
||||
};
|
||||
|
||||
use log::{debug, info};
|
||||
use std::{fs, sync::Arc};
|
||||
|
||||
use clap::Parser;
|
||||
use rustls::{
|
||||
ServerConfig, ServerConnection, StreamOwned,
|
||||
pki_types::{CertificateDer, PrivateKeyDer, pem::PemObject},
|
||||
};
|
||||
use log::info;
|
||||
|
||||
use crate::{
|
||||
ctx::{Account, Context},
|
||||
rac::accept_rac_stream,
|
||||
wrac::accept_wrac_stream,
|
||||
proto::run_listener,
|
||||
};
|
||||
|
||||
mod ctx;
|
||||
mod logic;
|
||||
mod rac;
|
||||
mod wrac;
|
||||
pub mod ctx;
|
||||
pub mod logic;
|
||||
pub mod proto;
|
||||
|
||||
fn load_accounts(accounts_file: Option<String>) -> Vec<Account> {
|
||||
if let Some(accounts_file) = accounts_file.clone() {
|
||||
@ -55,100 +41,9 @@ fn load_messages(messages_file: Option<String>) -> Vec<u8> {
|
||||
}
|
||||
}
|
||||
|
||||
fn accept_stream(
|
||||
stream: impl Read + Write,
|
||||
addr: SocketAddr,
|
||||
ctx: Arc<Context>,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
if ctx.args.enable_wrac {
|
||||
accept_wrac_stream(stream, addr, ctx)?;
|
||||
} else {
|
||||
accept_rac_stream(stream, addr, ctx)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn run_normal_listener(ctx: Arc<Context>) {
|
||||
let listener =
|
||||
TcpListener::bind(&ctx.args.host).expect("error trying bind to the provided addr");
|
||||
|
||||
for stream in listener.incoming() {
|
||||
let Ok(stream) = stream else { continue };
|
||||
|
||||
let ctx = ctx.clone();
|
||||
|
||||
thread::spawn(move || {
|
||||
let Ok(addr) = stream.peer_addr() else {
|
||||
return;
|
||||
};
|
||||
match accept_stream(stream, addr, ctx) {
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
debug!("{}", e)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fn run_secure_listener(ctx: Arc<Context>) {
|
||||
let listener =
|
||||
TcpListener::bind(&ctx.args.host).expect("error trying bind to the provided addr");
|
||||
|
||||
let server_config = Arc::new(
|
||||
ServerConfig::builder()
|
||||
.with_no_client_auth()
|
||||
.with_single_cert(
|
||||
CertificateDer::pem_file_iter(
|
||||
ctx.args.ssl_cert.clone().expect("--ssl-cert is required"),
|
||||
)
|
||||
.unwrap()
|
||||
.map(|cert| cert.unwrap())
|
||||
.collect(),
|
||||
PrivateKeyDer::from_pem_file(
|
||||
ctx.args.ssl_key.clone().expect("--ssl-key is required"),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
for stream in listener.incoming() {
|
||||
let Ok(stream) = stream else { continue };
|
||||
|
||||
let ctx = ctx.clone();
|
||||
let server_config = server_config.clone();
|
||||
|
||||
thread::spawn(move || {
|
||||
let Ok(addr) = stream.peer_addr() else {
|
||||
return;
|
||||
};
|
||||
|
||||
let Ok(connection) = ServerConnection::new(server_config) else {
|
||||
return;
|
||||
};
|
||||
let mut stream = StreamOwned::new(connection, stream);
|
||||
|
||||
while stream.conn.is_handshaking() {
|
||||
let Ok(_) = stream.conn.complete_io(&mut stream.sock) else {
|
||||
return;
|
||||
};
|
||||
}
|
||||
|
||||
match accept_stream(stream, addr, ctx) {
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
debug!("{}", e)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Parser, Debug)]
|
||||
#[command(version)]
|
||||
struct Args {
|
||||
pub struct Args {
|
||||
/// Server host
|
||||
#[arg(short = 'H', long)]
|
||||
host: String,
|
||||
@ -219,9 +114,5 @@ fn main() {
|
||||
|
||||
info!("Server started on {}", &args.host);
|
||||
|
||||
if args.enable_ssl {
|
||||
run_secure_listener(context);
|
||||
} else {
|
||||
run_normal_listener(context);
|
||||
}
|
||||
run_listener(context);
|
||||
}
|
||||
|
120
src/proto/mod.rs
Normal file
120
src/proto/mod.rs
Normal file
@ -0,0 +1,120 @@
|
||||
use std::{
|
||||
error::Error,
|
||||
io::{Read, Write},
|
||||
net::{SocketAddr, TcpListener},
|
||||
sync::Arc,
|
||||
thread,
|
||||
};
|
||||
|
||||
use log::debug;
|
||||
use rustls::{
|
||||
ServerConfig, ServerConnection, StreamOwned,
|
||||
pki_types::{CertificateDer, PrivateKeyDer, pem::PemObject},
|
||||
};
|
||||
|
||||
use crate::{
|
||||
ctx::Context,
|
||||
proto::{rac::accept_rac_stream, wrac::accept_wrac_stream},
|
||||
};
|
||||
|
||||
pub mod rac;
|
||||
pub mod wrac;
|
||||
|
||||
fn accept_stream(
|
||||
stream: impl Read + Write,
|
||||
addr: SocketAddr,
|
||||
ctx: Arc<Context>,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
if ctx.args.enable_wrac {
|
||||
accept_wrac_stream(stream, addr, ctx)?;
|
||||
} else {
|
||||
accept_rac_stream(stream, addr, ctx)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn run_normal_listener(ctx: Arc<Context>) {
|
||||
let listener =
|
||||
TcpListener::bind(&ctx.args.host).expect("error trying bind to the provided addr");
|
||||
|
||||
for stream in listener.incoming() {
|
||||
let Ok(stream) = stream else { continue };
|
||||
|
||||
let ctx = ctx.clone();
|
||||
|
||||
thread::spawn(move || {
|
||||
let Ok(addr) = stream.peer_addr() else {
|
||||
return;
|
||||
};
|
||||
match accept_stream(stream, addr, ctx) {
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
debug!("{}", e)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fn run_secure_listener(ctx: Arc<Context>) {
|
||||
let listener =
|
||||
TcpListener::bind(&ctx.args.host).expect("error trying bind to the provided addr");
|
||||
|
||||
let server_config = Arc::new(
|
||||
ServerConfig::builder()
|
||||
.with_no_client_auth()
|
||||
.with_single_cert(
|
||||
CertificateDer::pem_file_iter(
|
||||
ctx.args.ssl_cert.clone().expect("--ssl-cert is required"),
|
||||
)
|
||||
.unwrap()
|
||||
.map(|cert| cert.unwrap())
|
||||
.collect(),
|
||||
PrivateKeyDer::from_pem_file(
|
||||
ctx.args.ssl_key.clone().expect("--ssl-key is required"),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
for stream in listener.incoming() {
|
||||
let Ok(stream) = stream else { continue };
|
||||
|
||||
let ctx = ctx.clone();
|
||||
let server_config = server_config.clone();
|
||||
|
||||
thread::spawn(move || {
|
||||
let Ok(addr) = stream.peer_addr() else {
|
||||
return;
|
||||
};
|
||||
|
||||
let Ok(connection) = ServerConnection::new(server_config) else {
|
||||
return;
|
||||
};
|
||||
let mut stream = StreamOwned::new(connection, stream);
|
||||
|
||||
while stream.conn.is_handshaking() {
|
||||
let Ok(_) = stream.conn.complete_io(&mut stream.sock) else {
|
||||
return;
|
||||
};
|
||||
}
|
||||
|
||||
match accept_stream(stream, addr, ctx) {
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
debug!("{}", e)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run_listener(ctx: Arc<Context>) {
|
||||
if ctx.args.enable_ssl {
|
||||
run_secure_listener(ctx);
|
||||
} else {
|
||||
run_normal_listener(ctx);
|
||||
}
|
||||
}
|
@ -38,13 +38,13 @@ pub fn accept_rac_stream(
|
||||
)?)?;
|
||||
}
|
||||
} else if buf[0] == 0x01 {
|
||||
let mut buf = vec![0; 1024];
|
||||
let mut buf = vec![0; ctx.args.message_limit];
|
||||
let size = stream.read(&mut buf)?;
|
||||
buf.truncate(size);
|
||||
|
||||
on_send_message(ctx.clone(), addr.clone(), buf)?;
|
||||
} else if buf[0] == 0x02 {
|
||||
let mut buf = vec![0; 8192];
|
||||
let mut buf = vec![0; ctx.args.message_limit + 2 + 512]; // FIXME: softcode this (512 = name + password)
|
||||
let size = stream.read(&mut buf)?;
|
||||
buf.truncate(size);
|
||||
|
Loading…
x
Reference in New Issue
Block a user