Skip to main content

fragmentizer/
fragmentizer.rs

1use 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}