fragmentizer/
fragmentizer.rs1use std::io::{Read, stdin};
2
3use imap_codec::{fragmentizer::Fragmentizer, imap_types::utils::escape_byte_string};
4
5fn main() {
6 let mut fragmentizer = Fragmentizer::new(1024);
7
8 loop {
9 match fragmentizer.progress() {
10 Some(fragment_info) => {
11 println!(
12 "[!] Fragment: {fragment_info:#?} // b\"{}\"",
13 escape_byte_string(fragmentizer.fragment_bytes(fragment_info))
14 );
15
16 if fragmentizer.is_message_complete() {
17 println!(
18 "[!] Complete message: {}",
19 escape_byte_string(fragmentizer.message_bytes())
20 );
21 }
22 }
23 None => {
24 println!("[!] Reading stdin (ctrl+d to flush)...");
25 let mut buffer = [0; 64];
26 let count = stdin().read(&mut buffer).unwrap();
27 if count == 0 {
28 println!("[!] Connection closed");
29 break;
30 }
31 let chunk = &buffer[..count];
32
33 println!(
34 "[!] Enqueueing {} byte(s) (b\"{}\")",
35 count,
36 escape_byte_string(chunk)
37 );
38 fragmentizer.enqueue_bytes(chunk);
39 }
40 }
41 }
42}