You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2017/04/14 14:27:07 UTC
svn commit: r1791373 - in /qpid/java/trunk:
broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/
broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/
systests/protocol-tests-amqp-1...
Author: lquack
Date: Fri Apr 14 14:27:07 2017
New Revision: 1791373
URL: http://svn.apache.org/viewvc?rev=1791373&view=rev
Log:
QPID-7746: [Java Broker] Enforce AMQP 1.0 channel-max correctly
Modified:
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConnectionHandler.java
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java
qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InputHandler.java
qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java?rev=1791373&r1=1791372&r2=1791373&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0Impl.java Fri Apr 14 14:27:07 2017
@@ -186,7 +186,7 @@ public class AMQPConnection_1_0Impl exte
private AmqpPort<?> _port;
private SubjectCreator _subjectCreator;
- private int _channelMax = DEFAULT_CHANNEL_MAX;
+ private int _channelMax = 0;
private int _maxFrameSize = 4096;
private String _remoteContainerId;
@@ -288,6 +288,7 @@ public class AMQPConnection_1_0Impl exte
return _desiredIdleTimeout;
}
+ @Override
public void receiveAttach(final short channel, final Attach attach)
{
assertState(FrameReceivingState.ANY_FRAME);
@@ -310,6 +311,7 @@ public class AMQPConnection_1_0Impl exte
}
}
+ @Override
public void receive(final short channel, final Object frame)
{
FRAME_LOGGER.debug("RECV[{}|{}] : {}", _remoteAddress, channel, frame);
@@ -338,6 +340,7 @@ public class AMQPConnection_1_0Impl exte
_saslNegotiator = null;
}
+ @Override
public void receiveSaslChallenge(final SaslChallenge saslChallenge)
{
LOGGER.info("{} : Unexpected frame sasl-challenge", getLogSubject());
@@ -719,10 +722,10 @@ public class AMQPConnection_1_0Impl exte
{
assertState(FrameReceivingState.OPEN_ONLY);
_frameReceivingState = FrameReceivingState.ANY_FRAME;
- _channelMax = open.getChannelMax() == null ? _channelMax
- : open.getChannelMax().intValue() < _channelMax
+ _channelMax = open.getChannelMax() == null ? DEFAULT_CHANNEL_MAX
+ : open.getChannelMax().intValue() < DEFAULT_CHANNEL_MAX
? open.getChannelMax().intValue()
- : _channelMax;
+ : DEFAULT_CHANNEL_MAX;
if (_receivingSessions == null)
{
_receivingSessions = new Session_1_0[_channelMax + 1];
@@ -1019,12 +1022,19 @@ public class AMQPConnection_1_0Impl exte
closeSaslWithFailure();
}
+ @Override
public int getMaxFrameSize()
{
return _maxFrameSize;
}
@Override
+ public int getChannelMax()
+ {
+ return _channelMax;
+ }
+
+ @Override
public Object getReference()
{
return _reference;
Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConnectionHandler.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConnectionHandler.java?rev=1791373&r1=1791372&r2=1791373&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConnectionHandler.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ConnectionHandler.java Fri Apr 14 14:27:07 2017
@@ -53,6 +53,8 @@ public interface ConnectionHandler exten
int getMaxFrameSize();
+ int getChannelMax();
+
void handleError(Error parsingError);
boolean closedForInput();
Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java?rev=1791373&r1=1791372&r2=1791373&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java Fri Apr 14 14:27:07 2017
@@ -135,6 +135,15 @@ public class FrameHandler implements Pro
int channel = ((int)in.getShort()) & 0xffff;
+ if (channel > _connectionHandler.getChannelMax())
+ {
+ frameParsingError = createFramingError(
+ "specified channel %d larger than maximum channel %d",
+ channel,
+ _connectionHandler.getChannelMax());
+ break;
+ }
+
if (dataOffset != 8)
{
in.position(in.position() + dataOffset - 8);
Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InputHandler.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InputHandler.java?rev=1791373&r1=1791372&r2=1791373&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InputHandler.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/main/java/org/apache/qpid/tests/protocol/v1_0/InputHandler.java Fri Apr 14 14:27:07 2017
@@ -34,6 +34,7 @@ import org.apache.qpid.server.protocol.v
import org.apache.qpid.server.protocol.v1_0.framing.FrameHandler;
import org.apache.qpid.server.protocol.v1_0.type.FrameBody;
import org.apache.qpid.server.protocol.v1_0.type.SaslFrameBody;
+import org.apache.qpid.server.protocol.v1_0.type.UnsignedShort;
import org.apache.qpid.server.protocol.v1_0.type.codec.AMQPDescribedTypeRegistry;
import org.apache.qpid.server.protocol.v1_0.type.security.SaslChallenge;
import org.apache.qpid.server.protocol.v1_0.type.security.SaslInit;
@@ -206,6 +207,12 @@ public class InputHandler extends Channe
}
@Override
+ public int getChannelMax()
+ {
+ return UnsignedShort.MAX_VALUE.intValue();
+ }
+
+ @Override
public void handleError(final Error parsingError)
{
Modified: qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java?rev=1791373&r1=1791372&r2=1791373&view=diff
==============================================================================
--- qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java (original)
+++ qpid/java/trunk/systests/protocol-tests-amqp-1-0/src/test/java/org/apache/qpid/tests/protocol/v1_0/transport/connection/OpenTest.java Fri Apr 14 14:27:07 2017
@@ -37,6 +37,7 @@ import org.apache.qpid.server.protocol.v
import org.apache.qpid.server.protocol.v1_0.type.UnsignedShort;
import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
import org.apache.qpid.server.protocol.v1_0.type.transport.Close;
+import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
import org.apache.qpid.server.protocol.v1_0.type.transport.Open;
import org.apache.qpid.tests.protocol.v1_0.BrokerAdmin;
import org.apache.qpid.tests.protocol.v1_0.FrameTransport;
@@ -96,7 +97,8 @@ public class OpenTest extends ProtocolTe
}
@Test
- @SpecificationTest(section = "2.4.1", description = "The open frame can only be sent on channel 0")
+ @SpecificationTest(section = "2.4.1",
+ description = "The open frame can only be sent on channel 0. ยง2.7.1: A peer that receives a channel number outside the supported range MUST close the connection with the framing-error error-code.")
public void failOpenOnChannelNotZero() throws Exception
{
final InetSocketAddress addr = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.ANONYMOUS_AMQP);
@@ -112,7 +114,7 @@ public class OpenTest extends ProtocolTe
assertThat(response.getFrameBody(), is(instanceOf(Close.class)));
Close responseClose = (Close) response.getFrameBody();
assertThat(responseClose.getError(), is(notNullValue()));
- assertThat(responseClose.getError().getCondition(), equalTo(AmqpError.NOT_ALLOWED));
+ assertThat(responseClose.getError().getCondition(), equalTo(ConnectionError.FRAMING_ERROR));
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org