From 1fddba54ee37d25a8e5776b1f60085d897a879a67a959abcb9a653c0370b1a4a Mon Sep 17 00:00:00 2001 From: Mars Ultor Date: Sun, 20 Apr 2025 12:26:05 -0500 Subject: [PATCH] read write functions writen and done --- common/src/lib.rs | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/common/src/lib.rs b/common/src/lib.rs index c920b2a..6bdc44d 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -21,10 +21,11 @@ pub struct PowChallengeResponse{ */ use sha2::{Sha512, Digest}; use rand::RngCore; -use serde::{Deserialize, Serialize}; +use serde::{de::Error, Deserialize, Serialize}; use serde_big_array::BigArray; +use socket2::Socket; use threadpool::ThreadPool; -use std::sync::{Arc, Mutex}; +use std::{ io::{Read, Write}, sync::{Arc, Mutex}}; const CHALLENGE_DIFF: usize = 40; const SHA_LENGTH: usize = 512; @@ -115,3 +116,39 @@ impl PowChallengeResponse { } } +pub fn custom_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(target_stream: &mut G) -> std::result::Result, ()> { + 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); +} +