diff options
author | Alexey Shchepin <alexey@process-one.net> | 2002-11-19 20:58:49 +0000 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2002-11-19 20:58:49 +0000 |
commit | d3c120d55deb4965de86415003620acd3bddd2d2 (patch) | |
tree | 9e5bb17e8f8371d720c922ab174133b32cd01ce4 /src | |
parent | Initial revision (diff) |
*** empty log message ***
SVN Revision: 3
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_c2s.erl | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index 21aef0610..1149a64e8 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -66,11 +66,16 @@ -endif. -define(STREAM_HEADER, + "<?xml version='1.0'?>" "<stream:stream xmlns='jabber:client' " "xmlns:stream='http://etherx.jabber.org/streams' " "id='~s' from='~s'>" ). +-define(STREAM_TRAILER, "</stream:stream>"). + +-define(INVALID_NS_ERR, "<stream:error>Invalid Namespace</stream:error>"). + %%%---------------------------------------------------------------------- %%% API %%%---------------------------------------------------------------------- @@ -107,14 +112,17 @@ state_name(Event, StateData) -> {next_state, state_name, StateData}. wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) -> + % TODO + Header = io_lib:format(?STREAM_HEADER, ["SID", "localhost"]), + send_text(StateData#state.sender, Header), case lists:keysearch("xmlns:stream", 1, Attrs) of {value, {"xmlns:stream", "http://etherx.jabber.org/streams"}} -> % TODO - Header = io_lib:format(?STREAM_HEADER, ["SID", "localhost"]), - StateData#state.sender ! {text, Header}, {next_state, wait_for_auth, StateData}; _ -> - {stop, error, StateData} + send_text(StateData#state.sender, ?INVALID_NS_ERR), + send_text(StateData#state.sender, ?STREAM_TRAILER), + {stop, normal, StateData} end; wait_for_stream(closed, StateData) -> @@ -184,7 +192,8 @@ handle_info(Info, StateName, StateData) -> %% Purpose: Shutdown the fsm %% Returns: any %%---------------------------------------------------------------------- -terminate(Reason, StateName, StatData) -> +terminate(Reason, StateName, StateData) -> + StateData#state.sender ! close, ok. %%%---------------------------------------------------------------------- @@ -201,6 +210,7 @@ receiver(Socket, C2SPid, XMLStreamPid) -> xml_stream:send_text(XMLStreamPid, Text), receiver(Socket, C2SPid, XMLStreamPid); {error, closed} -> + exit(XMLStreamPid, closed), gen_fsm:send_event(C2SPid, closed), ok end. @@ -210,7 +220,8 @@ sender(Socket) -> {text, Text} -> gen_tcp:send(Socket,Text), sender(Socket); - closed -> + close -> + gen_tcp:close(Socket), ok end. |