| |
| |
| |
|
|
| #include <memory> |
| #include <httplib.h> |
| #include "common/logging/log.h" |
| #include "core/nus_download.h" |
|
|
| namespace Core::NUS { |
|
|
| std::optional<std::vector<u8>> Download(const std::string& path) { |
| constexpr auto HOST = "http://nus.cdn.c.shop.nintendowifi.net"; |
|
|
| std::unique_ptr<httplib::Client> client = std::make_unique<httplib::Client>(HOST); |
| if (client == nullptr) { |
| LOG_ERROR(WebService, "Invalid URL {}{}", HOST, path); |
| return {}; |
| } |
|
|
| httplib::Request request{ |
| .method = "GET", |
| .path = path, |
| |
| .matches = httplib::Match(), |
| }; |
|
|
| client->set_follow_location(true); |
| const auto result = client->send(request); |
| if (!result) { |
| LOG_ERROR(WebService, "GET to {}{} returned null", HOST, path); |
| return {}; |
| } |
|
|
| const auto& response = result.value(); |
| if (response.status >= 400) { |
| LOG_ERROR(WebService, "GET to {}{} returned error status code: {}", HOST, path, |
| response.status); |
| return {}; |
| } |
| if (!response.headers.contains("content-type")) { |
| LOG_ERROR(WebService, "GET to {}{} returned no content", HOST, path); |
| return {}; |
| } |
|
|
| return std::vector<u8>(response.body.begin(), response.body.end()); |
| } |
|
|
| } |
|
|