From 2b40fe611fbfd2232b2b03feab7dcefb4a70975a Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Sat, 30 Aug 2014 17:47:48 +0000 Subject: 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@1621498 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/main/java/org/apache/qpid/server/model/Broker.java | 2 +- .../qpid/server/protocol/v0_10/ServerConnectionDelegate.java | 2 +- .../apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java | 4 ++-- .../apache/qpid/server/protocol/v0_8/AMQProtocolSession.java | 2 +- .../v0_8/handler/ConnectionSecureOkMethodHandler.java | 9 ++++++++- .../v0_8/handler/ConnectionStartOkMethodHandler.java | 8 +++++++- .../protocol/v0_8/handler/ConnectionTuneOkMethodHandler.java | 12 +++++++++--- .../org/apache/qpid/client/protocol/AMQProtocolHandler.java | 2 +- .../src/main/java/org/apache/qpid/codec/AMQDecoder.java | 2 +- .../java/org/apache/qpid/framing/AMQDataBlockDecoder.java | 4 ++-- .../protocol/MultiVersionProtocolEngineFactoryTest.java | 2 +- 11 files changed, 34 insertions(+), 15 deletions(-) (limited to 'qpid/java') diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java index 78da1227d5..4c5293ff65 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java @@ -79,7 +79,7 @@ public interface Broker> extends ConfiguredObject, 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/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java index cc9d66756b..d593c1f594 100644 --- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java +++ b/qpid/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 getFeatures(Broker broker) diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java index 3089895c06..81ce3678ad 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java +++ b/qpid/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/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolSession.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolSession.java index 8d5142338a..587669dadc 100644 --- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolSession.java +++ b/qpid/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> { long getSessionID(); - void setMaxFrameSize(long frameMax); + void setMaxFrameSize(int frameMax); long getMaxFrameSize(); diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionSecureOkMethodHandler.java b/qpid/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/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionSecureOkMethodHandler.java +++ b/qpid/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/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionStartOkMethodHandler.java b/qpid/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/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionStartOkMethodHandler.java +++ b/qpid/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/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionTuneOkMethodHandler.java b/qpid/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/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/handler/ConnectionTuneOkMethodHandler.java +++ b/qpid/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 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 (long) Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) frameMax); } } diff --git a/qpid/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java b/qpid/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java index ebecb7b483..53e8c998c9 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java +++ b/qpid/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/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java b/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java index d00ddf4074..291b7e8d29 100644 --- a/qpid/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockDecoder.java +++ b/qpid/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/qpid/java/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java index c771e84f52..71e563359f 100644 --- a/qpid/java/systests/src/test/java/org/apache/qpid/server/protocol/MultiVersionProtocolEngineFactoryTest.java +++ b/qpid/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); } -- cgit v1.2.1