HttpResponse code and reason
parent
4220d44625
commit
8f012d68a6
|
@ -0,0 +1,87 @@
|
||||||
|
#include "HttpResponse.h"
|
||||||
|
|
||||||
|
HttpResponse::HttpResponse(): code(200) {
|
||||||
|
reason = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpResponse::HttpResponse(unsigned int code): code(code) {
|
||||||
|
reason = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpResponse::HttpResponse(unsigned int code, const char * reason): code(code) {
|
||||||
|
this->reason = nullptr;
|
||||||
|
setReason(reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * HttpResponse::setReason(const char * reason)
|
||||||
|
{
|
||||||
|
if (this->reason != nullptr) free(this->reason);
|
||||||
|
if (reason == nullptr) return this->reason = nullptr;
|
||||||
|
this->reason = (char *) malloc(strlen(reason));
|
||||||
|
strcpy(this->reason, reason);
|
||||||
|
|
||||||
|
return this->reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * HttpResponse::getReason()
|
||||||
|
{
|
||||||
|
if (this->reason) return this->reason;
|
||||||
|
return HttpResponse::getDefaultReason(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char * HttpResponse::getDefaultReason(unsigned int code)
|
||||||
|
{
|
||||||
|
switch(code) {
|
||||||
|
case 100: return "Continue";
|
||||||
|
case 101: return "Switching Protocols";
|
||||||
|
|
||||||
|
case 200: return "OK";
|
||||||
|
case 201: return "Created";
|
||||||
|
case 202: return "Accepted";
|
||||||
|
case 203: return "Non-Authoritative Information";
|
||||||
|
case 204: return "No Content";
|
||||||
|
case 205: return "Reset Content";
|
||||||
|
case 206: return "Partial Content";
|
||||||
|
|
||||||
|
case 300: return "Multiple Choices";
|
||||||
|
case 301: return "Moved Permanently";
|
||||||
|
case 302: return "Found";
|
||||||
|
case 303: return "See Other";
|
||||||
|
case 304: return "Not Modified";
|
||||||
|
case 305: return "Use Proxy";
|
||||||
|
case 307: return "Temporary Redirect";
|
||||||
|
|
||||||
|
case 400: return "Bad Request";
|
||||||
|
case 401: return "Unauthorized";
|
||||||
|
case 402: return "Payment Required";
|
||||||
|
case 403: return "Forbidden";
|
||||||
|
case 404: return "Not Found";
|
||||||
|
case 405: return "Method Not Allowed";
|
||||||
|
case 406: return "Not Acceptable";
|
||||||
|
case 407: return "Proxy Authentication Required";
|
||||||
|
case 408: return "Request Time-Out";
|
||||||
|
case 409: return "Conflict";
|
||||||
|
case 410: return "Gone";
|
||||||
|
case 411: return "Length Required";
|
||||||
|
case 412: return "Precondition Failed";
|
||||||
|
case 413: return "Request Entity Too Large";
|
||||||
|
case 414: return "Request-URI Too Large";
|
||||||
|
case 415: return "Unsupported Media Type";
|
||||||
|
case 416: return "Requested range not satisfiable";
|
||||||
|
case 417: return "Expectation Failed";
|
||||||
|
|
||||||
|
case 500: return "Internal Server Error";
|
||||||
|
case 501: return "Not Implemented";
|
||||||
|
case 502: return "Bad Gateway";
|
||||||
|
case 503: return "Service Unavailable";
|
||||||
|
case 504: return "Gateway Timeout";
|
||||||
|
case 505: return "HTTP Version Not Supported";
|
||||||
|
|
||||||
|
default: return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpResponse::~HttpResponse()
|
||||||
|
{
|
||||||
|
if (reason) free(reason);
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
#pragma once
|
||||||
|
#include "HttpHeaders.h"
|
||||||
|
|
||||||
|
#ifdef _TEST_
|
||||||
|
#include "dummy/DummyStream.h"
|
||||||
|
#else
|
||||||
|
#include "Arduino.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class HttpResponse
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
HttpResponse();
|
||||||
|
HttpResponse(unsigned int code);
|
||||||
|
HttpResponse(unsigned int code, const char *);
|
||||||
|
~HttpResponse();
|
||||||
|
unsigned int code;
|
||||||
|
char * reason;
|
||||||
|
HttpHeaders headers;
|
||||||
|
Stream * message;
|
||||||
|
const char * setReason(const char * reason);
|
||||||
|
const char * getReason();
|
||||||
|
static const char * getDefaultReason(unsigned int);
|
||||||
|
private:
|
||||||
|
};
|
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
typedef struct requestHandler {
|
||||||
|
HttpRequest request;
|
||||||
|
char** slugs;
|
||||||
|
respond();
|
||||||
|
} RequestHandler;
|
||||||
|
|
||||||
|
class RequestRouter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
char* match(Request);
|
||||||
|
};
|
|
@ -0,0 +1,33 @@
|
||||||
|
#include "catch.hpp"
|
||||||
|
#include "HttpResponse.h"
|
||||||
|
|
||||||
|
using Catch::Matchers::Equals;
|
||||||
|
|
||||||
|
TEST_CASE("Instantiate HttpResponse", "[HttpResponse]")
|
||||||
|
{
|
||||||
|
HttpResponse response;
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Default Response is 200 OK", "[HttpResponse]")
|
||||||
|
{
|
||||||
|
HttpResponse response;
|
||||||
|
REQUIRE( response.code == 200 );
|
||||||
|
REQUIRE_THAT(response.getReason(), Equals("OK"));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Set Reason","[HttpResponse]")
|
||||||
|
{
|
||||||
|
HttpResponse response;
|
||||||
|
response.setReason("Foo");
|
||||||
|
CHECK( response.code == 200 );
|
||||||
|
REQUIRE_THAT(response.getReason(), Equals("Foo"));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Unset reason", "[HttpResponse]")
|
||||||
|
{
|
||||||
|
HttpResponse response;
|
||||||
|
response.setReason("Foo");
|
||||||
|
REQUIRE(response.code == 200);
|
||||||
|
response.setReason(nullptr);
|
||||||
|
REQUIRE_THAT(response.getReason(), Equals("OK")); // unsetting reason should restore default
|
||||||
|
}
|
Loading…
Reference in New Issue