aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2019-09-23 12:44:22 +0200
committerLoïc Hoguin <[email protected]>2019-09-23 12:44:22 +0200
commit3c648709aa4e51a8ae8b5a46cdb94132397ea8ef (patch)
tree6613e043469bad744dea2fedcff4591e60ce7906
parent1c08f0454178ee00ee65d7cd496ee404610103dc (diff)
downloadgun-3c648709aa4e51a8ae8b5a46cdb94132397ea8ef.tar.gz
gun-3c648709aa4e51a8ae8b5a46cdb94132397ea8ef.tar.bz2
gun-3c648709aa4e51a8ae8b5a46cdb94132397ea8ef.zip
Accept all cow_http2_machine options
-rw-r--r--src/gun.erl20
-rw-r--r--src/gun_http2.erl35
2 files changed, 44 insertions, 11 deletions
diff --git a/src/gun.erl b/src/gun.erl
index da91514..255e2ac 100644
--- a/src/gun.erl
+++ b/src/gun.erl
@@ -183,7 +183,25 @@
-type http2_opts() :: #{
closing_timeout => timeout(),
flow => pos_integer(),
- keepalive => timeout()
+ keepalive => timeout(),
+
+ %% Options copied from cow_http2_machine.
+ connection_window_margin_size => 0..16#7fffffff,
+ connection_window_update_threshold => 0..16#7fffffff,
+ enable_connect_protocol => boolean(),
+ initial_connection_window_size => 65535..16#7fffffff,
+ initial_stream_window_size => 0..16#7fffffff,
+ max_connection_window_size => 0..16#7fffffff,
+ max_concurrent_streams => non_neg_integer() | infinity,
+ max_decode_table_size => non_neg_integer(),
+ max_encode_table_size => non_neg_integer(),
+ max_frame_size_received => 16384..16777215,
+ max_frame_size_sent => 16384..16777215 | infinity,
+ max_stream_window_size => 0..16#7fffffff,
+ preface_timeout => timeout(),
+ settings_timeout => timeout(),
+ stream_window_margin_size => 0..16#7fffffff,
+ stream_window_update_threshold => 0..16#7fffffff
}.
-export_type([http2_opts/0]).
diff --git a/src/gun_http2.erl b/src/gun_http2.erl
index 9ddf9bb..7041ad9 100644
--- a/src/gun_http2.erl
+++ b/src/gun_http2.erl
@@ -53,7 +53,7 @@
owner :: pid(),
socket :: inet:socket() | ssl:sslsocket(),
transport :: module(),
- opts = #{} :: map(), %% @todo
+ opts = #{} :: gun:http2_opts(),
content_handlers :: gun_content_handler:opt(),
buffer = <<>> :: binary(),
@@ -89,15 +89,30 @@ do_check_options([{keepalive, infinity}|Opts]) ->
do_check_options(Opts);
do_check_options([{keepalive, K}|Opts]) when is_integer(K), K > 0 ->
do_check_options(Opts);
-%% @todo Add all http2_machine options.
-do_check_options([{initial_connection_window_size, _}|Opts]) ->
- do_check_options(Opts);
-do_check_options([{initial_stream_window_size, _}|Opts]) ->
- do_check_options(Opts);
-do_check_options([{max_frame_size_received, _}|Opts]) ->
- do_check_options(Opts);
-do_check_options([Opt|_]) ->
- {error, {options, {http2, Opt}}}.
+do_check_options([Opt={Name, _}|Opts]) ->
+ %% We blindly accept all cow_http2_machine options.
+ HTTP2MachineOpts = [
+ connection_window_margin_size,
+ connection_window_update_threshold,
+ enable_connect_protocol,
+ initial_connection_window_size,
+ initial_stream_window_size,
+ max_connection_window_size,
+ max_concurrent_streams,
+ max_decode_table_size,
+ max_encode_table_size,
+ max_frame_size_received,
+ max_frame_size_sent,
+ max_stream_window_size,
+ preface_timeout,
+ settings_timeout,
+ stream_window_margin_size,
+ stream_window_update_threshold
+ ],
+ case lists:member(Name, HTTP2MachineOpts) of
+ true -> do_check_options(Opts);
+ false -> {error, {options, {http2, Opt}}}
+ end.
name() -> http2.
opts_name() -> http2_opts.