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.erl21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/ejabberd_socket.erl b/src/ejabberd_socket.erl
index 9b0218803..ba7a24f60 100644
--- a/src/ejabberd_socket.erl
+++ b/src/ejabberd_socket.erl
@@ -13,7 +13,9 @@
-export([start/4,
connect/3,
starttls/2,
+ starttls/3,
compress/1,
+ compress/2,
reset_stream/1,
send/2,
change_shaper/2,
@@ -43,7 +45,7 @@ start(Module, SockMod, Socket, Opts) ->
SocketData = #socket_state{sockmod = SockMod,
socket = Socket,
receiver = Receiver},
- {ok, Pid} = Module:start(SocketData, Opts),
+ {ok, Pid} = Module:start({?MODULE, SocketData}, Opts),
case SockMod:controlling_process(Socket, Receiver) of
ok ->
ok;
@@ -58,8 +60,7 @@ start(Module, SockMod, Socket, Opts) ->
ok;
{error, _Reason} ->
SockMod:close(Socket)
- end,
- ejabberd_receiver:become_controller(Pid)
+ end
end.
connect(Addr, Port, Opts) ->
@@ -87,6 +88,12 @@ starttls(SocketData, TLSOpts) ->
ejabberd_receiver:starttls(SocketData#socket_state.receiver, TLSSocket),
SocketData#socket_state{socket = TLSSocket, sockmod = tls}.
+starttls(SocketData, TLSOpts, Data) ->
+ {ok, TLSSocket} = tls:tcp_to_tls(SocketData#socket_state.socket, TLSOpts),
+ ejabberd_receiver:starttls(SocketData#socket_state.receiver, TLSSocket),
+ send(SocketData, Data),
+ SocketData#socket_state{socket = TLSSocket, sockmod = tls}.
+
compress(SocketData) ->
{ok, ZlibSocket} = ejabberd_zlib:enable_zlib(
SocketData#socket_state.sockmod,
@@ -94,6 +101,14 @@ compress(SocketData) ->
ejabberd_receiver:compress(SocketData#socket_state.receiver, ZlibSocket),
SocketData#socket_state{socket = ZlibSocket, sockmod = ejabberd_zlib}.
+compress(SocketData, Data) ->
+ {ok, ZlibSocket} = ejabberd_zlib:enable_zlib(
+ SocketData#socket_state.sockmod,
+ SocketData#socket_state.socket),
+ ejabberd_receiver:compress(SocketData#socket_state.receiver, ZlibSocket),
+ send(SocketData, Data),
+ SocketData#socket_state{socket = ZlibSocket, sockmod = ejabberd_zlib}.
+
reset_stream(SocketData) ->
ejabberd_receiver:reset_stream(SocketData#socket_state.receiver).