-
Notifications
You must be signed in to change notification settings - Fork 253
Expand file tree
/
Copy pathhttp_context.h
More file actions
52 lines (41 loc) · 1.26 KB
/
http_context.h
File metadata and controls
52 lines (41 loc) · 1.26 KB
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
#ifndef TEST_HTTP_HTTP_CONTEXT_HEADER
#define TEST_HTTP_HTTP_CONTEXT_HEADER
#include "http_request.h"
#include "include/cppnet_type.h"
enum HttpRequestParseState{
ExpectRequestLine,
ExpectHeaders,
ExpectBody,
GotAll,
};
class HttpContext {
public:
HttpContext() : _state(ExpectRequestLine), _request() { }
~HttpContext() {}
// default copy-ctor, dtor and assignment are fine
// return false if any error
bool ParseRequest(cppnet::BufferPtr buf, uint64_t receive_time);
bool IsGotAll() const {
return _state == GotAll;
}
void Reset() {
_state = ExpectRequestLine;
_request.Clear();
}
const HttpRequest& GetRequest() const {
return _request;
}
HttpRequest& GetRequest(){
return _request;
}
bool IsKeepAlive() {
const std::string& connection = _request.GetHeader("Connection");
return !(connection != "close" || (_request.GetVersion() == Http10 && connection != "Keep-Alive"));
}
private:
bool processRequestLine(const char* begin, const char* end);
private:
HttpRequestParseState _state;
HttpRequest _request;
};
#endif