diff options
Diffstat (limited to 'src/httpscan.cc')
| -rw-r--r-- | src/httpscan.cc | 80 |
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 |
