aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorViktor Söderqvist <[email protected]>2022-08-25 14:29:35 +0200
committerLoïc Hoguin <[email protected]>2022-08-30 14:21:00 +0200
commitad6302f51092009de5b1d4481ef2bfcd4091a257 (patch)
tree7938a0e63a3688a455a252ca5ca3113f2c6622f9
parent5a175dc6d5c0beddb78900b2d4ad817c9be7c2df (diff)
downloadgun-ad6302f51092009de5b1d4481ef2bfcd4091a257.tar.gz
gun-ad6302f51092009de5b1d4481ef2bfcd4091a257.tar.bz2
gun-ad6302f51092009de5b1d4481ef2bfcd4091a257.zip
Make Protocol:init/4 return an ok-tuple
This is a preparation for allowing init/4 to return an ok or an error tuple.
-rw-r--r--src/gun.erl6
-rw-r--r--src/gun_http.erl2
-rw-r--r--src/gun_http2.erl5
-rw-r--r--src/gun_raw.erl2
-rw-r--r--src/gun_socks.erl3
-rw-r--r--src/gun_tunnel.erl9
-rw-r--r--src/gun_ws.erl2
7 files changed, 18 insertions, 11 deletions
diff --git a/src/gun.erl b/src/gun.erl
index 42bd409..bfb1bc4 100644
--- a/src/gun.erl
+++ b/src/gun.erl
@@ -1237,7 +1237,8 @@ connected_ws_only(Type, Event, State) ->
connected(internal, {connected, Socket, NewProtocol},
State0=#state{owner=Owner, opts=Opts, transport=Transport}) ->
{Protocol, ProtoOpts} = gun_protocols:handler_and_opts(NewProtocol, Opts),
- {StateName, ProtoState} = Protocol:init(Owner, Socket, Transport, ProtoOpts),
+ %% @todo Handle error result from Protocol:init/4
+ {ok, StateName, ProtoState} = Protocol:init(Owner, Socket, Transport, ProtoOpts),
Owner ! {gun_up, self(), Protocol:name()},
case active(State0#state{socket=Socket, protocol=Protocol, protocol_state=ProtoState}) of
{ok, State} ->
@@ -1679,7 +1680,8 @@ commands([{switch_protocol, NewProtocol, ReplyTo}], State0=#state{
#{tunnel_transport := _} -> ProtoOpts0;
_ -> ProtoOpts0#{tunnel_transport => tcp}
end,
- {StateName, ProtoState} = Protocol:init(ReplyTo, Socket, Transport, ProtoOpts),
+ %% @todo Handle error result from Protocol:init/4
+ {ok, StateName, ProtoState} = Protocol:init(ReplyTo, Socket, Transport, ProtoOpts),
ProtocolChangedEvent = case ProtoOpts of
#{stream_ref := StreamRef} ->
#{stream_ref => StreamRef, protocol => Protocol:name()};
diff --git a/src/gun_http.erl b/src/gun_http.erl
index b38cc74..4fc07ee 100644
--- a/src/gun_http.erl
+++ b/src/gun_http.erl
@@ -120,7 +120,7 @@ default_keepalive() -> infinity.
init(_ReplyTo, Socket, Transport, Opts) ->
BaseStreamRef = maps:get(stream_ref, Opts, undefined),
Version = maps:get(version, Opts, 'HTTP/1.1'),
- {connected, #http_state{socket=Socket, transport=Transport,
+ {ok, connected, #http_state{socket=Socket, transport=Transport,
opts=Opts, version=Version, base_stream_ref=BaseStreamRef}}.
switch_transport(Transport, Socket, State) ->
diff --git a/src/gun_http2.erl b/src/gun_http2.erl
index e681963..e3ff130 100644
--- a/src/gun_http2.erl
+++ b/src/gun_http2.erl
@@ -186,7 +186,7 @@ init(ReplyTo, Socket, Transport, Opts0) ->
opts=Opts, base_stream_ref=BaseStreamRef, tunnel_transport=TunnelTransport,
content_handlers=Handlers, http2_machine=HTTP2Machine},
Transport:send(Socket, Preface),
- {connected, State}.
+ {ok, connected, State}.
switch_transport(Transport, Socket, State) ->
State#http2_state{socket=Socket, transport=Transport}.
@@ -609,7 +609,8 @@ headers_frame_connect_websocket(State, Stream=#stream{ref=StreamRef, reply_to=Re
handler => Handler,
opts => WsOpts
},
- {connected_ws_only, ProtoState} = Proto:init(
+ %% @todo Handle error result from Proto:init/4
+ {ok, connected_ws_only, ProtoState} = Proto:init(
ReplyTo, OriginSocket, gun_tcp_proxy, ProtoOpts),
{store_stream(State, Stream#stream{tunnel=Tunnel#tunnel{state=established,
protocol=Proto, protocol_state=ProtoState}}),
diff --git a/src/gun_raw.erl b/src/gun_raw.erl
index f92c777..464b637 100644
--- a/src/gun_raw.erl
+++ b/src/gun_raw.erl
@@ -42,7 +42,7 @@ has_keepalive() -> false.
init(ReplyTo, Socket, Transport, Opts) ->
StreamRef = maps:get(stream_ref, Opts, undefined),
- {connected_data_only, #raw_state{ref=StreamRef, reply_to=ReplyTo, socket=Socket, transport=Transport}}.
+ {ok, connected_data_only, #raw_state{ref=StreamRef, reply_to=ReplyTo, socket=Socket, transport=Transport}}.
handle(Data, #raw_state{ref=StreamRef, reply_to=ReplyTo}, CookieStore, _, EvHandlerState) ->
%% When we take over the entire connection there is no stream reference.
diff --git a/src/gun_socks.erl b/src/gun_socks.erl
index 541949f..b94bc2c 100644
--- a/src/gun_socks.erl
+++ b/src/gun_socks.erl
@@ -93,7 +93,8 @@ init(ReplyTo, Socket, Transport, Opts) ->
none -> <<0>>
end || A <- Auth>>,
Transport:send(Socket, [<<5, (length(Auth))>>, Methods]),
- {connected_no_input, #socks_state{ref=StreamRef, reply_to=ReplyTo, socket=Socket, transport=Transport,
+ {ok, connected_no_input, #socks_state{ref=StreamRef, reply_to=ReplyTo,
+ socket=Socket, transport=Transport,
opts=Opts, version=Version, status=auth_method_select}}.
switch_transport(Transport, Socket, State) ->
diff --git a/src/gun_tunnel.erl b/src/gun_tunnel.erl
index 40addf6..169fd6f 100644
--- a/src/gun_tunnel.erl
+++ b/src/gun_tunnel.erl
@@ -113,7 +113,8 @@ init(ReplyTo, OriginSocket, OriginTransport, Opts=#{stream_ref := StreamRef, tun
%% Initialize the protocol.
#{new_protocol := NewProtocol} ->
{Proto, ProtoOpts} = gun_protocols:handler_and_opts(NewProtocol, Opts),
- {_, ProtoState} = Proto:init(ReplyTo, OriginSocket, OriginTransport,
+ %% @todo Handle error result from Proto:init/4
+ {ok, _, ProtoState} = Proto:init(ReplyTo, OriginSocket, OriginTransport,
ProtoOpts#{stream_ref => StreamRef, tunnel_transport => tcp}),
EvHandlerState = EvHandler:protocol_changed(#{
stream_ref => StreamRef,
@@ -195,7 +196,8 @@ handle_continue(ContinueStreamRef, {gun_tls_proxy, ProxyPid, {ok, Negotiated},
reply_to => ReplyTo,
stream_ref => StreamRef
},
- {_, ProtoState} = Proto:init(ReplyTo, OriginSocket, gun_tcp_proxy,
+ %% @todo Handle error result from Proto:init/4
+ {ok, _, ProtoState} = Proto:init(ReplyTo, OriginSocket, gun_tcp_proxy,
ProtoOpts#{stream_ref => StreamRef, tunnel_transport => tls}),
ReplyTo ! {gun_tunnel_up, self(), StreamRef, Proto:name()},
{{state, State#tunnel_state{protocol=Proto, protocol_state=ProtoState}},
@@ -476,7 +478,8 @@ commands([{switch_protocol, NewProtocol, ReplyTo}|Tail],
EvHandler, EvHandlerState0) ->
{Proto, ProtoOpts} = gun_protocols:handler_and_opts(NewProtocol, Opts),
%% This should only apply to Websocket for the time being.
- {connected_ws_only, ProtoState} = Proto:init(ReplyTo, Socket, Transport, ProtoOpts),
+ %% @todo Handle error result from Proto:init/4
+ {ok, connected_ws_only, ProtoState} = Proto:init(ReplyTo, Socket, Transport, ProtoOpts),
#{stream_ref := StreamRef} = ProtoOpts,
EvHandlerState = EvHandler:protocol_changed(#{
stream_ref => StreamRef,
diff --git a/src/gun_ws.erl b/src/gun_ws.erl
index 8cf2b49..e02179a 100644
--- a/src/gun_ws.erl
+++ b/src/gun_ws.erl
@@ -140,7 +140,7 @@ default_keepalive() -> infinity.
init(ReplyTo, Socket, Transport, #{stream_ref := StreamRef, headers := Headers,
extensions := Extensions, flow := InitialFlow, handler := Handler, opts := Opts}) ->
{ok, HandlerState} = Handler:init(ReplyTo, StreamRef, Headers, Opts),
- {connected_ws_only, #ws_state{reply_to=ReplyTo, stream_ref=StreamRef,
+ {ok, connected_ws_only, #ws_state{reply_to=ReplyTo, stream_ref=StreamRef,
socket=Socket, transport=Transport, opts=Opts, extensions=Extensions,
flow=InitialFlow, handler=Handler, handler_state=HandlerState}}.