use bytes::{BufMut, Bytes, BytesMut};
use rand::RngCore;
use super::put_varint::put_varint;
pub struct TCPRequest {
pub address: String,
pub padding_len: usize,
}
impl TCPRequest {
pub fn encode(self) -> Bytes {
let estimated_size = 8 + self.address.len() + self.padding_len + 16; let mut buf = BytesMut::with_capacity(estimated_size);
put_varint(0x401, &mut buf);
put_varint(self.address.len() as u64, &mut buf);
buf.put(self.address.as_bytes());
put_varint(self.padding_len as u64, &mut buf);
if self.padding_len > 0 {
let mut padding = vec![0u8; self.padding_len];
let mut rng = rand::rng();
rng.fill_bytes(&mut padding);
buf.put(padding.as_slice());
}
buf.freeze()
}
}