MCPcopy Create free account
hub / github.com/comaps/comaps / Download

Method Download

libs/platform/remote_file.cpp:25–71  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

23{}
24
25RemoteFile::Result RemoteFile::Download(std::string const & filePath) const
26{
27 if (m_url.empty())
28 return {m_url, Status::NetworkError, "Empty URL"};
29
30 platform::HttpClient request(m_url);
31 request.SetRawHeaders(m_defaultHeaders);
32 request.SetTimeout(kRequestTimeoutInSec);
33 request.SetFollowRedirects(m_allowRedirection);
34 if (!m_accessToken.empty())
35 request.SetRawHeader("Authorization", "Bearer " + m_accessToken);
36 if (request.RunHttpRequest())
37 {
38 if (!m_allowRedirection && request.WasRedirected())
39 return {m_url, Status::NetworkError, "Unexpected redirection"};
40
41 auto const & response = request.ServerResponse();
42 int const resultCode = request.ErrorCode();
43 if (resultCode == 403)
44 {
45 LOG(LWARNING, ("Access denied for", m_url, "response:", response));
46 return {m_url, Status::Forbidden, resultCode, response};
47 }
48 else if (resultCode == 404)
49 {
50 LOG(LWARNING, ("File not found at", m_url, "response:", response));
51 return {m_url, Status::NotFound, resultCode, response};
52 }
53
54 if (resultCode >= 200 && resultCode < 300)
55 {
56 try
57 {
58 FileWriter w(filePath);
59 w.Write(response.data(), response.length());
60 }
61 catch (FileWriter::Exception const & exception)
62 {
63 LOG(LWARNING, ("Exception while writing file:", filePath, "reason:", exception.what()));
64 return {m_url, Status::DiskError, resultCode, exception.what()};
65 }
66 return {m_url, Status::Ok, resultCode, ""};
67 }
68 return {m_url, Status::NetworkError, resultCode, response};
69 }
70 return {m_url, Status::NetworkError, "Unspecified network error"};
71}
72
73void RemoteFile::DownloadAsync(std::string const & filePath, StartDownloadingHandler && startDownloadingHandler,
74 ResultHandler && resultHandler) const

Callers 1

DownloadAsyncMethod · 0.45

Calls 9

WasRedirectedMethod · 0.80
ErrorCodeMethod · 0.80
lengthMethod · 0.80
emptyMethod · 0.45
SetTimeoutMethod · 0.45
RunHttpRequestMethod · 0.45
WriteMethod · 0.45
dataMethod · 0.45
whatMethod · 0.45

Tested by

no test coverage detected