hi_ss[k]->go_away();
delete[] frame_data[k];
}
-
- for (Http2Stream* stream : streams)
- delete stream;
}
-HttpFlowData* Http2FlowData::get_hi_flow_data() const
+HttpFlowData* Http2FlowData::get_hi_flow_data()
{
assert(stream_in_hi != Http2Enums::NO_STREAM_ID);
Http2Stream* stream = get_hi_stream();
stream->set_hi_flow_data(flow);
}
-Http2Stream* Http2FlowData::find_stream(const uint32_t key) const
+Http2Stream* Http2FlowData::find_stream(const uint32_t key)
{
- for (Http2Stream* stream : streams)
+ for (Http2Stream& stream : streams)
{
- if (stream->get_stream_id() == key)
- return stream;
+ if (stream.get_stream_id() == key)
+ return &stream;
}
return nullptr;
}
// Allocate new stream
- stream = new Http2Stream(key, this);
- streams.emplace_front(stream);
+ streams.emplace_front(key, this);
+ stream = &streams.front();
// stream 0 does not count against stream limit
if (key > 0)
void Http2FlowData::delete_processing_stream()
{
- std::list<Http2Stream*>::iterator it;
+ std::list<Http2Stream>::iterator it;
+
for (it = streams.begin(); it != streams.end(); ++it)
{
- if ((*it)->get_stream_id() == processing_stream_id)
+ if (it->get_stream_id() == processing_stream_id)
{
- delete *it;
streams.erase(it);
delete_stream = false;
assert(concurrent_streams > 0);
assert(false);
}
-Http2Stream* Http2FlowData::get_hi_stream() const
+Http2Stream* Http2FlowData::get_hi_stream()
{
return find_stream(stream_in_hi);
}
-Http2Stream* Http2FlowData::find_current_stream(const SourceId source_id) const
+Http2Stream* Http2FlowData::find_current_stream(const SourceId source_id)
{
return find_stream(current_stream[source_id]);
}
-Http2Stream* Http2FlowData::find_processing_stream() const
+Http2Stream* Http2FlowData::find_processing_stream()
{
return find_stream(get_processing_stream_id());
}
static void init() { inspector_id = snort::FlowData::create_flow_data_id(); }
// Used by http_inspect to store its stuff
- HttpFlowData* get_hi_flow_data() const;
+ HttpFlowData* get_hi_flow_data();
void set_hi_flow_data(HttpFlowData* flow);
HttpMsgSection* get_hi_msg_section() const { return hi_msg_section; }
void set_hi_msg_section(HttpMsgSection* section)
friend class Http2WindowUpdateFrame;
friend void finish_msg_body(Http2FlowData* session_data, HttpCommon::SourceId source_id);
- Http2Stream* find_current_stream(const HttpCommon::SourceId source_id) const;
+ Http2Stream* find_current_stream(const HttpCommon::SourceId source_id);
uint32_t get_current_stream_id(const HttpCommon::SourceId source_id) const;
Http2Stream* get_processing_stream(const HttpCommon::SourceId source_id, uint32_t concurrent_streams_limit);
- Http2Stream* find_processing_stream() const;
+ Http2Stream* find_processing_stream();
uint32_t get_processing_stream_id() const;
void set_processing_stream_id(const HttpCommon::SourceId source_id);
bool is_processing_partial_header() const { return processing_partial_header; }
// Used in eval()
Http2ConnectionSettings connection_settings[2];
Http2HpackDecoder hpack_decoder[2];
- std::list<Http2Stream*> streams;
+ std::list<Http2Stream> streams;
uint32_t concurrent_files = 0;
uint32_t concurrent_streams = 0;
uint32_t stream_memory_allocations_tracked = Http2Enums::STREAM_MEMORY_TRACKING_INCREMENT;
#endif
private:
- Http2Stream* get_hi_stream() const;
- Http2Stream* find_stream(const uint32_t key) const;
+ Http2Stream* get_hi_stream();
+ Http2Stream* find_stream(const uint32_t key);
void delete_processing_stream();
};
}
// Loop through all nonzero streams with open message bodies and call NHI finish()
- for (const Http2Stream* stream : session_data->streams)
+ for (const Http2Stream& stream : session_data->streams)
{
- if ((stream->get_stream_id() == 0) ||
- (stream->get_state(source_id) >= STREAM_COMPLETE) ||
- (stream->get_hi_flow_data() == nullptr) ||
- (stream->get_hi_flow_data()->get_type_expected(source_id)
+ if ((stream.get_stream_id() == 0) ||
+ (stream.get_state(source_id) >= STREAM_COMPLETE) ||
+ (stream.get_hi_flow_data() == nullptr) ||
+ (stream.get_hi_flow_data()->get_type_expected(source_id)
!= SEC_BODY_HX) ||
(session_data->processing_partial_header &&
- (stream->get_stream_id() == session_data->current_stream[source_id])))
+ (stream.get_stream_id() == session_data->current_stream[source_id])))
{
continue;
}
- session_data->stream_in_hi = stream->get_stream_id();
+ session_data->stream_in_hi = stream.get_stream_id();
if (session_data->hi_ss[source_id]->finish(flow))
{
- assert(stream->get_stream_id() == session_data->current_stream[source_id]);
+ assert(stream.get_stream_id() == session_data->current_stream[source_id]);
need_reassemble = true;
#ifdef REG_TEST
if (HttpTestManager::use_test_input(HttpTestManager::IN_HTTP2))