]> granicus.if.org Git - ejabberd/commitdiff
Fix support to negotiate zlib compression after starttls
authorBadlop <badlop@process-one.net>
Mon, 5 Sep 2011 14:53:04 +0000 (16:53 +0200)
committerBadlop <badlop@process-one.net>
Mon, 5 Sep 2011 14:53:04 +0000 (16:53 +0200)
src/ejabberd_zlib.erl

index b67784f6798c7399fe1e244bcc0ebb9d591da23a..684e81f67d238247164f2f18f17f96062e8408b9 100644 (file)
 -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.