aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_socket.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_socket.erl')
-rw-r--r--src/ejabberd_socket.erl48
1 files changed, 30 insertions, 18 deletions
diff --git a/src/ejabberd_socket.erl b/src/ejabberd_socket.erl
index 417d4f2eb..9b0218803 100644
--- a/src/ejabberd_socket.erl
+++ b/src/ejabberd_socket.erl
@@ -32,23 +32,35 @@
%% Description:
%%--------------------------------------------------------------------
start(Module, SockMod, Socket, Opts) ->
- MaxStanzaSize =
- case lists:keysearch(max_stanza_size, 1, Opts) of
- {value, {_, Size}} -> Size;
- _ -> infinity
- end,
- Receiver = ejabberd_receiver:start(Socket, SockMod, none, MaxStanzaSize),
- SocketData = #socket_state{sockmod = SockMod,
- socket = Socket,
- receiver = Receiver},
- {ok, Pid} = Module:start(SocketData, Opts),
- case SockMod:controlling_process(Socket, Receiver) of
- ok ->
- ok;
- {error, _Reason} ->
- SockMod:close(Socket)
- end,
- ejabberd_receiver:become_controller(Receiver, Pid).
+ case Module:socket_type() of
+ xml_stream ->
+ MaxStanzaSize =
+ case lists:keysearch(max_stanza_size, 1, Opts) of
+ {value, {_, Size}} -> Size;
+ _ -> infinity
+ end,
+ Receiver = ejabberd_receiver:start(Socket, SockMod, none, MaxStanzaSize),
+ SocketData = #socket_state{sockmod = SockMod,
+ socket = Socket,
+ receiver = Receiver},
+ {ok, Pid} = Module:start(SocketData, Opts),
+ case SockMod:controlling_process(Socket, Receiver) of
+ ok ->
+ ok;
+ {error, _Reason} ->
+ SockMod:close(Socket)
+ end,
+ ejabberd_receiver:become_controller(Receiver, Pid);
+ raw ->
+ {ok, Pid} = Module:start({SockMod, Socket}, Opts),
+ case SockMod:controlling_process(Socket, Pid) of
+ ok ->
+ ok;
+ {error, _Reason} ->
+ SockMod:close(Socket)
+ end,
+ ejabberd_receiver:become_controller(Pid)
+ end.
connect(Addr, Port, Opts) ->
case gen_tcp:connect(Addr, Port, Opts) of
@@ -66,7 +78,7 @@ connect(Addr, Port, Opts) ->
gen_tcp:close(Socket),
Error
end;
- {error, Reason} = Error ->
+ {error, _Reason} = Error ->
Error
end.