Commit d673e215 authored by Dennis Jenkins's avatar Dennis Jenkins

Reformatted all .cc files with clang-format (default options). Reformatting...

Reformatted all .cc files with clang-format (default options).  Reformatting the .h files causes cppcheck to segfault, so I'll tackle those later.
parent 2447ef55
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -4,189 +4,167 @@
Implementation of http definitions
*/
#include <iostream>
#include <iomanip>
#include <iostream>
#include <pistache/http_defs.h>
#include <pistache/common.h>
#include <pistache/date.h>
#include <pistache/http_defs.h>
namespace Pistache {
namespace Http {
namespace {
using time_point = FullDate::time_point;
bool parse_RFC_1123(const std::string& s, time_point &tp)
{
std::istringstream in{s};
in >> date::parse("%a, %d %b %Y %T %Z", tp);
return !in.fail();
}
bool parse_RFC_850(const std::string& s, time_point &tp)
{
std::istringstream in{s};
in >> date::parse("%a, %d-%b-%y %T %Z", tp);
return !in.fail();
}
bool parse_asctime(const std::string& s, time_point &tp)
{
std::istringstream in{s};
in >> date::parse("%a %b %d %T %Y", tp);
return !in.fail();
}
using time_point = FullDate::time_point;
bool parse_RFC_1123(const std::string &s, time_point &tp) {
std::istringstream in{s};
in >> date::parse("%a, %d %b %Y %T %Z", tp);
return !in.fail();
}
bool parse_RFC_850(const std::string &s, time_point &tp) {
std::istringstream in{s};
in >> date::parse("%a, %d-%b-%y %T %Z", tp);
return !in.fail();
}
bool parse_asctime(const std::string &s, time_point &tp) {
std::istringstream in{s};
in >> date::parse("%a %b %d %T %Y", tp);
return !in.fail();
}
} // anonymous namespace
CacheDirective::CacheDirective(Directive directive)
: directive_()
, data()
{
init(directive, std::chrono::seconds(0));
CacheDirective::CacheDirective(Directive directive) : directive_(), data() {
init(directive, std::chrono::seconds(0));
}
CacheDirective::CacheDirective(Directive directive, std::chrono::seconds delta)
: directive_()
, data()
{
init(directive, delta);
: directive_(), data() {
init(directive, delta);
}
std::chrono::seconds
CacheDirective::delta() const
{
switch (directive_) {
case MaxAge:
return std::chrono::seconds(data.maxAge);
case SMaxAge:
return std::chrono::seconds(data.sMaxAge);
case MaxStale:
return std::chrono::seconds(data.maxStale);
case MinFresh:
return std::chrono::seconds(data.minFresh);
default:
throw std::domain_error("Invalid operation on cache directive");
}
std::chrono::seconds CacheDirective::delta() const {
switch (directive_) {
case MaxAge:
return std::chrono::seconds(data.maxAge);
case SMaxAge:
return std::chrono::seconds(data.sMaxAge);
case MaxStale:
return std::chrono::seconds(data.maxStale);
case MinFresh:
return std::chrono::seconds(data.minFresh);
default:
throw std::domain_error("Invalid operation on cache directive");
}
}
void
CacheDirective::init(Directive directive, std::chrono::seconds delta)
{
directive_ = directive;
switch (directive) {
case MaxAge:
data.maxAge = delta.count();
break;
case SMaxAge:
data.sMaxAge = delta.count();
break;
case MaxStale:
data.maxStale = delta.count();
break;
case MinFresh:
data.minFresh = delta.count();
break;
default:
break;
}
void CacheDirective::init(Directive directive, std::chrono::seconds delta) {
directive_ = directive;
switch (directive) {
case MaxAge:
data.maxAge = delta.count();
break;
case SMaxAge:
data.sMaxAge = delta.count();
break;
case MaxStale:
data.maxStale = delta.count();
break;
case MinFresh:
data.minFresh = delta.count();
break;
default:
break;
}
}
FullDate
FullDate::fromString(const std::string& str) {
FullDate FullDate::fromString(const std::string &str) {
FullDate::time_point tp;
if(parse_RFC_1123(str, tp))
return FullDate(tp);
else if(parse_RFC_850(str, tp))
return FullDate(tp);
else if(parse_asctime(str, tp))
return FullDate(tp);
FullDate::time_point tp;
if (parse_RFC_1123(str, tp))
return FullDate(tp);
else if (parse_RFC_850(str, tp))
return FullDate(tp);
else if (parse_asctime(str, tp))
return FullDate(tp);
throw std::runtime_error("Invalid Date format");
throw std::runtime_error("Invalid Date format");
}
void
FullDate::write(std::ostream& os, Type type) const
{
switch (type) {
case Type::RFC1123:
date::to_stream(os, "%a, %d %b %Y %T %Z", date_);
break;
case Type::RFC850:
date::to_stream(os, "%a, %d-%b-%y %T %Z", date_);
break;
case Type::AscTime:
date::to_stream(os, "%a %b %d %T %Y", date_);
break;
default:
std::runtime_error("Invalid use of FullDate::write");
}
void FullDate::write(std::ostream &os, Type type) const {
switch (type) {
case Type::RFC1123:
date::to_stream(os, "%a, %d %b %Y %T %Z", date_);
break;
case Type::RFC850:
date::to_stream(os, "%a, %d-%b-%y %T %Z", date_);
break;
case Type::AscTime:
date::to_stream(os, "%a %b %d %T %Y", date_);
break;
default:
std::runtime_error("Invalid use of FullDate::write");
}
}
const char *versionString(Version version) {
switch (version) {
case Version::Http10:
return "HTTP/1.0";
case Version::Http11:
return "HTTP/1.1";
}
unreachable();
switch (version) {
case Version::Http10:
return "HTTP/1.0";
case Version::Http11:
return "HTTP/1.1";
}
unreachable();
}
const char* methodString(Method method)
{
switch (method) {
#define METHOD(name, str) \
case Method::name: \
return str;
const char *methodString(Method method) {
switch (method) {
#define METHOD(name, str) \
case Method::name: \
return str;
HTTP_METHODS
#undef METHOD
}
}
unreachable();
unreachable();
}
const char* codeString(Code code)
{
switch (code) {
#define CODE(_, name, str) \
case Code::name: \
return str;
const char *codeString(Code code) {
switch (code) {
#define CODE(_, name, str) \
case Code::name: \
return str;
STATUS_CODES
#undef CODE
}
}
return "";
return "";
}
std::ostream& operator<<(std::ostream& os, Version version) {
os << versionString(version);
return os;
std::ostream &operator<<(std::ostream &os, Version version) {
os << versionString(version);
return os;
}
std::ostream& operator<<(std::ostream& os, Method method) {
os << methodString(method);
return os;
std::ostream &operator<<(std::ostream &os, Method method) {
os << methodString(method);
return os;
}
std::ostream& operator<<(std::ostream& os, Code code) {
os << codeString(code);
return os;
std::ostream &operator<<(std::ostream &os, Code code) {
os << codeString(code);
return os;
}
HttpError::HttpError(Code code, std::string reason)
: code_(static_cast<int>(code))
, reason_(std::move(reason))
{ }
: code_(static_cast<int>(code)), reason_(std::move(reason)) {}
HttpError::HttpError(int code, std::string reason)
: code_(code)
, reason_(std::move(reason))
{ }
: code_(code), reason_(std::move(reason)) {}
} // namespace Http
} // namespace Pistache
This diff is collapsed.
......@@ -35,184 +35,168 @@ RegisterHeader(Location);
RegisterHeader(Server);
RegisterHeader(UserAgent);
std::string
toLowercase(std::string str) {
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
return str;
std::string toLowercase(std::string str) {
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
return str;
}
bool
LowercaseEqualStatic(const std::string& dynamic, const std::string& statik) {
return std::equal(dynamic.begin(), dynamic.end(), statik.begin(), statik.end(),
[] (const char& a, const char& b) {
return std::tolower(a) == b;
});
bool LowercaseEqualStatic(const std::string &dynamic,
const std::string &statik) {
return std::equal(
dynamic.begin(), dynamic.end(), statik.begin(), statik.end(),
[](const char &a, const char &b) { return std::tolower(a) == b; });
}
Registry& Registry::instance() {
static Registry instance;
Registry &Registry::instance() {
static Registry instance;
return instance;
return instance;
}
Registry::Registry()
{}
Registry::Registry() {}
Registry::~Registry()
{}
Registry::~Registry() {}
void
Registry::registerHeader(const std::string& name, Registry::RegistryFunc func)
{
auto it = registry.find(name);
if (it != std::end(registry)) {
throw std::runtime_error("Header already registered");
}
void Registry::registerHeader(const std::string &name,
Registry::RegistryFunc func) {
auto it = registry.find(name);
if (it != std::end(registry)) {
throw std::runtime_error("Header already registered");
}
registry.insert(std::make_pair(name, std::move(func)));
registry.insert(std::make_pair(name, std::move(func)));
}
std::vector<std::string>
Registry::headersList() {
std::vector<std::string> names;
names.reserve(registry.size());
std::vector<std::string> Registry::headersList() {
std::vector<std::string> names;
names.reserve(registry.size());
for (const auto &header: registry) {
names.push_back(header.first);
}
for (const auto &header : registry) {
names.push_back(header.first);
}
return names;
return names;
}
std::unique_ptr<Header>
Registry::makeHeader(const std::string& name) {
auto it = registry.find(name);
if (it == std::end(registry)) {
throw std::runtime_error("Unknown header");
}
std::unique_ptr<Header> Registry::makeHeader(const std::string &name) {
auto it = registry.find(name);
if (it == std::end(registry)) {
throw std::runtime_error("Unknown header");
}
return it->second();
return it->second();
}
bool
Registry::isRegistered(const std::string& name) {
auto it = registry.find(name);
return it != std::end(registry);
bool Registry::isRegistered(const std::string &name) {
auto it = registry.find(name);
return it != std::end(registry);
}
Collection&
Collection::add(const std::shared_ptr<Header>& header) {
headers.insert(std::make_pair(header->name(), header));
Collection &Collection::add(const std::shared_ptr<Header> &header) {
headers.insert(std::make_pair(header->name(), header));
return *this;
return *this;
}
Collection&
Collection::addRaw(const Raw& raw) {
rawHeaders.insert(std::make_pair(raw.name(), raw));
return *this;
Collection &Collection::addRaw(const Raw &raw) {
rawHeaders.insert(std::make_pair(raw.name(), raw));
return *this;
}
std::shared_ptr<const Header>
Collection::get(const std::string& name) const {
auto header = getImpl(name);
if (!header.first) {
throw std::runtime_error("Could not find header");
}
std::shared_ptr<const Header> Collection::get(const std::string &name) const {
auto header = getImpl(name);
if (!header.first) {
throw std::runtime_error("Could not find header");
}
return header.second;
return header.second;
}
std::shared_ptr<Header>
Collection::get(const std::string& name) {
auto header = getImpl(name);
if (!header.first) {
throw std::runtime_error("Could not find header");
}
std::shared_ptr<Header> Collection::get(const std::string &name) {
auto header = getImpl(name);
if (!header.first) {
throw std::runtime_error("Could not find header");
}
return header.second;
return header.second;
}
Raw
Collection::getRaw(const std::string& name) const {
auto it = rawHeaders.find(name);
if (it == std::end(rawHeaders)) {
throw std::runtime_error("Could not find header");
}
Raw Collection::getRaw(const std::string &name) const {
auto it = rawHeaders.find(name);
if (it == std::end(rawHeaders)) {
throw std::runtime_error("Could not find header");
}
return it->second;
return it->second;
}
std::shared_ptr<const Header>
Collection::tryGet(const std::string& name) const {
auto header = getImpl(name);
if (!header.first) return nullptr;
Collection::tryGet(const std::string &name) const {
auto header = getImpl(name);
if (!header.first)
return nullptr;
return header.second;
return header.second;
}
std::shared_ptr<Header>
Collection::tryGet(const std::string& name) {
auto header = getImpl(name);
if (!header.first) return nullptr;
std::shared_ptr<Header> Collection::tryGet(const std::string &name) {
auto header = getImpl(name);
if (!header.first)
return nullptr;
return header.second;
return header.second;
}
Optional<Raw>
Collection::tryGetRaw(const std::string& name) const {
auto it = rawHeaders.find(name);
if (it == std::end(rawHeaders)) {
return Optional<Raw>(None());
}
Optional<Raw> Collection::tryGetRaw(const std::string &name) const {
auto it = rawHeaders.find(name);
if (it == std::end(rawHeaders)) {
return Optional<Raw>(None());
}
return Optional<Raw>(Some(it->second));
return Optional<Raw>(Some(it->second));
}
bool
Collection::has(const std::string& name) const {
return getImpl(name).first;
bool Collection::has(const std::string &name) const {
return getImpl(name).first;
}
std::vector<std::shared_ptr<Header>>
Collection::list() const {
std::vector<std::shared_ptr<Header>> ret;
ret.reserve(headers.size());
for (const auto& h: headers) {
ret.push_back(h.second);
}
std::vector<std::shared_ptr<Header>> Collection::list() const {
std::vector<std::shared_ptr<Header>> ret;
ret.reserve(headers.size());
for (const auto &h : headers) {
ret.push_back(h.second);
}
return ret;
return ret;
}
bool
Collection::remove(const std::string& name) {
auto tit = headers.find(name);
if (tit == std::end(headers)) {
auto rit = rawHeaders.find(name);
if (rit == std::end(rawHeaders)) return false;
bool Collection::remove(const std::string &name) {
auto tit = headers.find(name);
if (tit == std::end(headers)) {
auto rit = rawHeaders.find(name);
if (rit == std::end(rawHeaders))
return false;
rawHeaders.erase(rit);
return true;
}
headers.erase(tit);
rawHeaders.erase(rit);
return true;
}
headers.erase(tit);
return true;
}
void
Collection::clear() {
headers.clear();
rawHeaders.clear();
void Collection::clear() {
headers.clear();
rawHeaders.clear();
}
std::pair<bool, std::shared_ptr<Header>>
Collection::getImpl(const std::string& name) const {
auto it = headers.find(name);
if (it == std::end(headers)) {
return std::make_pair(false, nullptr);
}
Collection::getImpl(const std::string &name) const {
auto it = headers.find(name);
if (it == std::end(headers)) {
return std::make_pair(false, nullptr);
}
return std::make_pair(true, it->second);
return std::make_pair(true, it->second);
}
} // namespace Header
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -3,17 +3,16 @@
using namespace Pistache;
TEST(http_uri_test, query_as_string_test)
{
Http::Uri::Query query1;
ASSERT_TRUE(query1.as_str().empty());
TEST(http_uri_test, query_as_string_test) {
Http::Uri::Query query1;
ASSERT_TRUE(query1.as_str().empty());
Http::Uri::Query query2;
query2.add("value1", "name1");
ASSERT_STREQ(query2.as_str().c_str(), "?value1=name1");
Http::Uri::Query query2;
query2.add("value1", "name1");
ASSERT_STREQ(query2.as_str().c_str(), "?value1=name1");
Http::Uri::Query query3;
query3.add("value1", "name1");
query3.add("value2", "name2");
ASSERT_STREQ(query3.as_str().c_str(), "?value2=name2&value1=name1");
Http::Uri::Query query3;
query3.add("value1", "name1");
query3.add("value2", "name2");
ASSERT_STREQ(query3.as_str().c_str(), "?value2=name2&value1=name1");
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment