Author: ngn
Date: Sun Aug 15 20:59:48 2010
New Revision: 985755

URL: http://svn.apache.org/viewvc?rev=985755&view=rev
Log:
Further detection of over-activity (VYSPER-236, by Bogdan Pistol)

Modified:
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshRequest.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
    
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java?rev=985755&r1=985754&r2=985755&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshBackedSessionContext.java
 Sun Aug 15 20:59:48 2010
@@ -30,7 +30,6 @@ import org.apache.vysper.xmpp.server.Abs
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionState;
 import org.apache.vysper.xmpp.stanza.Stanza;
-import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 import org.apache.vysper.xmpp.writer.StanzaWriter;
 import org.eclipse.jetty.continuation.Continuation;
 import org.eclipse.jetty.continuation.ContinuationListener;
@@ -67,6 +66,8 @@ public class BoshBackedSessionContext ex
     
     private Long currentProcessingRequest = null;
     
+    private BoshRequest latestEmptyPollingRequest = null;
+    
     /*
      * Keeps the suspended HTTP requests (does not respond to them) until the 
server has an asynchronous message
      * to send to the client. (Comet HTTP Long Polling technique - described 
in XEP-0124)
@@ -328,10 +329,27 @@ public class BoshBackedSessionContext ex
         }
         if (requestsWindow.size() + 1 > requests && 
!"terminate".equals(br.getBody().getAttributeValue("type"))
                 && br.getBody().getAttributeValue("pause") == null) {
-            // overactivity
+            LOGGER.warn("BOSH Overactivity: Too many simultaneous requests");
             error("policy-violation");
             return;
         }
+        if (requestsWindow.size() + 1 == requests && 
!"terminate".equals(br.getBody().getAttributeValue("type"))
+                && br.getBody().getAttributeValue("pause") == null && 
br.getBody().getInnerElements().isEmpty()) {
+            if (!requestsWindow.isEmpty()
+                    && br.getTimestamp() - 
requestsWindow.get(requestsWindow.lastKey()).getTimestamp() < polling * 1000) {
+                LOGGER.warn("BOSH Overactivity: Too frequent requests");
+                error("policy-violation");
+                return;
+            }
+        }
+        if ((wait == 0 || hold == 0) && 
br.getBody().getInnerElements().isEmpty()) {
+            if (latestEmptyPollingRequest != null && br.getTimestamp() - 
latestEmptyPollingRequest.getTimestamp() < polling * 1000) {
+                LOGGER.warn("BOSH Overactivity for polling: Too frequent 
requests");
+                error("policy-violation");
+                return;
+            }
+            latestEmptyPollingRequest = br;
+        }
         Continuation continuation = 
ContinuationSupport.getContinuation(br.getHttpServletRequest());
         continuation.setTimeout(wait * 1000);
         continuation.suspend();

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshRequest.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshRequest.java?rev=985755&r1=985754&r2=985755&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshRequest.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshRequest.java
 Sun Aug 15 20:59:48 2010
@@ -35,11 +35,14 @@ public class BoshRequest implements Comp
     private final Stanza body;
 
     private final Long rid;
+    
+    private final long timestamp;
 
     public BoshRequest(HttpServletRequest httpServletRequest, Stanza body, 
Long rid) {
         this.httpServletRequest = httpServletRequest;
         this.body = body;
         this.rid = rid;
+        timestamp = System.currentTimeMillis();
     }
 
     public HttpServletRequest getHttpServletRequest() {
@@ -80,4 +83,8 @@ public class BoshRequest implements Comp
         return true;
     }
 
+    public long getTimestamp() {
+        return timestamp;
+    }
+
 }
\ No newline at end of file

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java?rev=985755&r1=985754&r2=985755&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshServlet.java
 Sun Aug 15 20:59:48 2010
@@ -19,9 +19,6 @@
  */
 package org.apache.vysper.xmpp.extension.xep0124;
 
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.util.List;

Modified: 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java
URL: 
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java?rev=985755&r1=985754&r2=985755&view=diff
==============================================================================
--- 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java
 (original)
+++ 
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/ServerMain.java
 Sun Aug 15 20:59:48 2010
@@ -22,7 +22,6 @@ package org.apache.vysper.xmpp.extension
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 
 import org.apache.vysper.mina.TCPEndpoint;


Reply via email to