Merge in SNORT/snort3 from ~MDAGON/snort3:version_fix to master
Squashed commit of the following:
commit
15b88a547e2a1c1231f15bc78a1cefaaa32b1f77
Author: Maya Dagon <mdagon@cisco.com>
Date: Fri Jan 14 16:10:22 2022 -0500
http_inspect: http_version_match uses msg section version id
uint32_t get_h2_stream_id() const;
- HttpEnums::VersionId get_version_id(HttpCommon::SourceId source_id) const
- { return version_id[source_id]; }
-
private:
// HTTP/2 handling
bool for_http2 = false;
return current_section->get_num_headers(buffer_info);
}
+VersionId HttpInspect::http_get_version_id(Packet* p) const
+{
+ const HttpMsgSection* const current_section = HttpContextData::get_snapshot(p);
+
+ if (current_section == nullptr)
+ return VERS__NOT_PRESENT;
+
+ return current_section->get_version_id();
+}
+
bool HttpInspect::get_fp_buf(InspectionBuffer::Type ibt, Packet* p, InspectionBuffer& b)
{
if (get_latest_is(p) == IS_NONE)
const Field& http_get_buf(Cursor& c, snort::Packet* p,
const HttpBufferInfo& buffer_info) const;
int32_t http_get_num_headers(snort::Packet* p, const HttpBufferInfo& buffer_info) const;
+ HttpEnums::VersionId http_get_version_id(snort::Packet* p) const;
bool get_fp_buf(snort::InspectionBuffer::Type ibt, snort::Packet* p,
snort::InspectionBuffer& b) override;
bool configure(snort::SnortConfig*) override;
uint64_t get_transaction_id() { return trans_num; }
int32_t get_num_headers(const HttpBufferInfo& buf) const;
+ HttpEnums::VersionId get_version_id() const { return version_id; }
HttpMsgSection* next = nullptr;
return false;
}
-IpsOption::EvalStatus HttpIpsOption::eval_version_match(Packet* p, const Http2FlowData* h2i_flow_data)
+IpsOption::EvalStatus HttpIpsOption::eval_version_match(Packet* p, const HttpInspect* hi)
{
- const HttpFlowData* const flow_data = (h2i_flow_data != nullptr) ?
- (HttpFlowData*)h2i_flow_data->get_hi_flow_data():
- (HttpFlowData*)p->flow->get_flow_data(HttpFlowData::inspector_id);
- const SourceId source_id = p->is_from_client() ? SRC_CLIENT : SRC_SERVER;
- const VersionId version = flow_data->get_version_id(source_id);
+ const VersionId version = hi->http_get_version_id(p);
if (version_flags[version - HttpEnums::VERS__MIN])
return MATCH;
}
else if (buffer_info.type == HTTP_VERSION_MATCH)
{
- return eval_version_match(p, h2i_flow_data);
+ return eval_version_match(p, hi);
}
else
{
#include "http_enum.h"
class HttpInspect;
-class Http2FlowData;
enum PsIdx { PSI_CLIENT_BODY, PSI_COOKIE, PSI_HEADER, PSI_METHOD, PSI_PARAM,
PSI_RAW_BODY, PSI_RAW_COOKIE, PSI_RAW_HEADER, PSI_RAW_REQUEST, PSI_RAW_STATUS,
const snort::RangeCheck range;
const std::bitset<HttpRuleOptModule::version_size> version_flags;
- IpsOption::EvalStatus eval_version_match(snort::Packet* p, const Http2FlowData* h2i_flow_data);
+ IpsOption::EvalStatus eval_version_match(snort::Packet* p, const HttpInspect* hi);
};
#endif