From d46b7d59084f256c0ecd573a157e43bbc3655689 Mon Sep 17 00:00:00 2001 From: Christophe Romain Date: Mon, 14 Apr 2008 12:02:18 +0000 Subject: [PATCH] Cache negative response (EJAB-474) SVN Revision: 1294 --- ChangeLog | 4 ++++ src/mod_caps.erl | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7dc1aab06..282506e0f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-04-14 Christophe Romain + + * src/mod_caps.erl: Cache negative response (EJAB-474) + 2008-04-12 Badlop * src/web/ejabberd_web_admin.erl: Include Last-Modified HTTP diff --git a/src/mod_caps.erl b/src/mod_caps.erl index 8bf37d8be..dee9078a9 100644 --- a/src/mod_caps.erl +++ b/src/mod_caps.erl @@ -250,8 +250,21 @@ handle_cast({disco_response, From, _To, ?ERROR_MSG("ID '~s' matches no query", [ID]) end; {error, _} -> - gen_server:cast(self(), visit_feature_queries), - ?DEBUG("Error IQ reponse from ~s:~n~p", [jlib:jid_to_string(From), SubEls]); + %% XXX: if we get error, we cache empty feature not to probe the client continuously + case ?DICT:find(ID, Requests) of + {ok, {Node, SubNode}} -> + Features = [], + mnesia:transaction( + fun() -> + mnesia:write(#caps_features{node_pair = {Node, SubNode}, + features = Features}) + end), + gen_server:cast(self(), visit_feature_queries); + error -> + ?ERROR_MSG("ID '~s' matches no query", [ID]) + end; + %gen_server:cast(self(), visit_feature_queries), + %?DEBUG("Error IQ reponse from ~s:~n~p", [jlib:jid_to_string(From), SubEls]); {result, _} -> ?DEBUG("Invalid IQ contents from ~s:~n~p", [jlib:jid_to_string(From), SubEls]); _ ->