From f5eb9e3c9fdd5b47c133bd9ab15bc9367d50b3ae Mon Sep 17 00:00:00 2001 From: Badlop Date: Mon, 31 Aug 2009 16:30:19 +0000 Subject: Support zlib compression after STARTTLS (thanks to Aleksey Shchepin)(EJAB-499) Unfortunately, zlib compression doesn't work in this branch, neither in this commit or before it. SVN Revision: 2572 --- src/ejabberd_c2s.erl | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src/ejabberd_c2s.erl') diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index b9f19ef3e..bd7a125ac 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -274,7 +274,8 @@ wait_for_stream({xmlstreamstart, #xmlel{ns = NS} = Opening}, StateData) -> Zlib = StateData#state.zlib, CompressFeature = case Zlib andalso - (SockMod == gen_tcp) of + ((SockMod == gen_tcp) orelse + (SockMod == tls)) of true -> [exmpp_server_compression:feature(["zlib"])]; _ -> @@ -578,13 +579,14 @@ wait_for_feature_request({xmlstreamelement, #xmlel{ns = NS, name = Name} = El}, tls_enabled = true }); {?NS_COMPRESS, 'compress'} when Zlib == true, - SockMod == gen_tcp -> + ((SockMod == gen_tcp) or + (SockMod == tls)) -> case exmpp_server_compression:selected_method(El) of undefined -> send_element(StateData, - exmpp_server_compression:failure('steup-failed')), + exmpp_server_compression:failure('setup-failed')), fsm_next_state(wait_for_feature_request, StateData); - "zlib" -> + <<"zlib">> -> Socket = StateData#state.socket, ZlibSocket = (StateData#state.sockmod):compress( Socket, @@ -1332,11 +1334,18 @@ get_auth_tags([_ | L], U, P, D, R) -> get_auth_tags([], U, P, D, R) -> {U, P, D, R}. +%% Copied from ejabberd_socket.erl +-record(socket_state, {sockmod, socket, receiver}). + get_conn_type(StateData) -> case (StateData#state.sockmod):get_sockmod(StateData#state.socket) of gen_tcp -> c2s; tls -> c2s_tls; - ejabberd_zlib -> c2s_compressed; + ejabberd_zlib -> + case ejabberd_zlib:get_sockmod((StateData#state.socket)#socket_state.socket) of + gen_tcp -> c2s_compressed; + tls -> c2s_compressed_tls + end; ejabberd_http_poll -> http_poll; ejabberd_http_bind -> http_bind; _ -> unknown -- cgit v1.2.3