-
Notifications
You must be signed in to change notification settings - Fork 131
/
Copy pathHTTPResponse.hpp
72 lines (55 loc) · 1.61 KB
/
HTTPResponse.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef SRC_HTTPRESPONSE_HPP_
#define SRC_HTTPRESPONSE_HPP_
#include <Arduino.h>
#include <string>
// Arduino declares it's own min max, incompatible with the stl...
#undef min
#undef max
#undef write
#include <vector>
//#include <openssl/ssl.h>
#include <esp_tls.h>
#include "util.hpp"
#include "ConnectionContext.hpp"
#include "HTTPHeaders.hpp"
#include "HTTPHeader.hpp"
namespace httpsserver {
/**
* \brief Represents the response stream of an HTTP request
*/
class HTTPResponse : public Print {
public:
HTTPResponse(ConnectionContext * con);
virtual ~HTTPResponse();
void setStatusCode(uint16_t statusCode);
void setStatusText(std::string const &statusText);
uint16_t getStatusCode();
std::string getStatusText();
void setHeader(std::string const &name, std::string const &value);
std::string getHeader(std::string const &name);
bool isHeaderWritten();
void printStd(std::string const &str);
// From Print:
size_t write(const uint8_t *buffer, size_t size);
size_t write(uint8_t);
void error();
bool isResponseBuffered();
void finalize();
ConnectionContext * _con;
private:
void printHeader();
void printInternal(const std::string &str, bool skipBuffer = false);
size_t writeBytesInternal(const void * data, int length, bool skipBuffer = false);
void drainBuffer(bool onOverflow = false);
uint16_t _statusCode;
std::string _statusText;
HTTPHeaders _headers;
bool _headerWritten;
bool _isError;
// Response cache
byte * _responseCache;
size_t _responseCacheSize;
size_t _responseCachePointer;
};
} /* namespace httpsserver */
#endif /* SRC_HTTPRESPONSE_HPP_ */