GitHub Viewer
#ifdef EMSCRIPTEN
# include "response.hpp"
# include "../utils/common.hpp"
# include "libgit2_internals.hpp"
wasm_http_response::wasm_http_response()
: m_status(0)
, m_read_count(0)
, m_total_bytes(0)
{
}
void wasm_http_response::add_header(const std::string& key, const std::string& value)
{
m_response_headers.emplace(key, trim(value));
}
void wasm_http_response::clear()
{
m_status = 0;
m_status_text.clear();
m_read_count = 0;
m_total_bytes = 0;
m_response_headers.clear();
}
std::optional wasm_http_response::get_header(const std::string& key) const
{
// Return the first header with the specified key.
// If we ever have to handle multiple headers with the same key, will need to do something more
// complicated here.
auto header = m_response_headers.find(key);
if (header != m_response_headers.end())
{
return header->second;
}
return std::nullopt;
}
bool wasm_http_response::has_header(const std::string& key) const
{
return m_response_headers.find(key) != m_response_headers.end();
}
bool wasm_http_response::has_header_matches(const std::string& key, std::string_view match) const
{
auto range = m_response_headers.equal_range(key);
for (auto i = range.first; i != range.second; ++i)
{
if (i->second == match)
{
return true;
}
}
return false;
}
bool wasm_http_response::has_header_starts_with(const std::string& key, std::string_view start) const
{
auto range = m_response_headers.equal_range(key);
for (auto i = range.first; i != range.second; ++i)
{
if (i->second.starts_with(start))
{
return true;
}
}
return false;
}
void wasm_http_response::set_git_error(std::string_view url) const
{
std::string extra = m_status_text.empty() ? "" : " (" + m_status_text + ")";
git_error_set(
GIT_ERROR_HTTP,
"unexpected HTTP response %d%s to request %s, see the browser console and/or network tab for more details",
m_status,
extra.c_str(),
url.data()
);
}
#endif // EMSCRIPTEN