Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2006-04-13 06:08:24 +0400
committerAlexey Shchepin <alexey@process-one.net>2006-04-13 06:08:24 +0400
commit15a714ae68cdb9ccbe3e5798c604a54d0e4bc2f8 (patch)
tree0925f2c87ccd5d81d3f1824f0050df52c3e67fd3 /src/ejabberd_service.erl
parentaa8e532cbdbe5f939dd3c54e90ec5edf2999b394 (diff)
* src/xml_stream.erl: Cleanup
* src/ejabberd_service.erl: Updated to use ejabberd_receiver SVN Revision: 532
Diffstat (limited to 'src/ejabberd_service.erl')
-rw-r--r--src/ejabberd_service.erl30
1 files changed, 10 insertions, 20 deletions
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl
index 0d3b02176..551ff436e 100644
--- a/src/ejabberd_service.erl
+++ b/src/ejabberd_service.erl
@@ -15,7 +15,6 @@
%% External exports
-export([start/2,
start_link/2,
- receiver/3,
send_text/2,
send_element/2,
become_controller/1]).
@@ -80,8 +79,8 @@ start(SockData, Opts) ->
start_link(SockData, Opts) ->
gen_fsm:start_link(ejabberd_service, [SockData, Opts], ?FSMOPTS).
-become_controller(_Pid) ->
- ok.
+become_controller(Pid) ->
+ gen_fsm:send_all_state_event(Pid, become_controller).
%%%----------------------------------------------------------------------
%%% Callback functions from gen_fsm
@@ -124,7 +123,7 @@ init([{SockMod, Socket}, Opts]) ->
false
end
end,
- ReceiverPid = spawn(?MODULE, receiver, [Socket, SockMod, self()]),
+ ReceiverPid = ejabberd_receiver:start(Socket, SockMod, none),
{ok, wait_for_stream, #state{socket = Socket,
receiver = ReceiverPid,
streamid = new_id(),
@@ -260,6 +259,12 @@ stream_established(closed, StateData) ->
%% {next_state, NextStateName, NextStateData, Timeout} |
%% {stop, Reason, NewStateData}
%%----------------------------------------------------------------------
+handle_event(become_controller, StateName, StateData) ->
+ ok = (StateData#state.sockmod):controlling_process(
+ StateData#state.socket,
+ StateData#state.receiver),
+ ejabberd_receiver:become_controller(StateData#state.receiver),
+ {next_state, StateName, StateData};
handle_event(_Event, StateName, StateData) ->
{next_state, StateName, StateData}.
@@ -323,28 +328,13 @@ terminate(Reason, StateName, StateData) ->
_ ->
ok
end,
- (StateData#state.sockmod):close(StateData#state.socket),
+ ejabberd_receiver:close(StateData#state.receiver),
ok.
%%%----------------------------------------------------------------------
%%% Internal functions
%%%----------------------------------------------------------------------
-receiver(Socket, SockMod, C2SPid) ->
- XMLStreamPid = xml_stream:start(C2SPid),
- receiver(Socket, SockMod, C2SPid, XMLStreamPid).
-
-receiver(Socket, SockMod, C2SPid, XMLStreamPid) ->
- case SockMod:recv(Socket, 0) of
- {ok, Text} ->
- xml_stream:send_text(XMLStreamPid, Text),
- receiver(Socket, SockMod, C2SPid, XMLStreamPid);
- {error, _Reason} ->
- exit(XMLStreamPid, closed),
- gen_fsm:send_event(C2SPid, closed),
- ok
- end.
-
send_text(StateData, Text) ->
(StateData#state.sockmod):send(StateData#state.socket,Text).