@@ -402,7 +402,7 @@ let handle_headers_block
402
402
t.receiving_headers_for_stream < - None ;
403
403
let parse_state' = AB. feed parse_state' `Eof in
404
404
match parse_state' with
405
- | Done (_ , Ok headers ) ->
405
+ | Done (_ , headers ) ->
406
406
if not is_trailers then
407
407
(* `handle_headers` will take care of transitioning the stream state *)
408
408
let end_stream = partial_headers.end_stream in
@@ -425,7 +425,7 @@ let handle_headers_block
425
425
(* From RFC7540§4.3:
426
426
* A decoding error in a header block MUST be treated as a connection
427
427
* error (Section 5.4.1) of type COMPRESSION_ERROR. *)
428
- | Done ( _ , Error _ ) | Partial _ ->
428
+ | Partial _ ->
429
429
report_connection_error t Error. CompressionError
430
430
| Fail (_ , _ , message ) ->
431
431
report_connection_error
@@ -451,7 +451,7 @@ let create_partial_headers t flags headers_block =
451
451
{ Stream. parse_state =
452
452
AB. parse
453
453
~initial_buffer_size
454
- (Hpack.Decoder. decode_headers t.hpack_decoder)
454
+ (Hpack.Decoder. headers t.hpack_decoder)
455
455
; end_stream = Flags. test_end_stream flags
456
456
}
457
457
@@ -493,7 +493,7 @@ let process_trailer_headers t respd active_response frame_header headers_block =
493
493
else
494
494
let partial_headers =
495
495
{ Stream. parse_state =
496
- AB. parse (Hpack.Decoder. decode_headers t.hpack_decoder)
496
+ AB. parse (Hpack.Decoder. headers t.hpack_decoder)
497
497
(* obviously true at this point. *)
498
498
; end_stream
499
499
}
@@ -846,7 +846,8 @@ let process_settings_frame t { Frame.frame_header; _ } settings =
846
846
* size of the header compression table used to decode header
847
847
* blocks, in octets. *)
848
848
t.settings.header_table_size < - x;
849
- Hpack.Encoder. set_capacity t.hpack_encoder x
849
+ let table_size = min t.config.encoder_table_size x in
850
+ Hpack.Encoder. change_table_size t.hpack_encoder table_size
850
851
| EnablePush , x ->
851
852
(* We've already verified that this setting is either 0 or 1 in the
852
853
* call to `Settings.check_settings_list` above. *)
@@ -1164,6 +1165,7 @@ let create ?(config = Config.default) ?push_handler ~error_handler =
1164
1165
(* If the caller is not going to process PUSH_PROMISE frames, just
1165
1166
* disable it. *)
1166
1167
config.enable_server_push && push_handler != default_push_handler
1168
+ ; header_table_size = config.decoder_table_size
1167
1169
}
1168
1170
in
1169
1171
let rec connection_preface_handler recv_frame settings_list =
@@ -1243,8 +1245,8 @@ let create ?(config = Config.default) ?push_handler ~error_handler =
1243
1245
(* From RFC7540§4.3:
1244
1246
* Header compression is stateful. One compression context and one
1245
1247
* decompression context are used for the entire connection. *)
1246
- ; hpack_encoder = Hpack.Encoder. ( create settings. header_table_size)
1247
- ; hpack_decoder = Hpack.Decoder. ( create settings.header_table_size )
1248
+ ; hpack_encoder = Hpack.Encoder. create ~max_size: (min Settings. default_settings. header_table_size config.encoder_table_size) ( )
1249
+ ; hpack_decoder = Hpack.Decoder. create ~max_size_limit: config.decoder_table_size ( )
1248
1250
}
1249
1251
in
1250
1252
let t = Lazy. force t in
0 commit comments