diff options
Diffstat (limited to 'src/ejabberd_receiver.erl')
-rw-r--r-- | src/ejabberd_receiver.erl | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/ejabberd_receiver.erl b/src/ejabberd_receiver.erl index 78585529..0a33e30e 100644 --- a/src/ejabberd_receiver.erl +++ b/src/ejabberd_receiver.erl @@ -48,15 +48,16 @@ -include("logger.hrl"). -record(state, - {socket :: inet:socket() | p1_tls:tls_socket() | ezlib:zlib_socket(), - sock_mod = gen_tcp :: gen_tcp | p1_tls | ezlib, + {socket :: inet:socket() | fast_tls:tls_socket() | ezlib:zlib_socket(), + sock_mod = gen_tcp :: gen_tcp | fast_tls | ezlib, shaper_state = none :: shaper:shaper(), c2s_pid :: pid(), max_stanza_size = infinity :: non_neg_integer() | infinity, - xml_stream_state :: xml_stream:xml_stream_state(), + xml_stream_state :: fxml_stream:xml_stream_state(), timeout = infinity:: timeout()}). --define(HIBERNATE_TIMEOUT, 90000). +-define(HIBERNATE_TIMEOUT, ejabberd_config:get_option(receiver_hibernate, fun(X) when is_integer(X); X == hibernate-> X end, 90000)). + -spec start_link(inet:socket(), atom(), shaper:shaper(), non_neg_integer() | infinity) -> ignore | @@ -89,7 +90,7 @@ change_shaper(Pid, Shaper) -> reset_stream(Pid) -> do_call(Pid, reset_stream). --spec starttls(pid(), p1_tls:tls_socket()) -> ok. +-spec starttls(pid(), fast_tls:tls_socket()) -> ok. starttls(Pid, TLSSocket) -> do_call(Pid, {starttls, TLSSocket}). @@ -129,8 +130,8 @@ init([Socket, SockMod, Shaper, MaxStanzaSize]) -> handle_call({starttls, TLSSocket}, _From, State) -> State1 = reset_parser(State), NewState = State1#state{socket = TLSSocket, - sock_mod = p1_tls}, - case p1_tls:recv_data(TLSSocket, <<"">>) of + sock_mod = fast_tls}, + case fast_tls:recv_data(TLSSocket, <<"">>) of {ok, TLSData} -> {reply, ok, process_data(TLSData, NewState), ?HIBERNATE_TIMEOUT}; @@ -140,6 +141,7 @@ handle_call({starttls, TLSSocket}, _From, State) -> handle_call({compress, Data}, _From, #state{socket = Socket, sock_mod = SockMod} = State) -> + ejabberd:start_app(ezlib), {ok, ZlibSocket} = ezlib:enable_zlib(SockMod, Socket), if Data /= undefined -> do_send(State, Data); @@ -160,7 +162,7 @@ handle_call(reset_stream, _From, State) -> Reply = ok, {reply, Reply, NewState, ?HIBERNATE_TIMEOUT}; handle_call({become_controller, C2SPid}, _From, State) -> - XMLStreamState = xml_stream:new(C2SPid, State#state.max_stanza_size), + XMLStreamState = fxml_stream:new(C2SPid, State#state.max_stanza_size), NewState = State#state{c2s_pid = C2SPid, xml_stream_state = XMLStreamState}, activate_socket(NewState), @@ -182,8 +184,8 @@ handle_info({Tag, _TCPSocket, Data}, when (Tag == tcp) or (Tag == ssl) or (Tag == ejabberd_xml) -> case SockMod of - p1_tls -> - case p1_tls:recv_data(Socket, Data) of + fast_tls -> + case fast_tls:recv_data(Socket, Data) of {ok, TLSData} -> {noreply, process_data(TLSData, State), ?HIBERNATE_TIMEOUT}; @@ -284,7 +286,7 @@ process_data(Data, undefined -> XMLStreamState; _ -> - xml_stream:parse(XMLStreamState, Data) + fxml_stream:parse(XMLStreamState, Data) end, {NewShaperState, Pause} = shaper:update(ShaperState, byte_size(Data)), if @@ -309,7 +311,7 @@ element_wrapper(Element) -> Element. close_stream(undefined) -> ok; close_stream(XMLStreamState) -> - xml_stream:close(XMLStreamState). + fxml_stream:close(XMLStreamState). reset_parser(#state{xml_stream_state = undefined} = State) -> State; @@ -317,14 +319,14 @@ reset_parser(#state{c2s_pid = C2SPid, max_stanza_size = MaxStanzaSize, xml_stream_state = XMLStreamState} = State) -> - NewStreamState = try xml_stream:reset(XMLStreamState) + NewStreamState = try fxml_stream:reset(XMLStreamState) catch error:_ -> close_stream(XMLStreamState), case C2SPid of undefined -> undefined; _ -> - xml_stream:new(C2SPid, MaxStanzaSize) + fxml_stream:new(C2SPid, MaxStanzaSize) end end, State#state{xml_stream_state = NewStreamState}. |