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;