diff options
5 files changed, 54 insertions, 3 deletions
diff --git a/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/ConnectionEndpoint.java b/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/ConnectionEndpoint.java index 0ef286e89e..ea3ad7606e 100644 --- a/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/ConnectionEndpoint.java +++ b/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/transport/ConnectionEndpoint.java @@ -22,6 +22,7 @@ package org.apache.qpid.amqp_1_0.transport; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.apache.qpid.amqp_1_0.codec.DescribedTypeConstructorRegistry; import org.apache.qpid.amqp_1_0.codec.ValueWriter; @@ -119,6 +120,8 @@ public class ConnectionEndpoint implements DescribedTypeConstructorRegistry.Sour private String _remoteHostname; private Error _remoteError; + private Map _properties; + public ConnectionEndpoint(Container container, SaslServerProvider cbs) { _container = container; @@ -172,6 +175,11 @@ public class ConnectionEndpoint implements DescribedTypeConstructorRegistry.Sour _frameOutputHandler = frameOutputHandler; } + public void setProperties(Map<Symbol,Object> properties) + { + _properties = properties; + } + public synchronized SessionEndpoint createSession(String name) { // todo assert connection state @@ -231,7 +239,10 @@ public class ConnectionEndpoint implements DescribedTypeConstructorRegistry.Sour open.setContainerId(_container.getId()); open.setMaxFrameSize(getDesiredMaxFrameSize()); open.setHostname(getRemoteHostname()); - + if(_properties != null) + { + open.setProperties(_properties); + } send(CONNECTION_CONTROL_CHANNEL, open); } diff --git a/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java b/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java index 4574f87b54..54ac966898 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java +++ b/java/broker/src/main/java/org/apache/qpid/server/protocol/AMQProtocolEngine.java @@ -45,6 +45,7 @@ import org.apache.qpid.AMQConnectionException; import org.apache.qpid.AMQException; import org.apache.qpid.AMQSecurityException; import org.apache.qpid.codec.AMQCodecFactory; +import org.apache.qpid.common.QpidProperties; import org.apache.qpid.framing.*; import org.apache.qpid.properties.ConnectionStartProperties; import org.apache.qpid.protocol.AMQConstant; @@ -387,9 +388,20 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi String locales = "en_US"; + + FieldTable serverProperties = FieldTableFactory.newFieldTable(); + + serverProperties.setString(ConnectionStartProperties.PRODUCT, + QpidProperties.getProductName()); + serverProperties.setString(ConnectionStartProperties.VERSION_0_8, + QpidProperties.getReleaseVersion()); + serverProperties.setString(ConnectionStartProperties.CLIENT_ID_0_8, + _broker.getName()); + + AMQMethodBody responseBody = getMethodRegistry().createConnectionStartBody((short) getProtocolMajorVersion(), (short) pv.getActualMinorVersion(), - null, + serverProperties, mechanisms.getBytes(), locales.getBytes()); _sender.send(asByteBuffer(responseBody.generateFrame(0))); diff --git a/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java b/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java index c2210be935..597ae9b020 100755 --- a/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java +++ b/java/broker/src/main/java/org/apache/qpid/server/protocol/ProtocolEngine_1_0_0.java @@ -23,6 +23,8 @@ package org.apache.qpid.server.protocol; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.security.Principal; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; @@ -38,6 +40,9 @@ import org.apache.qpid.amqp_1_0.transport.Container; import org.apache.qpid.amqp_1_0.transport.FrameOutputHandler; import org.apache.qpid.amqp_1_0.type.Binary; import org.apache.qpid.amqp_1_0.type.FrameBody; +import org.apache.qpid.amqp_1_0.type.Symbol; +import org.apache.qpid.common.QpidProperties; +import org.apache.qpid.properties.ConnectionStartProperties; import org.apache.qpid.protocol.ServerProtocolEngine; import org.apache.qpid.server.model.Broker; import org.apache.qpid.server.model.Port; @@ -162,6 +167,15 @@ public class ProtocolEngine_1_0_0 implements ServerProtocolEngine, FrameOutputHa _conn = new ConnectionEndpoint(container, asSaslServerProvider(_broker.getSubjectCreator( getLocalAddress()))); + + Map<Symbol,Object> serverProperties = new LinkedHashMap<Symbol, Object>(); + serverProperties.put(Symbol.valueOf("qpid.product"), QpidProperties.getProductName()); + serverProperties.put(Symbol.valueOf("qpid.version"), QpidProperties.getReleaseVersion()); + serverProperties.put(Symbol.valueOf("qpid.build"), QpidProperties.getBuildVersion()); + serverProperties.put(Symbol.valueOf("qpid.instanceName"), _broker.getName()); + + _conn.setProperties(serverProperties); + _conn.setRemoteAddress(_network.getRemoteAddress()); _conn.setConnectionEventListener(new Connection_1_0(virtualHost, _conn, _connectionId, _port, _transport)); _conn.setFrameOutputHandler(this); diff --git a/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java b/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java index 747a2dce43..e8053e735f 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java +++ b/java/broker/src/main/java/org/apache/qpid/server/transport/ServerConnectionDelegate.java @@ -30,6 +30,7 @@ import java.util.Map; import java.util.StringTokenizer; import javax.security.sasl.SaslException; import javax.security.sasl.SaslServer; +import org.apache.qpid.common.QpidProperties; import org.apache.qpid.common.ServerPropertyNames; import org.apache.qpid.properties.ConnectionStartProperties; import org.apache.qpid.server.configuration.BrokerProperties; @@ -93,7 +94,7 @@ public class ServerConnectionDelegate extends ServerDelegate private static Map<String, Object> createConnectionProperties(final Broker broker) { - final Map<String,Object> map = new HashMap<String,Object>(2); + final Map<String,Object> map = new HashMap<String,Object>(); // Federation tag is used by the client to identify the broker instance map.put(ServerPropertyNames.FEDERATION_TAG, broker.getId().toString()); final List<String> features = getFeatures(broker); @@ -101,6 +102,12 @@ public class ServerConnectionDelegate extends ServerDelegate { map.put(ServerPropertyNames.QPID_FEATURES, features); } + + map.put(ServerPropertyNames.QPID_PRODUCT, QpidProperties.getProductName()); + map.put(ServerPropertyNames.QPID_SERVER_VERSION, QpidProperties.getReleaseVersion()); + map.put(ServerPropertyNames.QPID_SERVER_BUILD_VERSION, QpidProperties.getBuildVersion()); + map.put(ServerPropertyNames.QPID_SERVER_NAME, broker.getName()); + return map; } diff --git a/java/common/src/main/java/org/apache/qpid/common/ServerPropertyNames.java b/java/common/src/main/java/org/apache/qpid/common/ServerPropertyNames.java index dd94f8251b..5b73b26af3 100644 --- a/java/common/src/main/java/org/apache/qpid/common/ServerPropertyNames.java +++ b/java/common/src/main/java/org/apache/qpid/common/ServerPropertyNames.java @@ -44,4 +44,11 @@ public final class ServerPropertyNames * Feature: Signifies that a server supports JMS selectors. */ public static final String FEATURE_QPID_JMS_SELECTOR = "qpid.jms-selector"; + + + public static final String QPID_PRODUCT = "qpid.product"; + public static final String QPID_SERVER_VERSION = "qpid.server_version"; + public static final String QPID_SERVER_NAME = "qpid.server_name"; + public static final String QPID_SERVER_BUILD_VERSION = "qpid.server_build_version"; + } |