diff options
author | Badlop <badlop@process-one.net> | 2011-09-05 16:53:04 +0200 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2011-09-05 16:53:04 +0200 |
commit | e1e75b28520f532216eb6ee2ee445e2a407234eb (patch) | |
tree | fff690dc7e07a524267748f1d2b93205d92a00a0 /src | |
parent | Fix SASL auth error conditions (diff) |
Fix support to negotiate zlib compression after starttls
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_zlib.erl | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/ejabberd_zlib.erl b/src/ejabberd_zlib.erl index b67784f67..684e81f67 100644 --- a/src/ejabberd_zlib.erl +++ b/src/ejabberd_zlib.erl @@ -40,6 +40,12 @@ -define(DEFLATE, 1). -define(INFLATE, 2). +%% Copied from exmpp/src/core/exmpp_compress.erl +-record(compress_socket, {socket, + packet_mode = binary, + port + }). + start() -> exmpp_compress:start(). @@ -65,7 +71,20 @@ recv(Socket, Length) -> recv(ZlibSock, _Length, Timeout) -> exmpp_compress:recv(ZlibSock, Timeout). -recv_data(ZlibSock, Packet) -> +recv_data(#compress_socket{socket = {SockMod, 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) -> exmpp_compress:recv_data(ZlibSock, Packet). send(ZlibSock, Packet) -> @@ -75,12 +94,6 @@ send(ZlibSock, Packet) -> setopts(ZlibSock, Opts) -> exmpp_compress:setopts(ZlibSock, Opts). -%% Copied from exmpp/src/core/exmpp_compress.erl --record(compress_socket, {socket, - packet_mode = binary, - port - }). - get_sockmod(#compress_socket{socket = {SockMod, _Port}}) -> SockMod. |