aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2008-04-14 12:02:18 +0000
committerChristophe Romain <christophe.romain@process-one.net>2008-04-14 12:02:18 +0000
commitd46b7d59084f256c0ecd573a157e43bbc3655689 (patch)
tree32c5a60885c8e5039d8428e48a391ccfde869859 /src
parent* src/web/ejabberd_web_admin.erl: Include Last-Modified HTTP (diff)
Cache negative response (EJAB-474)
SVN Revision: 1294
Diffstat (limited to 'src')
-rw-r--r--src/mod_caps.erl17
1 files changed, 15 insertions, 2 deletions
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]);
_ ->