blob: aea7f6a08b4bc6047eaf82e4e5f72ce84bb83235 (
plain)
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
73
74
75
76
77
78
79
80
81
|
//
// Created by luqiu on 2018-5-17.
//
#ifndef TFE_HTTPACTION_H
#define TFE_HTTPACTION_H
#include <string>
#include <memory>
#include "http.h"
enum HttpActionType
{
kActionBypass = 0x00,
kActionMonitor = 0x01,
kActionBlock = 0x10,
kActionDrop = 0x20,
kActionRedirect = 0x30,
kActionRateLimit = 0x40,
kActionReplace = 0x50,
kActionWhiteList = 0x80,
kActionMax = 0xff
};
/* 结构化日志构建与发送 */
class HttpLogger
{
public:
explicit HttpLogger(StructLogger * st_logger, unsigned int service_id, unsigned int cfg_id);
virtual ~HttpLogger();
void ConstructByConnection(const HttpConnection & conn);
void ConstructByRequestHeader(const HttpRequest & request);
void ConstructByRequestBody(const HttpRequest & request);
void ConstructByResponseHeader(const HttpResponse & resp);
void ConstructByResponseBody(const HttpResponse & resp);
void SendLog();
void SetAutoSendLog(bool auto_sendlog)
{ auto_sendlog_ = auto_sendlog; }
private:
const sockaddr * sk_src_{nullptr};
const sockaddr * sk_dst_{nullptr};
unsigned int service_id_{0};
unsigned int cfg_id_{0};
StructLogger * st_logger_{nullptr};
Json::Value st_log_{};
unsigned int topic_id_{LOG_TOPIC_CTRL_HTTP};
bool auto_sendlog_{true};
bool need_to_sendlog_{false};
};
/* HttpAction接口
* 该接口描述了命中扫描规则后的处理流程与状态
* 根据命中处理业务的不同,分别地实现
*/
class HttpAction
{
public:
virtual void Construct(const std::string &str_service_define) = 0;
virtual std::string DumpToString() = 0;
virtual void OnRequestHeader(HttpSession *session) = 0;
virtual void OnRequestBody(HttpSession *session) = 0;
virtual void OnResponseHeader(HttpSession *session) = 0;
virtual void OnResponseBody(HttpSession *session) = 0;
virtual void LoggerSetup(std::unique_ptr<HttpLogger> logger) = 0;
virtual void LoggerClear() = 0;
};
std::shared_ptr<HttpAction> HttpActionFactory(enum HttpActionType type, std::string str_service_define);
std::unique_ptr<HttpLogger> HttpLoggerFactory(int service_id, int cfg_id);
#endif //TFE_HTTPACTION_H
|