const StreamBuffer stream_buf =
session_data->hi_ss[source_id]->reassemble(session_data->flow,
0, 0, nullptr, 0, PKT_PDU_TAIL, copied);
- assert(stream_buf.data != nullptr);
assert(copied == 0);
- Http2DummyPacket dummy_pkt;
- dummy_pkt.flow = session_data->flow;
- dummy_pkt.packet_flags = (source_id == SRC_CLIENT) ? PKT_FROM_CLIENT : PKT_FROM_SERVER;
- dummy_pkt.dsize = stream_buf.length;
- dummy_pkt.data = stream_buf.data;
- session_data->hi->eval(&dummy_pkt);
- assert (http_flow->get_type_expected(source_id) == HttpEnums::SEC_TRAILER);
- if (http_flow->get_type_expected(source_id) == HttpEnums::SEC_ABORT)
+ if (stream_buf.data != nullptr)
{
- stream->set_state(source_id, STREAM_ERROR);
- return;
+ Http2DummyPacket dummy_pkt;
+ dummy_pkt.flow = session_data->flow;
+ dummy_pkt.packet_flags = (source_id == SRC_CLIENT) ? PKT_FROM_CLIENT : PKT_FROM_SERVER;
+ dummy_pkt.dsize = stream_buf.length;
+ dummy_pkt.data = stream_buf.data;
+ session_data->hi->eval(&dummy_pkt);
+ assert (http_flow->get_type_expected(source_id) == HttpEnums::SEC_TRAILER);
+ if (http_flow->get_type_expected(source_id) == HttpEnums::SEC_ABORT)
+ {
+ stream->set_state(source_id, STREAM_ERROR);
+ return;
+ }
+ session_data->hi->clear(&dummy_pkt);
}
- session_data->hi->clear(&dummy_pkt);
}
process_decoded_headers(http_flow, source_id);
{
fprintf(output, "Trailers frame\n");
Http2HeadersFrame::print_frame(output);
-
}
+
#endif
+
{
session_data->half_reset(source_id);
}
- // FIXIT-M update this to include H2 message once H2I supports trailers and finish()
- else if (session_data->type_expected[source_id] == SEC_BODY_CHUNK)
+ else if (session_data->type_expected[source_id] == SEC_BODY_CHUNK ||
+ (session_data->type_expected[source_id] == SEC_BODY_H2 &&
+ session_data->h2_body_state[source_id] == H2_BODY_COMPLETE_EXPECT_TRAILERS))
{
session_data->trailer_prep(source_id);
}