Author: berndf
Date: Mon Apr 23 08:15:51 2012
New Revision: 1329113
URL: http://svn.apache.org/viewvc?rev=1329113&view=rev
Log:
+ reduce created objects, move helper methods from BoshHandler to static
utilities
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/BoshHandler.java
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshStanzaUtils.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=1329113&r1=1329112&r2=1329113&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
Mon Apr 23 08:15:51 2012
@@ -39,6 +39,7 @@ 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.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -284,8 +285,7 @@ public class BoshBackedSessionContext ex
final Long rid = br.getRid();
requestsWindow.put(rid, br);
BoshRequest req = requestsWindow.remove(requestsWindow.firstKey());
- Stanza body = BoshStanzaUtils.TERMINATE_BOSH_RESPONSE;
- body = BoshStanzaUtils.addAttribute(body, "condition", condition);
+ Stanza body =
BoshStanzaUtils.createTerminateResponse(condition).build();
BoshResponse boshResponse = getBoshResponse(body, null);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("rid = {} - BOSH writing response: {}", rid, new
String(boshResponse.getContent()));
@@ -641,10 +641,8 @@ public class BoshBackedSessionContext ex
}
protected void sendBrokenConnectionReport(long report, long delta) {
- Stanza body = BoshStanzaUtils.TERMINATE_BOSH_RESPONSE;
- body = BoshStanzaUtils.addAttribute(body, "report",
Long.toString(report));
- body = BoshStanzaUtils.addAttribute(body, "time",
Long.toString(delta));
- writeBoshResponse(body);
+ StanzaBuilder stanzaBuilder =
BoshStanzaUtils.createBrokenSessionReport(report, delta);
+ writeBoshResponse(stanzaBuilder.build());
}
protected void addContinuationExpirationListener(final AsyncContext
context) {
Modified:
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
URL:
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java?rev=1329113&r1=1329112&r2=1329113&view=diff
==============================================================================
---
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
(original)
+++
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshHandler.java
Mon Apr 23 08:15:51 2012
@@ -100,7 +100,24 @@ public class BoshHandler {
LOGGER.error("Invalid request that does not have a request
identifier (rid) attribute!");
return;
}
- BoshRequest br = new BoshRequest(httpRequest, body,
Long.parseLong(body.getAttributeValue("rid")));
+ final long rid;
+ try {
+ rid = Long.parseLong(body.getAttributeValue("rid"));
+ } catch (NumberFormatException e) {
+ LOGGER.error("not a valid RID: " + body.getAttributeValue("rid"));
+ // TODO handle properly by returning an error response
+ throw new RuntimeException(e);
+ }
+ if (rid <= 0L) {
+ LOGGER.warn("rid is not positive: " + rid);
+ // TODO handle properly by returning an error response
+ throw new RuntimeException("BOSH rid must be a positive, large
number, not " + rid);
+ }
+ if (rid > 9007199254740991L) {
+ LOGGER.warn("rid too large: " + rid);
+ // continue anyway, this is not a problem with this implementation
+ }
+ BoshRequest br = new BoshRequest(httpRequest, body, rid);
if (body.getAttribute("sid") == null) {
// the session creation request (first request) does not have a
"sid" attribute
try {
Modified:
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshStanzaUtils.java
URL:
http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshStanzaUtils.java?rev=1329113&r1=1329112&r2=1329113&view=diff
==============================================================================
---
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshStanzaUtils.java
(original)
+++
mina/vysper/trunk/server/extensions/xep0124-xep0206-bosh/src/main/java/org/apache/vysper/xmpp/extension/xep0124/BoshStanzaUtils.java
Mon Apr 23 08:15:51 2012
@@ -22,7 +22,7 @@ public class BoshStanzaUtils {
protected static final Stanza RESTART_BOSH_RESPONSE = wrapStanza(new
ServerResponses().getFeaturesForSession());
- protected static final Stanza TERMINATE_BOSH_RESPONSE =
createTerminateResponse();
+ protected static final Stanza TERMINATE_BOSH_RESPONSE =
createTerminateResponse(null).build();
/**
* Creates a new BOSH response builder
@@ -65,16 +65,26 @@ public class BoshStanzaUtils {
/**
* Creates a session termination BOSH response
- * @return the termination BOSH body
*/
- private static Stanza createTerminateResponse() {
+ public static StanzaBuilder createTerminateResponse(String condition) {
StanzaBuilder stanzaBuilder = createBoshStanzaBuilder();
stanzaBuilder.addAttribute("type", "terminate");
- return stanzaBuilder.build();
+ if (condition != null) stanzaBuilder.addAttribute("condition",
condition);
+ return stanzaBuilder;
+ }
+
+ /**
+ * Creates a session termination BOSH response signalling a broken session
+ */
+ public static StanzaBuilder createBrokenSessionReport(long report, long
delta) {
+ StanzaBuilder stanzaBuilder = createTerminateResponse(null);
+ stanzaBuilder = stanzaBuilder.addAttribute("report",
Long.toString(report));
+ stanzaBuilder = stanzaBuilder.addAttribute("time",
Long.toString(delta));
+ return stanzaBuilder;
}
/**
- * Adds a custom attribute to a BOSH body.
+ * Adds a top-level custom attribute to a BOSH body after the stanza is
already built.
*
* @param stanza the BOSH body
* @param attributeName the name of the attribute