Commit
+15 -1 +/-2 browse
1 | diff --git a/maitred/src/server.rs b/maitred/src/server.rs |
2 | index 4d668d1..78aa2ea 100644 |
3 | --- a/maitred/src/server.rs |
4 | +++ b/maitred/src/server.rs |
5 | @@ -180,7 +180,11 @@ impl Server { |
6 | } |
7 | Err(e) => { |
8 | tracing::warn!("Client error: {:?}", e); |
9 | + let fatal = e.is_fatal(); |
10 | framed.send(e).await?; |
11 | + if fatal { |
12 | + break 'outer; |
13 | + } |
14 | } |
15 | } |
16 | } |
17 | @@ -195,6 +199,7 @@ impl Server { |
18 | } |
19 | Err(response) => { |
20 | tracing::warn!("Error handling message payload: {:?}", response); |
21 | + |
22 | framed.send(response).await?; |
23 | } |
24 | } |
25 | diff --git a/maitred/src/transport.rs b/maitred/src/transport.rs |
26 | index 3d11cdc..0c5c0ad 100644 |
27 | --- a/maitred/src/transport.rs |
28 | +++ b/maitred/src/transport.rs |
29 | @@ -30,6 +30,15 @@ where |
30 | Ehlo(EhloResponse<T>), |
31 | } |
32 | |
33 | + impl Response<String> { |
34 | + pub fn is_fatal(&self) -> bool { |
35 | + match self { |
36 | + Response::General(resp) => resp.code >= 500, |
37 | + Response::Ehlo(_) => false, |
38 | + } |
39 | + } |
40 | + } |
41 | + |
42 | impl<T> PartialEq for Response<T> |
43 | where |
44 | T: Display, |
45 | @@ -175,7 +184,7 @@ impl Decoder for Transport { |
46 | match r.ingest(&mut iter, src) { |
47 | Ok(request) => { |
48 | if !requests.is_empty() && !self.pipelining { |
49 | - return Err(TransportError::PipelineNotEnabled) |
50 | + return Err(TransportError::PipelineNotEnabled); |
51 | } |
52 | requests.push(request); |
53 | } |