Added httpver to response

feature/UrlUtils
Kenneth Barbour 2018-03-20 19:53:48 -04:00 committed by Kenneth Barbour
parent 3b38fe1ae5
commit ab82e09798
5 changed files with 83 additions and 14 deletions

View File

@ -24,15 +24,15 @@ class HttpRequest
const char * setUrl(const char *);
const char * setUrl(const char *, size_t);
const char * getUrl();
const char * setHttpVer(const char *);
const char * getHttpVer();
const char * setHttpVer(const char *); // TODO: setHttpVersion()
const char * getHttpVer(); // TODO: getHttpVersion()
const char * setMessage(const char *);
const char * setMessage(const char *, unsigned int);
const char * getMessage();
unsigned int getMessageLength() { return message_length; };
char method [HTTPREQUEST_METHOD_SIZE];
char * url;
char httpver [HTTPREQUEST_HTTPVER_SIZE];
char httpver [HTTPREQUEST_HTTPVER_SIZE]; // TODO: private
HttpHeaders headers;
protected:
long int message_length;

View File

@ -1,21 +1,50 @@
#include "HttpResponse.h"
HttpResponse::HttpResponse(Buffer & buffer): buffer(&buffer), code(200), reason() {};
/**
* TODO: this is the only constructor really needed unless _TEST_
*/
HttpResponse::HttpResponse(Buffer & buffer):
buffer(&buffer),
code(200),
reason(),
httpver()
{};
HttpResponse::HttpResponse(Buffer & buffer, unsigned int code): buffer(&buffer), code(code), reason() {};
HttpResponse::HttpResponse(Buffer & buffer, unsigned int code):
buffer(&buffer),
code(code),
reason(),
httpver()
{};
HttpResponse::HttpResponse(Buffer & buffer, unsigned int code, const char * reason)
:buffer(&buffer), code(code), reason()
HttpResponse::HttpResponse(Buffer & buffer, unsigned int code, const char * reason):
buffer(&buffer),
code(code),
reason(),
httpver()
{
setReason(reason);
}
HttpResponse::HttpResponse(): buffer(), code(200), reason() {};
HttpResponse::HttpResponse():
buffer(),
code(200),
reason(),
httpver()
{};
HttpResponse::HttpResponse(unsigned int code): buffer(), code(code), reason() {}
HttpResponse::HttpResponse(unsigned int code):
buffer(),
code(code),
reason(),
httpver()
{}
HttpResponse::HttpResponse(unsigned int code, const char * reason)
: buffer(), code(code), reason()
HttpResponse::HttpResponse(unsigned int code, const char * reason):
buffer(),
code(code),
reason(),
httpver()
{
setReason(reason);
}
@ -36,6 +65,18 @@ const char * HttpResponse::getReason() const
return HttpResponse::getDefaultReason(code);
}
const char * HttpResponse::setHttpVersion(const char * version)
{
strncpy(httpver, version, HTTPRESPONSE_HTTPVER_SIZE - 1);
httpver[HTTPRESPONSE_HTTPVER_SIZE - 1] = '\0';
return httpver;
}
const char * HttpResponse::getHttpVersion() const
{
return httpver;
}
const char * HttpResponse::getDefaultReason(unsigned int code)
{
switch(code) {
@ -101,6 +142,8 @@ size_t HttpResponse::write(uint8_t * data, size_t len)
size_t HttpResponse::printTo(Print& client) const
{
size_t len = 0;
len += client.print(getHttpVersion());
len += client.print(' ');
len += client.print((int) code);
len += client.print(' ');
len += client.println(getReason());

View File

@ -11,11 +11,13 @@
#include "Print.h"
#include "Printable.h"
#define HTTPRESPONSE_HTTPVER_SIZE 9
class HttpResponse: public Print, public Printable
{
public:
HttpResponse(Buffer&);
HttpResponse(Buffer&, unsigned int);
HttpResponse(Buffer&); // TODO: only cnstr needed by WebKernel, add httpver param
HttpResponse(Buffer&, unsigned int); // TODO: remove unnecessary constructors
HttpResponse(Buffer&, unsigned int, const char *);
HttpResponse();
HttpResponse(unsigned int code);
@ -23,6 +25,8 @@ class HttpResponse: public Print, public Printable
~HttpResponse();
unsigned int code;
HttpHeaders headers;
const char * setHttpVersion(const char *);
const char * getHttpVersion() const;
const char * setReason(const char * reason);
const char * getReason() const;
static const char * getDefaultReason(unsigned int);
@ -35,4 +39,5 @@ class HttpResponse: public Print, public Printable
private:
Buffer * buffer;
char * reason;
char httpver[HTTPRESPONSE_HTTPVER_SIZE];
};

View File

@ -37,6 +37,7 @@ void WebKernel::handleClients()
_client.flush();
case S_DISPATCHING:
HttpResponse response(_resp_buffer);
response.setHttpVersion(_request.getHttpVer());
_dispatcher.handle(_request, response);
response.headers.set("Connection","close");
_client.print(response);

View File

@ -39,11 +39,31 @@ TEST_CASE("HttpResponse printTo", "[HttpResponse]")
Buffer message(response_buffer, 100);
Buffer client(print_buffer, 100);
HttpResponse r(message);
r.setHttpVersion("HTTP/1.1");
r.code = 200;
r.write("Response Body");
r.headers.set("Cookie","1234");
client.print(r);
CHECK_THAT((char *)print_buffer, Equals("200 OK\r\nCookie: 1234\r\n\r\nResponse Body"));
CHECK_THAT((char *)print_buffer, Equals("HTTP/1.1 200 OK\r\nCookie: 1234\r\n\r\nResponse Body"));
}
TEST_CASE("HttpResponse get/setHttpVersion", "[HttpResponse]")
{
HttpResponse r;
SECTION("Empty") {
r.setHttpVersion("");
CHECK_THAT(r.getHttpVersion(), Equals(""));
}
SECTION("HTTP/1.1") {
r.setHttpVersion("HTTP/1.1");
CHECK_THAT(r.getHttpVersion(), Equals("HTTP/1.1"));
}
SECTION("Overflow buffer") {
r.setHttpVersion("AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPP");
}
}