summaryrefslogtreecommitdiff
path: root/src/ejabberd_zlib/ejabberd_zlib.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_zlib/ejabberd_zlib.erl')
-rw-r--r--src/ejabberd_zlib/ejabberd_zlib.erl19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/ejabberd_zlib/ejabberd_zlib.erl b/src/ejabberd_zlib/ejabberd_zlib.erl
index 3c3879b7..36beffed 100644
--- a/src/ejabberd_zlib/ejabberd_zlib.erl
+++ b/src/ejabberd_zlib/ejabberd_zlib.erl
@@ -35,6 +35,7 @@
recv/2, recv/3, recv_data/2,
setopts/2,
sockname/1, peername/1,
+ get_sockmod/1,
controlling_process/2,
close/1]).
@@ -116,7 +117,20 @@ recv(#zlibsock{sockmod = SockMod, socket = Socket} = ZlibSock,
Error
end.
-recv_data(ZlibSock, Packet) ->
+recv_data(#zlibsock{sockmod = SockMod, socket = Socket} = ZlibSock, Packet) ->
+ case SockMod of
+ gen_tcp ->
+ recv_data2(ZlibSock, Packet);
+ _ ->
+ case SockMod:recv_data(Socket, Packet) of
+ {ok, Packet2} ->
+ recv_data2(ZlibSock, Packet2);
+ Error ->
+ Error
+ end
+ end.
+
+recv_data2(ZlibSock, Packet) ->
case catch recv_data1(ZlibSock, Packet) of
{'EXIT', Reason} ->
{error, Reason};
@@ -158,6 +172,9 @@ sockname(#zlibsock{sockmod = SockMod, socket = Socket}) ->
SockMod:sockname(Socket)
end.
+get_sockmod(#zlibsock{sockmod = SockMod}) ->
+ SockMod.
+
peername(#zlibsock{sockmod = SockMod, socket = Socket}) ->
case SockMod of
gen_tcp ->