summaryrefslogtreecommitdiff
path: root/src/httpscan.cc
diff options
context:
space:
mode:
authorLu <[email protected]>2018-06-11 10:51:11 +0800
committerLu <[email protected]>2018-06-11 10:51:11 +0800
commit72bca3159ec93e2e7d6a9612d8601fe7d40b07f6 (patch)
tree45315131f609097296997d5079eb651fc452222a /src/httpscan.cc
parentfe5d92850822671a2988048cdd0ed9e1bc619812 (diff)
增加Forge Socket的Listener
Diffstat (limited to 'src/httpscan.cc')
-rw-r--r--src/httpscan.cc80
1 files changed, 45 insertions, 35 deletions
diff --git a/src/httpscan.cc b/src/httpscan.cc
index 8273b02..0ca8b70 100644
--- a/src/httpscan.cc
+++ b/src/httpscan.cc
@@ -39,24 +39,21 @@ HttpScan::HttpScan(struct tfe_instance *instance, struct tfe_config *config)
table_id_ctrl_http_res_body = __maat_table_register_or_throw(maat_feather_ref, "PXY_CTRL_HTTP_RES_BODY");
auto http_module = instance->http_module;
-
- http_module->SetHttpConnectionNewCallback([this](Http &ht, HttpConnection & ct)->void
+ http_module->SetHttpConnectionNewCallback([this](Http &ht, HttpConnection &ct) -> void
{
this->handlerConnectionCreate(ct);
});
- http_module->SetHttpConnectionCloseCallback([this](Http & ht, HttpConnection & ct)->void
+ http_module->SetHttpConnectionCloseCallback([this](Http &ht, HttpConnection &ct) -> void
{
this->handlerConnectionClose(ct);
});
-
- return;
}
void HttpScan::handlerConnectionCreate(HttpConnection &ct)
{
/* 新Session的创建处理函数 */
- ct.SetSessionNewCallback([this](HttpSession & session)->void
+ ct.SetSessionNewCallback([this](HttpSession &session) -> void
{
/* 创建HttpScan的Session Ctx */
auto __scan_ctx = std::make_shared<HttpScanSession>(*this);
@@ -66,25 +63,25 @@ void HttpScan::handlerConnectionCreate(HttpConnection &ct)
* 这样,回调时始终保持__scan_ctx的引用计数大于等于1,
* 避免在回调过程中变更回调函数导致ctx析构。
*/
- session.SetRequestHeaderCallback([__scan_ctx](HttpSession & session)
+ session.SetRequestHeaderCallback([__scan_ctx](HttpSession &session)
{
auto __scan_ctx_stack = __scan_ctx;
__scan_ctx_stack->ScanRequestHeader(&session);
});
- session.SetRequestBodyCallback([__scan_ctx](HttpSession & session)
+ session.SetRequestBodyCallback([__scan_ctx](HttpSession &session)
{
auto __scan_ctx_stack = __scan_ctx;
__scan_ctx->ScanRequestBody(&session);
});
- session.SetResponseHeaderCallback([__scan_ctx](HttpSession & session)
+ session.SetResponseHeaderCallback([__scan_ctx](HttpSession &session)
{
auto __scan_ctx_stack = __scan_ctx;
__scan_ctx->ScanResponseHeader(&session);
});
- session.SetResponseBodyCallback([__scan_ctx](HttpSession & session)
+ session.SetResponseBodyCallback([__scan_ctx](HttpSession &session)
{
auto __scan_ctx_stack = __scan_ctx;
__scan_ctx->ScanResponseBody(&session);
@@ -93,6 +90,30 @@ void HttpScan::handlerConnectionCreate(HttpConnection &ct)
/* 不设置SessionClose的回调函数,相应的逻辑在HttpScanSession的析构函数中处理 */
ct.SetSessionCloseCallback(nullptr);
+}
+
+void HttpScan::handlerConnectionClose(HttpConnection &ct)
+{
+ return;
+}
+
+int HttpScan::connection_bypass_scan()
+{
+ return 0;
+}
+
+int HttpScan::connection_bypass_do_action()
+{
+ return 0;
+}
+
+std::unique_ptr<HttpScan> HttpScan::HttpScanFactory(struct tfe_instance *instance, struct tfe_config *config)
+{
+ std::unique_ptr<HttpScan> __this_ptr = std::make_unique<HttpScan>(instance, config);
+
+
+
+ return std::move(__this_ptr);
};
HttpScanSession::HttpScanSession(const HttpScan &httpscan_module) :
@@ -107,13 +128,13 @@ HttpScanSession::~HttpScanSession()
void HttpScanSession::ScanRequestHeader(HttpSession *http_session_ctx)
{
- auto & http_request = http_session_ctx->request();
+ auto &http_request = http_session_ctx->request();
int dummy[MAAT_SCAN_RESULT_];
/* 扫描IP地址,获取连接对应的四元组 */
- const auto & connection = http_session_ctx->connection();
- const auto * sockaddr_src = connection.SockAddrSource();
- const auto * sockaddr_dst = connection.SockAddrDest();
+ const auto &connection = http_session_ctx->connection();
+ const auto *sockaddr_src = connection.SockAddrSource();
+ const auto *sockaddr_dst = connection.SockAddrDest();
/* 转换为Sapp中的四元组结构体 */
auto sapp_tuple4_ptr = sockaddr_to_sapp_ipaddr(sockaddr_src, sockaddr_dst);
@@ -129,7 +150,7 @@ void HttpScanSession::ScanRequestHeader(HttpSession *http_session_ctx)
return hit_scan_error();
/* 扫描HTTP URL */
- const auto & __url = http_request.Url();
+ const auto &__url = http_request.Url();
nr_maat_scan_result_ = Maat_full_scan_string(httpscan_module_ref_.maat_feather_ref,
httpscan_module_ref_.table_id_ctrl_http_url, CHARSET_UTF8, __url.c_str(), (int) __url.length(),
@@ -141,7 +162,7 @@ void HttpScanSession::ScanRequestHeader(HttpSession *http_session_ctx)
return hit_scan_error();
/* 未命中HTTP URL,继续扫描其他HTTP头部字段 */
- http_request.ForEachHeader([this, http_session_ctx](const std::string & field, const std::string & value)
+ http_request.ForEachHeader([this, http_session_ctx](const std::string &field, const std::string &value)
{
/* 增强字符串表,设置区域字段,即Header字段 */
int ret = Maat_set_scan_status(httpscan_module_ref_.maat_feather_ref, &maat_scan_mid_,
@@ -192,9 +213,9 @@ void HttpScanSession::hit_config_and_do_action(HttpSession *http_session_ctx)
if (maat_scan_result_[i].action <= action_type) do_action_id = i;
}
- Maat_rule_t * hit_maat_rule = &maat_scan_result_[do_action_id];
- auto __action_type = (enum HttpActionType)hit_maat_rule->action;
- const char * __action_string = hit_maat_rule->service_defined;
+ Maat_rule_t *hit_maat_rule = &maat_scan_result_[do_action_id];
+ auto __action_type = (enum HttpActionType) hit_maat_rule->action;
+ const char *__action_string = hit_maat_rule->service_defined;
/* 创建HttpAction的对象 */
auto action_object = HttpActionFactory(__action_type, __action_string);
@@ -204,25 +225,25 @@ void HttpScanSession::hit_config_and_do_action(HttpSession *http_session_ctx)
action_object->service_id(hit_maat_rule->service_id);
/* 替换HttpSession的事件处理函数,以后的事件由HttpAction处理 */
- http_session_ctx->SetRequestHeaderCallback([action_object](HttpSession & session)
+ http_session_ctx->SetRequestHeaderCallback([action_object](HttpSession &session)
{
auto __action_object = action_object;
__action_object->OnRequestHeader(&session);
});
- http_session_ctx->SetRequestBodyCallback([action_object](HttpSession & session)
+ http_session_ctx->SetRequestBodyCallback([action_object](HttpSession &session)
{
auto __action_object = action_object;
__action_object->OnRequestBody(&session);
});
- http_session_ctx->SetResponseHeaderCallback([action_object](HttpSession & session)
+ http_session_ctx->SetResponseHeaderCallback([action_object](HttpSession &session)
{
auto __action_object = action_object;
__action_object->OnResponseHeader(&session);
});
- http_session_ctx->SetResponseBodyCallback([action_object](HttpSession & session)
+ http_session_ctx->SetResponseBodyCallback([action_object](HttpSession &session)
{
auto __action_object = action_object;
__action_object->OnResponseBody(&session);
@@ -232,21 +253,10 @@ void HttpScanSession::hit_config_and_do_action(HttpSession *http_session_ctx)
log_dbg_printf("hit rule: service_id = %d, config_id = %d, action = %d\n",
hit_maat_rule->service_id, hit_maat_rule->config_id, hit_maat_rule->action);
- if (hit_maat_rule->do_blacklist)
- {
-
- }
-
- if (hit_maat_rule->do_log)
- {
-
- }
-
return;
}
void HttpScanSession::hit_scan_error()
{
return;
-}
-#pragma clang diagnostic pop \ No newline at end of file
+} \ No newline at end of file