From cd50a0d3f42afd5e12a1470902a60b4fa9d84f73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Fri, 26 Jul 2019 15:25:53 +0200 Subject: Add the origin_changed event --- src/gun.erl | 13 ++++++++++--- src/gun_default_event_h.erl | 4 ++++ src/gun_event.erl | 13 +++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) (limited to 'src') 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 -- cgit v1.2.3