diff options
Diffstat (limited to 'java/common')
| -rw-r--r-- | java/common/src/main/java/org/apache/qpid/codec/AMQDecoder.java | 17 | ||||
| -rw-r--r-- | java/common/templates/model/ProtocolVersionListClass.vm | 23 |
2 files changed, 37 insertions, 3 deletions
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 02ae3cb089..ff0bc798da 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 @@ -56,6 +56,7 @@ public class AMQDecoder extends CumulativeProtocolDecoder /** Flag to indicate whether this decoder needs to handle protocol initiation. */ private boolean _expectProtocolInitiation; + private boolean firstDecode = true; /** * Creates a new AMQP decoder. @@ -81,14 +82,24 @@ public class AMQDecoder extends CumulativeProtocolDecoder */ protected boolean doDecode(IoSession session, ByteBuffer in, ProtocolDecoderOutput out) throws Exception { - if (_expectProtocolInitiation) + + boolean decoded; + if (_expectProtocolInitiation + || (firstDecode + && (in.remaining() > 0) + && (in.get(in.position()) == (byte)'A'))) { - return doDecodePI(session, in, out); + decoded = doDecodePI(session, in, out); } else { - return doDecodeDataBlock(session, in, out); + decoded = doDecodeDataBlock(session, in, out); + } + if(firstDecode && decoded) + { + firstDecode = false; } + return decoded; } /** diff --git a/java/common/templates/model/ProtocolVersionListClass.vm b/java/common/templates/model/ProtocolVersionListClass.vm index d56d14e1ed..9ac6adfdf5 100644 --- a/java/common/templates/model/ProtocolVersionListClass.vm +++ b/java/common/templates/model/ProtocolVersionListClass.vm @@ -33,6 +33,8 @@ package org.apache.qpid.framing; import java.util.SortedSet; import java.util.Collections; import java.util.TreeSet; +import java.util.Map; +import java.util.HashMap; public class ProtocolVersion implements Comparable @@ -124,6 +126,9 @@ public class ProtocolVersion implements Comparable } private static final SortedSet<ProtocolVersion> _supportedVersions; + private static final Map<String, ProtocolVersion> _nameToVersionMap = + new HashMap<String, ProtocolVersion>(); + private static final ProtocolVersion _defaultVersion; #foreach( $version in $model.getVersionSet() ) @@ -138,8 +143,17 @@ public class ProtocolVersion implements Comparable #foreach( $version in $model.getVersionSet() ) #set( $versionId = "v$version.getMajor()_$version.getMinor()" ) versions.add($versionId); + _nameToVersionMap.put("${version.getMajor()}-${version.getMinor()}", $versionId); #end _supportedVersions = Collections.unmodifiableSortedSet(versions); + + + ProtocolVersion systemDefinedVersion = + _nameToVersionMap.get(System.getProperty("org.apache.qpid.amqp_version")); + + _defaultVersion = (systemDefinedVersion == null) + ? getLatestSupportedVersion() + : systemDefinedVersion; } @@ -149,7 +163,16 @@ public class ProtocolVersion implements Comparable } + + public static ProtocolVersion parse(String name) + { + return _nameToVersionMap.get(name); + } + public static ProtocolVersion defaultProtocolVersion() + { + return _defaultVersion; + } } |
