diff options
Diffstat (limited to 'src/ejabberd_zlib/ejabberd_zlib.erl')
-rw-r--r-- | src/ejabberd_zlib/ejabberd_zlib.erl | 19 |
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 -> |