read write functions writen and done

This commit is contained in:
Mars Ultor
2025-04-20 12:26:05 -05:00
parent bd33d38f58
commit 1fddba54ee
+39 -2
View File
@@ -21,10 +21,11 @@ pub struct PowChallengeResponse{
*/ */
use sha2::{Sha512, Digest}; use sha2::{Sha512, Digest};
use rand::RngCore; use rand::RngCore;
use serde::{Deserialize, Serialize}; use serde::{de::Error, Deserialize, Serialize};
use serde_big_array::BigArray; use serde_big_array::BigArray;
use socket2::Socket;
use threadpool::ThreadPool; use threadpool::ThreadPool;
use std::sync::{Arc, Mutex}; use std::{ io::{Read, Write}, sync::{Arc, Mutex}};
const CHALLENGE_DIFF: usize = 40; const CHALLENGE_DIFF: usize = 40;
const SHA_LENGTH: usize = 512; const SHA_LENGTH: usize = 512;
@@ -115,3 +116,39 @@ impl PowChallengeResponse {
} }
} }
pub fn custom_write<T: Write>(target_stream: &mut T, buffer_to_write: &[u8])-> std::result::Result<(), ()>{
let length: u32 = buffer_to_write.len() as u32;
let length_write_status = target_stream.write_all(&length.to_be_bytes());
if length_write_status.is_err(){
return Result::Err(());
}
let status = target_stream.write_all(buffer_to_write);
if status.is_err(){
return Result::Err(());
}
let flush_status = target_stream.flush();
if flush_status.is_err(){
return Result::Err(());
}
return Ok(());
}
pub fn custom_read<G: Read>(target_stream: &mut G) -> std::result::Result<Vec<u8>, ()> {
let mut length_buffer = [0u8; 4];
if target_stream.read_exact(&mut length_buffer).is_err() {
return Err(());
}
let read_full_len: u32 = u32::from_be_bytes(length_buffer);
let mut full_read_buffer = vec![0u8; read_full_len as usize]; // dynamic size
// You can now read into this buffer
if target_stream.read_exact(&mut full_read_buffer).is_err() {
return Err(());
}
return Ok(full_read_buffer);
}