@@ -2,38 +2,7 @@ use std::error::Error;
22use std:: io:: { self , BufRead , Read , Write } ;
33use std:: net:: { TcpListener , TcpStream } ;
44
5- #[ inline]
6- fn print_char ( c : & u8 ) {
7- print ! (
8- "{}" ,
9- if c. is_ascii_graphic( ) && * c != 0x7f {
10- * c as char
11- } else {
12- '.'
13- }
14- ) ;
15- }
16-
17- fn hex_print ( hex : & [ u8 ] , validlen : usize ) {
18- if hex. len ( ) > 65535 {
19- eprintln ! ( "Array with more than 65535 elements isn't supported" ) ;
20- std:: process:: exit ( 1 ) ;
21- }
22- let mut bslice = [ 0_u8 ; 8 ] ;
23- for ( index, cc) in hex[ ..validlen] . iter ( ) . enumerate ( ) {
24- bslice[ index % 8 ] = * cc;
25- print ! ( "{:02x} " , cc) ;
26- if index % 16 == 0 || index + 1 == validlen {
27- print ! ( " | " ) ;
28- for pc in bslice. iter ( ) {
29- print_char ( pc) ;
30- }
31- println ! ( ) ;
32- } else if index % 8 == 0 {
33- print ! ( "- " ) ;
34- }
35- }
36- }
5+ mod tools;
376
387fn respond ( stream : & mut TcpStream , print_tcp : bool ) -> Result < ( ) , Box < dyn Error > > {
398 let mut buf = [ 0_u8 ; 65535 ] ;
@@ -45,7 +14,7 @@ fn respond(stream: &mut TcpStream, print_tcp: bool) -> Result<(), Box<dyn Error>
4514 println ! ( "\n =====\n \n Socket Input:\n " ) ;
4615 // Print hex if requested
4716 if print_tcp {
48- hex_print ( & buf, n) ;
17+ tools :: hex_print ( & buf, n, true ) ;
4918 println ! ( "\n =====\n " ) ;
5019 }
5120
@@ -54,14 +23,14 @@ fn respond(stream: &mut TcpStream, print_tcp: bool) -> Result<(), Box<dyn Error>
5423 if * cc == 0x20_u8 {
5524 print ! ( " " ) ;
5625 } else {
57- print_char ( cc) ;
26+ tools :: print_char ( cc) ;
5827 }
5928 }
6029
6130 println ! ( "\n \n =====\n " ) ;
62- println ! (
63- "Please send the HTTP response back: \n Type '?REVERT ?' at new line to undo the last line. \n Type '?END?' at new line to send. \n "
64- ) ;
31+ println ! ( "Please send the data back:" ) ;
32+ println ! ( "Type '?UNDO ?' at a new line to undo the last line," ) ;
33+ println ! ( "Type '?SEND?' at a new line to send. \n " ) ;
6534
6635 // Response writer
6736 let stdin = io:: stdin ( ) ;
@@ -74,13 +43,17 @@ fn respond(stream: &mut TcpStream, print_tcp: bool) -> Result<(), Box<dyn Error>
7443 }
7544
7645 let trimmed = line. trim ( ) . to_string ( ) ;
77- if trimmed == "?END ?" {
46+ if trimmed == "?SEND ?" {
7847 break ;
79- } else if trimmed == "?REVERT?" {
80- lines. pop ( ) ;
81- println ! ( "\n Line reverted. Now:" ) ;
82- for line in & lines {
83- println ! ( "{}" , line) ;
48+ } else if trimmed == "?UNDO?" {
49+ if !lines. is_empty ( ) {
50+ lines. pop ( ) . unwrap ( ) ;
51+ println ! ( "\n Line reverted. Now:" ) ;
52+ } else {
53+ println ! ( "\n Nothing to revert! Now:" ) ;
54+ }
55+ for pline in & lines {
56+ println ! ( "{}" , pline) ;
8457 }
8558 } else {
8659 lines. push ( trimmed) ;
@@ -164,8 +137,7 @@ fn main() {
164137 // Ready
165138 println ! ( "Listening at {}" , addr) ;
166139 loop {
167- let ( mut stream, sockaddr) = listener. accept ( ) . unwrap ( ) ;
168- println ! ( "[DEBUG] Socket address: {:?}" , sockaddr) ;
140+ let ( mut stream, _) = listener. accept ( ) . unwrap ( ) ;
169141 std:: thread:: spawn ( move || {
170142 respond ( & mut stream, param. 1 ) . unwrap ( ) ;
171143 } ) ;
0 commit comments