Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2009-08-31 20:30:19 +0400
committerBadlop <badlop@process-one.net>2009-08-31 20:30:19 +0400
commitf5eb9e3c9fdd5b47c133bd9ab15bc9367d50b3ae (patch)
treecb0883f694feaaee89c9f4aec9cc0c3a65c9c0dd /src/ejabberd_c2s.erl
parent98f93104a7d5a8cbf1ed9c08ada2601b8fb5e872 (diff)
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
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl19
1 files changed, 14 insertions, 5 deletions
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