]> granicus.if.org Git - ejabberd/commitdiff
Cache caps timestamp before the IQ-request is done
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 28 Feb 2012 06:38:24 +0000 (16:38 +1000)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 28 Feb 2012 06:38:24 +0000 (16:38 +1000)
src/mod_caps.erl

index efad3f16cf71eb58295f7a6310ceefe50080aa44..ba934e7586b193e915e5d2cf5c6fc0ea7386ae07 100644 (file)
@@ -375,6 +375,10 @@ feature_request(Host, From, Caps, [SubNode | Tail] = SubNodes) ->
                                        [{"xmlns", ?NS_DISCO_INFO},
                                         {"node", Node ++ "#" ++ SubNode}],
                                        []}]},
+                    %% We cache current timestamp in order to avoid
+                    %% caps requests flood
+                    cache_tab:insert(caps_features, BinaryNode, now_ts(),
+                                     caps_write_fun(BinaryNode, now_ts())),
                    F = fun(IQReply) ->
                                feature_response(
                                  IQReply, Host, From, Caps, SubNodes)
@@ -405,19 +409,11 @@ feature_response(#iq{type = result,
              caps_features, BinaryNode, BinaryFeatures,
              caps_write_fun(BinaryNode, BinaryFeatures));
        false ->
-           %% We cache current timestamp and will probe the client
-           %% after BAD_HASH_LIFETIME seconds.
-           cache_tab:insert(caps_features, BinaryNode, now_ts(),
-                            caps_write_fun(BinaryNode, now_ts()))
+            ok
     end,
     feature_request(Host, From, Caps, SubNodes);
-feature_response(_IQResult, Host, From, Caps, [SubNode | SubNodes]) ->
-    %% We got type=error or invalid type=result stanza or timeout,
-    %% so we cache current timestamp and will probe the client
-    %% after BAD_HASH_LIFETIME seconds.
-    BinaryNode = node_to_binary(Caps#caps.node, SubNode),
-    cache_tab:insert(caps_features, BinaryNode, now_ts(),
-                    caps_write_fun(BinaryNode, now_ts())),
+feature_response(_IQResult, Host, From, Caps, [_SubNode | SubNodes]) ->
+    %% We got type=error or invalid type=result stanza or timeout.
     feature_request(Host, From, Caps, SubNodes).
 
 node_to_binary(Node, SubNode) ->