From 4a4065c9c62a74a6a8b493595ac40e87f637b814 Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Thu, 17 Sep 2015 00:33:08 +0200 Subject: [PATCH 1/2] Let BOSH/WebSocket support "max_resume_timeout" Allow for specifying the "max_resume_timeout" option in an ejabberd_http listener for ejabberd_http_bind and/or ejabberd_http_ws. --- src/ejabberd_http_bind.erl | 1 + src/ejabberd_http_ws.erl | 1 + 2 files changed, 2 insertions(+) diff --git a/src/ejabberd_http_bind.erl b/src/ejabberd_http_bind.erl index 21c6887f0..4277f4c54 100644 --- a/src/ejabberd_http_bind.erl +++ b/src/ejabberd_http_bind.erl @@ -335,6 +335,7 @@ init([Sid, Key, IP, HOpts]) -> SOpts = lists:filtermap(fun({stream_managment, _}) -> true; ({max_ack_queue, _}) -> true; ({resume_timeout, _}) -> true; + ({max_resume_timeout, _}) -> true; ({resend_on_timeout, _}) -> true; (_) -> false end, HOpts), diff --git a/src/ejabberd_http_ws.erl b/src/ejabberd_http_ws.erl index dd6854f8c..65a80b004 100644 --- a/src/ejabberd_http_ws.erl +++ b/src/ejabberd_http_ws.erl @@ -115,6 +115,7 @@ init([{#ws{ip = IP, http_opts = HOpts}, _} = WS]) -> SOpts = lists:filtermap(fun({stream_managment, _}) -> true; ({max_ack_queue, _}) -> true; ({resume_timeout, _}) -> true; + ({max_resume_timeout, _}) -> true; ({resend_on_timeout, _}) -> true; (_) -> false end, HOpts), From f6b892b36623bb35b1140682544202c52583dd0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chmielowski?= Date: Thu, 17 Sep 2015 11:36:45 +0200 Subject: [PATCH 2/2] Guard against passing undefined C2SPid to xml parser before become_controller gets called Our new nif xml parser don't handle this gracefully, so we better don't call it that way. This is only triggered on old style ssl sockets, where ssl layer must be activated early, before association between socket and c2s is established --- src/ejabberd_receiver.erl | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ejabberd_receiver.erl b/src/ejabberd_receiver.erl index f63ae1ccb..3f8f979dc 100644 --- a/src/ejabberd_receiver.erl +++ b/src/ejabberd_receiver.erl @@ -159,8 +159,13 @@ handle_call({starttls, TLSSocket}, _From, c2s_pid = C2SPid, max_stanza_size = MaxStanzaSize} = State) -> close_stream(XMLStreamState), - NewXMLStreamState = xml_stream:new(C2SPid, - MaxStanzaSize), + NewXMLStreamState = case C2SPid of + undefined -> + XMLStreamState; + _ -> + xml_stream:new(C2SPid, + MaxStanzaSize) + end, NewState = State#state{socket = TLSSocket, sock_mod = p1_tls, xml_stream_state = NewXMLStreamState}, @@ -347,7 +352,12 @@ process_data(Data, shaper_state = ShaperState, c2s_pid = C2SPid} = State) -> ?DEBUG("Received XML on stream = ~p", [(Data)]), - XMLStreamState1 = xml_stream:parse(XMLStreamState, Data), + XMLStreamState1 = case XMLStreamState of + undefined -> + XMLStreamState; + _ -> + xml_stream:parse(XMLStreamState, Data) + end, {NewShaperState, Pause} = shaper:update(ShaperState, byte_size(Data)), if C2SPid == undefined ->