1
1
use crate :: { END , ESC , ESC_END , ESC_ESC } ;
2
-
3
2
use std:: io:: { Read , Write } ;
4
3
5
4
#[ derive( Debug ) ]
6
- pub enum Error {
5
+ pub enum SlipError {
7
6
FramingError ,
8
7
OversizedPacket ,
9
8
EndOfStream ,
10
9
ReadError ( std:: io:: Error ) ,
11
10
}
12
11
13
- impl From < Error > for std:: io:: Error {
14
- fn from ( err : Error ) -> std:: io:: Error {
12
+ impl From < SlipError > for std:: io:: Error {
13
+ fn from ( err : SlipError ) -> std:: io:: Error {
15
14
match err {
16
- Error :: FramingError => std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , format ! ( "{:?}" , err) ) ,
17
- Error :: OversizedPacket => std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , format ! ( "{:?}" , err) ) ,
18
- Error :: EndOfStream => std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , format ! ( "{:?}" , err) ) ,
19
- Error :: ReadError ( err) => err,
15
+ SlipError :: FramingError => {
16
+ std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , format ! ( "{:?}" , err) )
17
+ }
18
+ SlipError :: OversizedPacket => {
19
+ std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , format ! ( "{:?}" , err) )
20
+ }
21
+ SlipError :: EndOfStream => {
22
+ std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , format ! ( "{:?}" , err) )
23
+ }
24
+ SlipError :: ReadError ( err) => err,
20
25
}
21
26
}
22
27
}
23
28
24
- impl From < std:: io:: Error > for Error {
29
+ impl From < std:: io:: Error > for SlipError {
25
30
fn from ( err : std:: io:: Error ) -> Self {
26
- Error :: ReadError ( err)
31
+ SlipError :: ReadError ( err)
27
32
}
28
33
}
29
34
30
- pub type Result = std:: result:: Result < usize , self :: Error > ;
35
+ pub type SlipResult = std:: result:: Result < usize , self :: SlipError > ;
31
36
32
37
enum State {
33
38
Normal ,
@@ -36,12 +41,12 @@ enum State {
36
41
}
37
42
38
43
/// SLIP decoding context
39
- pub struct Decoder {
44
+ pub struct SlipDecoder {
40
45
count : usize ,
41
46
state : State ,
42
47
}
43
48
44
- impl Decoder {
49
+ impl SlipDecoder {
45
50
/// Creates a new context with the given maximum buffer size.
46
51
pub fn new ( ) -> Self {
47
52
Self {
@@ -50,11 +55,11 @@ impl Decoder {
50
55
}
51
56
}
52
57
53
- fn push ( self : & mut Self , sink : & mut dyn Write , value : u8 ) -> self :: Result {
58
+ fn push ( & mut self , sink : & mut dyn Write , value : u8 ) -> self :: SlipResult {
54
59
match sink. write ( & [ value] ) {
55
60
Ok ( len) => {
56
61
if len != 1 {
57
- Err ( Error :: OversizedPacket )
62
+ Err ( SlipError :: OversizedPacket )
58
63
} else {
59
64
self . count += 1 ;
60
65
Ok ( 1usize )
@@ -74,10 +79,13 @@ impl Decoder {
74
79
/// Returns a Vec<u8> containing a decoded message or an empty Vec<u8> if
75
80
/// of the source data was reached.
76
81
///
77
- pub fn decode ( self : & mut Self , source : & mut dyn Read , sink : & mut dyn Write ) -> self :: Result {
82
+ pub fn decode ( & mut self , source : & mut dyn Read , sink : & mut dyn Write ) -> self :: SlipResult {
83
+ eprintln ! ( "{}:{}" , file!( ) , line!( ) ) ;
78
84
for value in source. bytes ( ) {
79
85
let value = value?;
80
86
87
+ eprintln ! ( "{}:{} value => {:02X}" , file!( ) , line!( ) , value) ;
88
+
81
89
match self . state {
82
90
State :: Normal => match value {
83
91
END => {
@@ -114,13 +122,19 @@ impl Decoder {
114
122
_ => {
115
123
self . state = State :: Error ;
116
124
117
- return Err ( Error :: FramingError ) ;
125
+ return Err ( SlipError :: FramingError ) ;
118
126
}
119
127
} ,
120
128
}
121
129
}
122
130
123
- Err ( Error :: EndOfStream )
131
+ Err ( SlipError :: EndOfStream )
132
+ }
133
+ }
134
+
135
+ impl Default for SlipDecoder {
136
+ fn default ( ) -> Self {
137
+ Self :: new ( )
124
138
}
125
139
}
126
140
@@ -132,7 +146,7 @@ mod tests {
132
146
fn empty_decode ( ) {
133
147
const INPUT : [ u8 ; 2 ] = [ 0xc0 , 0xc0 ] ;
134
148
135
- let mut slip = Decoder :: new ( ) ;
149
+ let mut slip = SlipDecoder :: new ( ) ;
136
150
let mut buf: Vec < u8 > = Vec :: new ( ) ;
137
151
let res = slip. decode ( & mut INPUT . as_ref ( ) , & mut buf) ;
138
152
assert ! ( res. is_err( ) ) ;
@@ -144,7 +158,7 @@ mod tests {
144
158
const INPUT : [ u8 ; 7 ] = [ 0xc0 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0xc0 ] ;
145
159
const DATA : [ u8 ; 5 ] = [ 0x01 , 0x02 , 0x03 , 0x04 , 0x05 ] ;
146
160
147
- let mut slip = Decoder :: new ( ) ;
161
+ let mut slip = SlipDecoder :: new ( ) ;
148
162
let mut buf = [ 0u8 ; DATA . len ( ) ] ;
149
163
let len = slip. decode ( & mut INPUT . as_ref ( ) , & mut buf. as_mut ( ) ) . unwrap ( ) ;
150
164
assert_eq ! ( DATA . len( ) , len) ;
@@ -158,7 +172,7 @@ mod tests {
158
172
const INPUT : [ u8 ; 6 ] = [ 0xc0 , 0x01 , 0xdb , 0xdc , 0x03 , 0xc0 ] ;
159
173
const DATA : [ u8 ; 3 ] = [ 0x01 , 0xc0 , 0x03 ] ;
160
174
161
- let mut slip = Decoder :: new ( ) ;
175
+ let mut slip = SlipDecoder :: new ( ) ;
162
176
let mut buf: Vec < u8 > = Vec :: new ( ) ;
163
177
let len = slip. decode ( & mut INPUT . as_ref ( ) , & mut buf) . unwrap ( ) ;
164
178
assert_eq ! ( DATA . len( ) , len) ;
@@ -172,7 +186,7 @@ mod tests {
172
186
const INPUT : [ u8 ; 6 ] = [ 0xc0 , 0x01 , 0xdb , 0xdd , 0x03 , 0xc0 ] ;
173
187
const DATA : [ u8 ; 3 ] = [ 0x01 , 0xdb , 0x03 ] ;
174
188
175
- let mut slip = Decoder :: new ( ) ;
189
+ let mut slip = SlipDecoder :: new ( ) ;
176
190
let mut buf: Vec < u8 > = Vec :: new ( ) ;
177
191
let len = slip. decode ( & mut INPUT . as_ref ( ) , & mut buf) . unwrap ( ) ;
178
192
assert_eq ! ( DATA . len( ) , len) ;
@@ -186,7 +200,7 @@ mod tests {
186
200
const INPUT_2 : [ u8 ; 6 ] = [ 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0xc0 ] ;
187
201
const DATA : [ u8 ; 10 ] = [ 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 ] ;
188
202
189
- let mut slip = Decoder :: new ( ) ;
203
+ let mut slip = SlipDecoder :: new ( ) ;
190
204
let mut buf: Vec < u8 > = Vec :: new ( ) ;
191
205
192
206
{
0 commit comments