aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2019-07-26 15:25:53 +0200
committerLoïc Hoguin <[email protected]>2019-07-26 15:25:53 +0200
commitcd50a0d3f42afd5e12a1470902a60b4fa9d84f73 (patch)
treef78d527802a4e939de18258eb210b72745944289 /src
parent56b7fdd6eb15564ad821885937b03516a03dce4b (diff)
downloadgun-cd50a0d3f42afd5e12a1470902a60b4fa9d84f73.tar.gz
gun-cd50a0d3f42afd5e12a1470902a60b4fa9d84f73.tar.bz2
gun-cd50a0d3f42afd5e12a1470902a60b4fa9d84f73.zip
Add the origin_changed event
Diffstat (limited to 'src')
-rw-r--r--src/gun.erl13
-rw-r--r--src/gun_default_event_h.erl4
-rw-r--r--src/gun_event.erl13
3 files changed, 25 insertions, 5 deletions
diff --git a/src/gun.erl b/src/gun.erl
index d158a53..a548a5d 100644
--- a/src/gun.erl
+++ b/src/gun.erl
@@ -1081,8 +1081,14 @@ commands([{state, ProtoState}|Tail], State) ->
%% of the intermediaries properly.
commands([{origin, Scheme, Host, Port, Type}|Tail],
State=#state{transport=Transport, protocol=Protocol,
- origin_host=IntermediateHost, origin_port=IntermediatePort,
- intermediaries=Intermediaries}) ->
+ origin_host=IntermediateHost, origin_port=IntermediatePort, intermediaries=Intermediaries,
+ event_handler=EvHandler, event_handler_state=EvHandlerState0}) ->
+ EvHandlerState = EvHandler:origin_changed(#{
+ type => Type,
+ origin_scheme => Scheme,
+ origin_host => Host,
+ origin_port => Port
+ }, EvHandlerState0),
Info = #{
type => Type,
host => IntermediateHost,
@@ -1091,7 +1097,8 @@ commands([{origin, Scheme, Host, Port, Type}|Tail],
protocol => Protocol:name()
},
commands(Tail, State#state{origin_scheme=Scheme,
- origin_host=Host, origin_port=Port, intermediaries=[Info|Intermediaries]});
+ origin_host=Host, origin_port=Port, intermediaries=[Info|Intermediaries],
+ event_handler_state=EvHandlerState});
commands([{switch_transport, Transport, Socket}|Tail], State=#state{
event_handler=EvHandler, event_handler_state=EvHandlerState0}) ->
EvHandlerState = EvHandler:transport_changed(#{
diff --git a/src/gun_default_event_h.erl b/src/gun_default_event_h.erl
index 579fb20..a146d21 100644
--- a/src/gun_default_event_h.erl
+++ b/src/gun_default_event_h.erl
@@ -40,6 +40,7 @@
-export([ws_send_frame_end/2]).
-export([protocol_changed/2]).
-export([transport_changed/2]).
+-export([origin_changed/2]).
-export([cancel/2]).
-export([disconnect/2]).
-export([terminate/2]).
@@ -119,6 +120,9 @@ protocol_changed(_EventData, State) ->
transport_changed(_EventData, State) ->
State.
+origin_changed(_EventData, State) ->
+ State.
+
cancel(_EventData, State) ->
State.
diff --git a/src/gun_event.erl b/src/gun_event.erl
index 2f12b4c..3520c79 100644
--- a/src/gun_event.erl
+++ b/src/gun_event.erl
@@ -258,6 +258,17 @@
-callback transport_changed(transport_changed_event(), State) -> State.
+%% origin_changed.
+
+-type origin_changed_event() :: #{
+ type := connect,
+ origin_scheme := binary(),
+ origin_host := inet:hostname() | inet:ip_address(),
+ origin_port := inet:port_number()
+}.
+
+-callback origin_changed(origin_changed_event(), State) -> State.
+
%% cancel.
%%
%% In the case of HTTP/1.1 we cannot actually cancel the stream,
@@ -293,5 +304,3 @@
}.
-callback terminate(terminate_event(), State) -> State.
-
-%% @todo origin_changed