Skip to content
This repository was archived by the owner on Mar 15, 2023. It is now read-only.

Commit 7ba0c9d

Browse files
committed
Cleanup and new packet system impl
1 parent 3c72c88 commit 7ba0c9d

6 files changed

Lines changed: 44 additions & 57 deletions

File tree

Cargo.lock

Lines changed: 3 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ edition = "2021"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[dependencies]
9-
blaze-pk = { path = "../BlazePK" }
9+
blaze-pk = "0.2.3"
1010
blaze-schannel = "0.1.0"
1111
egui = "0.19.0"
1212
eframe = "0.19.0"

src/app.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::sync::{Arc, RwLock, TryLockResult};
1+
use std::sync::{Arc, RwLock};
22
use std::thread;
33
use egui::{Align, Button, Color32, Layout, Vec2};
44
use egui_extras::RetainedImage;
@@ -34,8 +34,7 @@ impl App {
3434

3535
thread::spawn(move || {
3636
let shared_state = shared_state.clone();
37-
run_server(shared_state.clone())
38-
.expect("Failed to start server");
37+
run_server(shared_state.clone());
3938
});
4039

4140
app
@@ -54,7 +53,7 @@ impl App {
5453
.map_err(|_| AppError::InvalidPort)?;
5554

5655
let mut state = self.state.write()
57-
.map_err(|err| AppError::FailedServerStart)?;
56+
.map_err(|_| AppError::FailedServerStart)?;
5857
state.host = host.clone();
5958
state.port = port.clone();
6059
state.status = AppStatus::Redirecting { host, port };
@@ -65,7 +64,7 @@ impl App {
6564
}
6665

6766
impl eframe::App for App {
68-
fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
67+
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
6968
egui::CentralPanel::default().show(ctx, |ui| {
7069
let styles = ui.style_mut();
7170
styles.visuals.widgets.noninteractive.bg_fill = Color32::from_rgb(0, 0, 0);

src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ fn main() {
1111
native_options.resizable = false;
1212
native_options.initial_window_size = Some(Vec2::new(300f32, 250f32));
1313
eframe::run_native("Pocket Relay Client", native_options,
14-
Box::new(|cc| Box::new(App::new())));
14+
Box::new(|_| Box::new(App::new())));
1515

1616
}

src/server.rs

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,12 @@
11
use std::{io, thread};
2-
use std::io::{Cursor, Write};
32
use std::net::{TcpListener, TcpStream};
43
use std::sync::{Arc, PoisonError, RwLock};
5-
use blaze_pk::error::TdfError;
6-
use blaze_pk::io::Writable;
7-
use blaze_pk::packet::{DecodedPacket, Packet};
8-
use blaze_pk::tdf::Tdf;
4+
use blaze_pk::{group, OpaquePacket, packet, PacketError, Packets, TdfOptional};
95
use blaze_schannel::{CertStore, SchannelCred, TlsStream};
106
use crate::shared::SharedState;
117

12-
#[derive(Debug)]
13-
pub enum ServerError {
14-
IO(io::Error),
15-
}
16-
178
/// Starts the server
18-
pub fn run_server(state: Arc<RwLock<SharedState>>) -> Result<(), ServerError> {
9+
pub fn run_server(state: Arc<RwLock<SharedState>>) {
1910
// Import redirector store
2011
let cert_store = {
2112
let store_bytes = include_bytes!("redirector.pfx");
@@ -48,14 +39,13 @@ pub fn run_server(state: Arc<RwLock<SharedState>>) -> Result<(), ServerError> {
4839
let _ = handle_client(stream, state);
4940
});
5041
}
51-
Ok(())
5242
}
5343

5444
#[derive(Debug)]
5545
pub enum ClientError {
5646
LockPoison,
5747
IOError(io::Error),
58-
PacketError
48+
PacketError(PacketError)
5949
}
6050

6151
impl<Guard> From<PoisonError<Guard>> for ClientError {
@@ -70,37 +60,44 @@ impl From<io::Error> for ClientError {
7060
}
7161
}
7262

73-
impl From<TdfError> for ClientError {
74-
fn from(_: TdfError) -> Self {
75-
ClientError::PacketError
63+
impl From<PacketError> for ClientError {
64+
fn from(err: PacketError) -> Self {
65+
ClientError::PacketError(err)
66+
}
67+
}
68+
69+
packet! {
70+
struct RedirectPacket {
71+
ADDR: TdfOptional<AddressGroup>,
72+
SECU: bool,
73+
XDNS: bool,
74+
}
75+
}
76+
77+
group! {
78+
struct AddressGroup {
79+
HOST: String,
80+
PORT: u16
7681
}
7782
}
7883

7984
pub fn handle_client(
8085
stream: &mut TlsStream<TcpStream>,
8186
state: Arc<RwLock<SharedState>>,
8287
) -> Result<(), ClientError> {
83-
let packet = DecodedPacket::read(stream)?;
84-
let content = {
85-
let state = state.read()?;
86-
let content = vec![
87-
Tdf::optional("ADDR", 0, Some(
88-
Tdf::group("VALUE", vec![
89-
Tdf::str("HOST", &state.host),
90-
Tdf::num("PORT", (*&state.port) as u64),
91-
])
92-
)),
93-
Tdf::bool("SECU", false),
94-
Tdf::bool("XDNS", false),
95-
];
96-
content
88+
let packet = OpaquePacket::read(stream)?;
89+
let state = state.read()?;
90+
let content = RedirectPacket {
91+
ADDR: TdfOptional::default_some("VALUE", AddressGroup {
92+
HOST: state.host.clone(),
93+
PORT: state.port,
94+
}),
95+
SECU: false,
96+
XDNS: false
9797
};
98-
let response = Packet::response(&packet, content);
99-
let out_cursor = &mut Cursor::new(Vec::new());
100-
response.write(out_cursor)?;
101-
let stream = stream;
102-
let bytes = out_cursor.get_mut();
103-
stream.write_all(bytes)?;
98+
99+
let response = Packets::response(&packet, content);
100+
response.write(stream)?;
104101
stream.shutdown()?;
105102
Ok(())
106103
}

src/shared.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use std::fmt;
2-
use std::fmt::{Display, Write};
32

43
/// The default host to redirect to
54
pub const DEFAULT_HOST: &str = "127.0.0.1";
@@ -32,7 +31,7 @@ pub enum AppStatus {
3231
}
3332

3433

35-
impl Display for AppStatus {
34+
impl fmt::Display for AppStatus {
3635
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3736
match self {
3837
Self::Redirecting { host, port } => f.write_str(&format!("Redirecting ({}:{})", host, port)),
@@ -50,7 +49,7 @@ pub enum AppError {
5049
FailedServerStart,
5150
}
5251

53-
impl Display for AppError {
52+
impl fmt::Display for AppError {
5453
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
5554
match self {
5655
AppError::InvalidPort => f.write_str("Invalid port"),

0 commit comments

Comments
 (0)