mirror of
https://github.com/YGGverse/titanit.git
synced 2026-04-02 10:05:35 +00:00
fix header bytes read
This commit is contained in:
parent
cfeb6bb62a
commit
275abf3b39
1 changed files with 37 additions and 25 deletions
62
src/main.rs
62
src/main.rs
|
|
@ -59,14 +59,37 @@ fn handle(
|
||||||
//println!("[{}] [info] [{peer}] New connection", now());
|
//println!("[{}] [info] [{peer}] New connection", now());
|
||||||
match connection {
|
match connection {
|
||||||
Ok(mut stream) => {
|
Ok(mut stream) => {
|
||||||
let mut input = vec![0; titanite::HEADER_MAX_LEN];
|
let mut header = Vec::with_capacity(HEADER_MAX_LEN);
|
||||||
match stream.read(&mut input) {
|
loop {
|
||||||
Ok(0) => println!("[{}] [warning] [{peer}] Peer closed connection", now()),
|
let mut buffer = vec![0];
|
||||||
Ok(s) => match Request::from_bytes(&input[..s]) {
|
match stream.read(&mut buffer) {
|
||||||
Ok(request) => match request {
|
Ok(0) => println!("[{}] [warning] [{peer}] Peer closed connection", now()),
|
||||||
Request::Gemini(this) => gemini(this, argument, peer, &mut stream),
|
Ok(_) => {
|
||||||
Request::Titan(this) => titan(this, argument, peer, &mut stream),
|
header.push(buffer[0]);
|
||||||
},
|
if header.len() > HEADER_MAX_LEN || buffer[0] == b'\n' {
|
||||||
|
return match Request::from_bytes(&header) {
|
||||||
|
Ok(request) => match request {
|
||||||
|
Request::Gemini(this) => {
|
||||||
|
gemini(this, &argument, &peer, &mut stream)
|
||||||
|
}
|
||||||
|
Request::Titan(this) => {
|
||||||
|
titan(this, &argument, &peer, &mut stream)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(e) => send(
|
||||||
|
&response::failure::temporary::General {
|
||||||
|
message: Some("Internal server error".to_string()),
|
||||||
|
}
|
||||||
|
.into_bytes(),
|
||||||
|
&mut stream,
|
||||||
|
|result| match result {
|
||||||
|
Ok(()) => println!("[{}] [warning] [{peer}] {e}", now()),
|
||||||
|
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
Err(e) => send(
|
Err(e) => send(
|
||||||
&response::failure::temporary::General {
|
&response::failure::temporary::General {
|
||||||
message: Some("Internal server error".to_string()),
|
message: Some("Internal server error".to_string()),
|
||||||
|
|
@ -78,18 +101,7 @@ fn handle(
|
||||||
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
},
|
}
|
||||||
Err(e) => send(
|
|
||||||
&response::failure::temporary::General {
|
|
||||||
message: Some("Internal server error".to_string()),
|
|
||||||
}
|
|
||||||
.into_bytes(),
|
|
||||||
&mut stream,
|
|
||||||
|result| match result {
|
|
||||||
Ok(()) => println!("[{}] [warning] [{peer}] {e}", now()),
|
|
||||||
Err(e) => println!("[{}] [error] [{peer}] {e}", now()),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => println!("[{}] [warning] [{peer}] Handshake issue: {e}", now()),
|
Err(e) => println!("[{}] [warning] [{peer}] Handshake issue: {e}", now()),
|
||||||
|
|
@ -98,8 +110,8 @@ fn handle(
|
||||||
|
|
||||||
fn gemini(
|
fn gemini(
|
||||||
gemini: titanite::request::Gemini,
|
gemini: titanite::request::Gemini,
|
||||||
argument: Arc<Argument>,
|
argument: &Argument,
|
||||||
peer: SocketAddr,
|
peer: &SocketAddr,
|
||||||
stream: &mut TlsStream<TcpStream>,
|
stream: &mut TlsStream<TcpStream>,
|
||||||
) {
|
) {
|
||||||
use titanite::*;
|
use titanite::*;
|
||||||
|
|
@ -119,7 +131,7 @@ fn gemini(
|
||||||
let l = item.file.read_at(&mut data, read as u64).unwrap();
|
let l = item.file.read_at(&mut data, read as u64).unwrap();
|
||||||
stream.write_all(&data[..l]).unwrap();
|
stream.write_all(&data[..l]).unwrap();
|
||||||
read += l;
|
read += l;
|
||||||
println!("[{}] [info] [{peer}] Chunk sent: {l} ({read} total)", now());
|
// println!("[{}] [info] [{peer}] Chunk sent: {l} ({read} total)", now());
|
||||||
// EOF
|
// EOF
|
||||||
if l == 0 {
|
if l == 0 {
|
||||||
stream.flush().unwrap();
|
stream.flush().unwrap();
|
||||||
|
|
@ -147,8 +159,8 @@ fn gemini(
|
||||||
|
|
||||||
fn titan(
|
fn titan(
|
||||||
titan: titanite::request::Titan,
|
titan: titanite::request::Titan,
|
||||||
argument: Arc<Argument>,
|
argument: &Argument,
|
||||||
peer: SocketAddr,
|
peer: &SocketAddr,
|
||||||
stream: &mut TlsStream<TcpStream>,
|
stream: &mut TlsStream<TcpStream>,
|
||||||
) {
|
) {
|
||||||
use titanite::*;
|
use titanite::*;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue