summaryrefslogtreecommitdiff
path: root/src/ejabberd_receiver.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_receiver.erl')
-rw-r--r--src/ejabberd_receiver.erl42
1 files changed, 21 insertions, 21 deletions
diff --git a/src/ejabberd_receiver.erl b/src/ejabberd_receiver.erl
index 8217bb7e..1f1897fb 100644
--- a/src/ejabberd_receiver.erl
+++ b/src/ejabberd_receiver.erl
@@ -24,7 +24,7 @@ start(Socket, SockMod, Shaper) ->
receiver(Socket, SockMod, Shaper, C2SPid) ->
- XMLStreamPid = xml_stream:start(self(), C2SPid),
+ XMLStreamState = xml_stream:new(C2SPid),
ShaperState = shaper:new(Shaper),
Timeout = case SockMod of
ssl ->
@@ -32,32 +32,32 @@ receiver(Socket, SockMod, Shaper, C2SPid) ->
_ ->
infinity
end,
- receiver(Socket, SockMod, ShaperState, C2SPid, XMLStreamPid, Timeout).
+ receiver(Socket, SockMod, ShaperState, C2SPid, XMLStreamState, Timeout).
-receiver(Socket, SockMod, ShaperState, C2SPid, XMLStreamPid, Timeout) ->
+receiver(Socket, SockMod, ShaperState, C2SPid, XMLStreamState, Timeout) ->
Res = (catch SockMod:recv(Socket, 0, Timeout)),
case Res of
{ok, Data} ->
receive
{starttls, TLSSocket} ->
- exit(XMLStreamPid, closed),
- XMLStreamPid1 = xml_stream:start(self(), C2SPid),
+ xml_stream:close(XMLStreamState),
+ XMLStreamState1 = xml_stream:new(C2SPid),
TLSRes = tls:recv_data(TLSSocket, Data),
receiver1(TLSSocket, tls,
- ShaperState, C2SPid, XMLStreamPid1, Timeout,
+ ShaperState, C2SPid, XMLStreamState1, Timeout,
TLSRes)
after 0 ->
receiver1(Socket, SockMod,
- ShaperState, C2SPid, XMLStreamPid, Timeout,
+ ShaperState, C2SPid, XMLStreamState, Timeout,
Res)
end;
_ ->
receiver1(Socket, SockMod,
- ShaperState, C2SPid, XMLStreamPid, Timeout, Res)
+ ShaperState, C2SPid, XMLStreamState, Timeout, Res)
end.
-receiver1(Socket, SockMod, ShaperState, C2SPid, XMLStreamPid, Timeout, Res) ->
+receiver1(Socket, SockMod, ShaperState, C2SPid, XMLStreamState, Timeout, Res) ->
case Res of
{ok, Text} ->
ShaperSt1 = receive
@@ -67,27 +67,27 @@ receiver1(Socket, SockMod, ShaperState, C2SPid, XMLStreamPid, Timeout, Res) ->
ShaperState
end,
NewShaperState = shaper:update(ShaperSt1, size(Text)),
- XMLStreamPid1 = receive
- reset_stream ->
- exit(XMLStreamPid, closed),
- xml_stream:start(self(), C2SPid)
- after 0 ->
- XMLStreamPid
- end,
- xml_stream:send_text(XMLStreamPid1, Text),
- receiver(Socket, SockMod, NewShaperState, C2SPid, XMLStreamPid1,
+ XMLStreamState1 = receive
+ reset_stream ->
+ xml_stream:close(XMLStreamState),
+ xml_stream:new(C2SPid)
+ after 0 ->
+ XMLStreamState
+ end,
+ XMLStreamState2 = xml_stream:parse(XMLStreamState1, Text),
+ receiver(Socket, SockMod, NewShaperState, C2SPid, XMLStreamState2,
Timeout);
{error, timeout} ->
- receiver(Socket, SockMod, ShaperState, C2SPid, XMLStreamPid,
+ receiver(Socket, SockMod, ShaperState, C2SPid, XMLStreamState,
Timeout);
{error, Reason} ->
- exit(XMLStreamPid, closed),
+ xml_stream:close(XMLStreamState),
gen_fsm:send_event(C2SPid, closed),
ok;
{'EXIT', Reason} ->
?ERROR_MSG("(~w) abnormal ~w:recv termination:~n\t~p~n",
[Socket, SockMod, Reason]),
- exit(XMLStreamPid, closed),
+ xml_stream:close(XMLStreamState),
gen_fsm:send_event(C2SPid, closed),
ok
end.