mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-21 16:37:12 +01:00
Adds lib-network-manager
This commit is contained in:
157
libraries/lib-network-manager/HeadersList.cpp
Normal file
157
libraries/lib-network-manager/HeadersList.cpp
Normal file
@@ -0,0 +1,157 @@
|
||||
/*!********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
@file HeadersList.cpp
|
||||
@brief Define HTTP headers list class.
|
||||
|
||||
Dmitry Vedenko
|
||||
**********************************************************************/
|
||||
|
||||
/*!********************************************************************
|
||||
|
||||
@class Header
|
||||
@brief A string pair, representing HTTP header.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
/*!********************************************************************
|
||||
|
||||
@class HeadersList
|
||||
@brief A class, representing a list of HTTP headers.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "HeadersList.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace audacity
|
||||
{
|
||||
namespace network_manager
|
||||
{
|
||||
|
||||
bool Header::hasSameName (const Header& header) const
|
||||
{
|
||||
return hasSameName (header.Name);
|
||||
}
|
||||
|
||||
bool Header::hasSameName (const std::string& name) const
|
||||
{
|
||||
return std::equal (
|
||||
name.begin (), name.end (),
|
||||
Name.begin (), Name.end (),
|
||||
[](const char leftChar, const char rightChar) {
|
||||
return std::tolower (leftChar) == std::tolower (rightChar);
|
||||
});
|
||||
}
|
||||
|
||||
Header Header::Parse (const std::string& header)
|
||||
{
|
||||
const size_t colonPosition = header.find (": ");
|
||||
|
||||
if (colonPosition == std::string::npos) // This can happen when we receieve the first line of the response
|
||||
return { header, std::string () };
|
||||
|
||||
return {
|
||||
header.substr (0, colonPosition),
|
||||
header.substr (colonPosition + 2)
|
||||
};
|
||||
}
|
||||
|
||||
void HeadersList::setHeader (const Header& header)
|
||||
{
|
||||
setHeader (header.Name, header.Value);
|
||||
}
|
||||
|
||||
void HeadersList::setHeader (const std::string& headerName, std::string headerValue)
|
||||
{
|
||||
Header* item = getHeader (headerName);
|
||||
|
||||
if (item != nullptr)
|
||||
item->Value = std::move (headerValue);
|
||||
else
|
||||
mHeaders.push_back ({ headerName, std::move (headerValue) });
|
||||
}
|
||||
|
||||
void HeadersList::addHeader (Header header)
|
||||
{
|
||||
addHeader (std::move (header.Name), std::move (header.Value));
|
||||
}
|
||||
|
||||
void HeadersList::addHeader (std::string headerName, std::string headerValue)
|
||||
{
|
||||
mHeaders.push_back ({ std::move (headerName), std::move (headerValue) });
|
||||
}
|
||||
|
||||
bool HeadersList::hasHeader (const std::string& headerName) const noexcept
|
||||
{
|
||||
return getHeader (headerName) != nullptr;
|
||||
}
|
||||
|
||||
std::string HeadersList::getHeaderValue (const std::string& headerName) const
|
||||
{
|
||||
const Header* header = getHeader (headerName);
|
||||
|
||||
if (header != nullptr)
|
||||
return header->Value;
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
const Header* HeadersList::getHeader (size_t idx) const noexcept
|
||||
{
|
||||
return const_cast<HeadersList*>(this)->getHeader (idx);
|
||||
}
|
||||
|
||||
const Header* HeadersList::getHeader (const std::string& name) const noexcept
|
||||
{
|
||||
return const_cast<HeadersList*>(this)->getHeader (name);
|
||||
}
|
||||
|
||||
size_t HeadersList::getHeadersCount () const noexcept
|
||||
{
|
||||
return mHeaders.size ();
|
||||
}
|
||||
|
||||
HeadersList::HeadersIterator HeadersList::begin () noexcept
|
||||
{
|
||||
return mHeaders.begin ();
|
||||
}
|
||||
|
||||
HeadersList::HeadersIterator HeadersList::end () noexcept
|
||||
{
|
||||
return mHeaders.end ();
|
||||
}
|
||||
|
||||
HeadersList::HeadersConstIterator HeadersList::begin () const noexcept
|
||||
{
|
||||
return mHeaders.begin ();
|
||||
}
|
||||
|
||||
HeadersList::HeadersConstIterator HeadersList::end () const noexcept
|
||||
{
|
||||
return mHeaders.end ();
|
||||
}
|
||||
|
||||
Header* HeadersList::getHeader (size_t idx) noexcept
|
||||
{
|
||||
if (idx < mHeaders.size ())
|
||||
return &mHeaders[idx];
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Header* HeadersList::getHeader (const std::string& headerName) noexcept
|
||||
{
|
||||
for (Header& header : mHeaders)
|
||||
{
|
||||
if (header.hasSameName (headerName))
|
||||
return &header;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user