summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2014-08-30 17:47:48 +0000
committerRobert Godfrey <rgodfrey@apache.org>2014-08-30 17:47:48 +0000
commit9c233eedc9da99c80b240170dd328a1b3d16ed7b (patch)
tree8264c35d04a59c1bf02a50e8f267bae9dbdf764d /java
parent8cdb9b318beefaa06b65da8c394660b6536eb8a1 (diff)
downloadqpid-python-9c233eedc9da99c80b240170dd328a1b3d16ed7b.tar.gz
QPID-6055 : [Java Broker] Ensure max frame size is always less than Integer.MAX_VALUE
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1621498 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java2
-rw-r--r--java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java2
-rw-r--r--java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java4
-rw-r--r--java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolSession.java2
-rw-r--r--java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionSecureOkMethodHandler.java9
-rw-r--r--java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionStartOkMethodHandler.java8
-rw-r--r--java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionTuneOkMethodHandler.java12
-rw-r--r--java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java2
-rw-r--r--java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java2
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java4
-rw-r--r--java/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java2
11 files changed, 34 insertions, 15 deletions
diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java b/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
index 78da1227d5..4c5293ff65 100644
--- a/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
+++ b/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
@@ -79,7 +79,7 @@ public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventL
String BROKER_FRAME_SIZE = "qpid.broker_frame_size";
@ManagedContextDefault(name = BROKER_FRAME_SIZE)
- long DEFAULT_FRAME_SIZE = 65535;
+ int DEFAULT_FRAME_SIZE = 65535;
@DerivedAttribute
diff --git a/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java b/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
index cc9d66756b..d593c1f594 100644
--- a/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
+++ b/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
@@ -83,7 +83,7 @@ public class ServerConnectionDelegate extends ServerDelegate
_localFQDN = localFQDN;
_maxNoOfChannels = broker.getConnection_sessionCountLimit();
_subjectCreator = subjectCreator;
- _maximumFrameSize = (int) Math.min(0xffffl, broker.getContextValue(Long.class, Broker.BROKER_FRAME_SIZE));
+ _maximumFrameSize = (int) Math.min(0xffffl, broker.getContextValue(Integer.class, Broker.BROKER_FRAME_SIZE));
}
private static List<String> getFeatures(Broker<?> broker)
diff --git a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
index 3089895c06..81ce3678ad 100644
--- a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
+++ b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
@@ -154,7 +154,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi
private long _writtenBytes;
- private long _maxFrameSize;
+ private int _maxFrameSize;
private final AtomicBoolean _closing = new AtomicBoolean(false);
private final StatisticsCounter _messagesDelivered, _dataDelivered, _messagesReceived, _dataReceived;
@@ -250,7 +250,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi
return _connectionID;
}
- public void setMaxFrameSize(long frameMax)
+ public void setMaxFrameSize(int frameMax)
{
_maxFrameSize = frameMax;
_decoder.setMaxFrameSize(frameMax);
diff --git a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolSession.java b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolSession.java
index 8d5142338a..587669dadc 100644
--- a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolSession.java
+++ b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolSession.java
@@ -46,7 +46,7 @@ public interface AMQProtocolSession<T extends AMQProtocolSession<T>>
{
long getSessionID();
- void setMaxFrameSize(long frameMax);
+ void setMaxFrameSize(int frameMax);
long getMaxFrameSize();
diff --git a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionSecureOkMethodHandler.java b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionSecureOkMethodHandler.java
index 92552cb011..8a1160314b 100644
--- a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionSecureOkMethodHandler.java
+++ b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionSecureOkMethodHandler.java
@@ -96,9 +96,16 @@ public class ConnectionSecureOkMethodHandler implements StateAwareMethodListener
}
stateManager.changeState(AMQState.CONNECTION_NOT_TUNED);
+ int frameMax = broker.getContextValue(Integer.class, Broker.BROKER_FRAME_SIZE);
+
+ if(frameMax <= 0)
+ {
+ frameMax = Integer.MAX_VALUE;
+ }
+
ConnectionTuneBody tuneBody =
methodRegistry.createConnectionTuneBody(broker.getConnection_sessionCountLimit(),
- broker.getContextValue(Long.class, Broker.BROKER_FRAME_SIZE),
+ frameMax,
broker.getConnection_heartBeatDelay());
session.writeFrame(tuneBody.generateFrame(0));
session.setAuthorizedSubject(authResult.getSubject());
diff --git a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionStartOkMethodHandler.java b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionStartOkMethodHandler.java
index d6801c0fbc..e59032b87f 100644
--- a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionStartOkMethodHandler.java
+++ b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionStartOkMethodHandler.java
@@ -110,9 +110,15 @@ public class ConnectionStartOkMethodHandler implements StateAwareMethodListener<
session.setAuthorizedSubject(authResult.getSubject());
stateManager.changeState(AMQState.CONNECTION_NOT_TUNED);
+ int frameMax = broker.getContextValue(Integer.class, Broker.BROKER_FRAME_SIZE);
+
+ if(frameMax <= 0)
+ {
+ frameMax = Integer.MAX_VALUE;
+ }
ConnectionTuneBody tuneBody = methodRegistry.createConnectionTuneBody(broker.getConnection_sessionCountLimit(),
- broker.getContextValue(Long.class,Broker.BROKER_FRAME_SIZE),
+ frameMax,
broker.getConnection_heartBeatDelay());
session.writeFrame(tuneBody.generateFrame(0));
break;
diff --git a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionTuneOkMethodHandler.java b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionTuneOkMethodHandler.java
index 108c19dbaf..fb4818d3ed 100644
--- a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionTuneOkMethodHandler.java
+++ b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionTuneOkMethodHandler.java
@@ -55,8 +55,13 @@ public class ConnectionTuneOkMethodHandler implements StateAwareMethodListener<C
session.initHeartbeats(body.getHeartbeat());
- long brokerFrameMax = stateManager.getBroker().getContextValue(Long.class,Broker.BROKER_FRAME_SIZE);
- if(brokerFrameMax != 0 && body.getFrameMax() > brokerFrameMax)
+ int brokerFrameMax = stateManager.getBroker().getContextValue(Integer.class,Broker.BROKER_FRAME_SIZE);
+ if(brokerFrameMax <= 0)
+ {
+ brokerFrameMax = Integer.MAX_VALUE;
+ }
+
+ if(body.getFrameMax() > (long) brokerFrameMax)
{
throw new AMQConnectionException(AMQConstant.SYNTAX_ERROR,
"Attempt to set max frame size to " + body.getFrameMax()
@@ -74,7 +79,8 @@ public class ConnectionTuneOkMethodHandler implements StateAwareMethodListener<C
body.getClazz(), body.getMethod(),
body.getMajor(), body.getMinor(),null);
}
- session.setMaxFrameSize(body.getFrameMax()== 0l ? (brokerFrameMax == 0l ? 0xFFFFFFFFl : brokerFrameMax) : body.getFrameMax());
+ int frameMax = body.getFrameMax() == 0 ? brokerFrameMax : (int) body.getFrameMax();
+ session.setMaxFrameSize(frameMax);
long maxChannelNumber = body.getChannelMax();
//0 means no implied limit, except that forced by protocol limitations (0xFFFF)
diff --git a/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java b/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
index 48bfe74cfc..5c9d8f9b91 100644
--- a/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
+++ b/java/client/src/main/java/org/apache/qpid/client/protocol/AMQProtocolHandler.java
@@ -946,6 +946,6 @@ public class AMQProtocolHandler implements ProtocolEngine
public void setMaxFrameSize(final long frameMax)
{
- _decoder.setMaxFrameSize(frameMax == 0l ? 0xffffffffl : frameMax);
+ _decoder.setMaxFrameSize(frameMax == 0l || frameMax > (long) Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) frameMax);
}
}
diff --git a/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java b/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java
index ebecb7b483..53e8c998c9 100644
--- a/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java
+++ b/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java
@@ -96,7 +96,7 @@ public class AMQDecoder
_expectProtocolInitiation = expectProtocolInitiation;
}
- public void setMaxFrameSize(final long frameMax)
+ public void setMaxFrameSize(final int frameMax)
{
_dataBlockDecoder.setMaxFrameSize(frameMax);
}
diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java
index d00ddf4074..291b7e8d29 100644
--- a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java
+++ b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java
@@ -41,7 +41,7 @@ public class AMQDataBlockDecoder
}
private Logger _logger = LoggerFactory.getLogger(AMQDataBlockDecoder.class);
- private long _maxFrameSize = AMQConstant.FRAME_MIN_SIZE.getCode();
+ private int _maxFrameSize = AMQConstant.FRAME_MIN_SIZE.getCode();
public AMQDataBlockDecoder()
{ }
@@ -113,7 +113,7 @@ public class AMQDataBlockDecoder
return frame;
}
- public void setMaxFrameSize(final long maxFrameSize)
+ public void setMaxFrameSize(final int maxFrameSize)
{
_maxFrameSize = maxFrameSize;
}
diff --git a/java/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java b/java/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java
index c771e84f52..71e563359f 100644
--- a/java/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java
+++ b/java/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java
@@ -55,7 +55,7 @@ public class MultiVersionProtocolEngineFactoryTest extends QpidTestCase
_broker = BrokerTestHelper.createBrokerMock();
when(_broker.getAttribute(Broker.DEFAULT_VIRTUAL_HOST)).thenReturn("default");
when(_broker.getDefaultVirtualHost()).thenReturn("default");
- when(_broker.getContextValue(eq(Long.class), eq(Broker.BROKER_FRAME_SIZE))).thenReturn(0xffffl);
+ when(_broker.getContextValue(eq(Integer.class), eq(Broker.BROKER_FRAME_SIZE))).thenReturn(0xffff);
}