Handle HTTP errors sensibly on GET

This commit is contained in:
2023-11-19 01:13:19 +01:00
parent 68b656acfb
commit e693909953

View File

@@ -50,9 +50,16 @@ impl async_tftp::server::Handler for Handler {
match resource {
Resource::Http(url) => {
// TODO: Add headers describing client
let req = self.http.get(url).send().await.map_err(|err| Error::Msg(err.to_string()))?;
let size = req.content_length();
let stream = req.bytes_stream()
let resp = self.http.get(url).send().await.map_err(|err| Error::Msg(err.to_string()))?;
match resp.status() {
StatusCode::OK => {},
StatusCode::NOT_FOUND => return Err(Error::FileNotFound),
StatusCode::UNAUTHORIZED => return Err(Error::PermissionDenied),
x => return Err(Error::Msg(x.to_string()))
}
let size = resp.content_length();
let stream = resp.bytes_stream()
.map_err(|e| futures::io::Error::new(futures::io::ErrorKind::Other, e))
.into_async_read();