You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2013/03/27 22:58:54 UTC

svn commit: r1461870 [1/6] - in /qpid/branches/QPID-4659/qpid: ./ cpp/docs/api/ cpp/examples/messaging/ cpp/examples/old_api/tradedemo/ cpp/include/qmf/engine/ cpp/include/qpid/messaging/ cpp/src/ cpp/src/qmf/engine/ cpp/src/qpid/acl/ cpp/src/qpid/amqp...

Author: rgodfrey
Date: Wed Mar 27 21:58:51 2013
New Revision: 1461870

URL: http://svn.apache.org/r1461870
Log:
NO-JIRA : merging from trunk to keep branch up to date

Added:
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/AddressImpl.h
      - copied unchanged from r1461856, qpid/trunk/qpid/cpp/src/qpid/messaging/AddressImpl.h
    qpid/branches/QPID-4659/qpid/cpp/src/tests/qpidt
      - copied unchanged from r1461856, qpid/trunk/qpid/cpp/src/tests/qpidt
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/updater/ChangeAttributesTask.java
      - copied unchanged from r1461856, qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/updater/ChangeAttributesTask.java
    qpid/branches/QPID-4659/qpid/tools/src/ruby/
      - copied from r1461856, qpid/trunk/qpid/tools/src/ruby/
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/
      - copied from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/.gitignore
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/.gitignore
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/.rspec
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/.rspec
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/Gemfile
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/Gemfile
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/Gemfile.lock
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/Gemfile.lock
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/Rakefile
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/Rakefile
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/
      - copied from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/
      - copied from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/acl.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/acl.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/binding.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/binding.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/bridge.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/bridge.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_agent.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_agent.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_object.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_object.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/cluster.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/cluster.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/connection.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/connection.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/errors.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/errors.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/exchange.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/exchange.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/ha_broker.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/ha_broker.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/link.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/link.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/memory.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/memory.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/queue.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/queue.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/session.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/session.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/lib/qpid_management/subscription.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/lib/qpid_management/subscription.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/qpid_management.gemspec
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/qpid_management.gemspec
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/spec/
      - copied from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/spec/
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/spec/broker_agent_spec.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/spec/broker_agent_spec.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/spec/broker_spec.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/spec/broker_spec.rb
    qpid/branches/QPID-4659/qpid/tools/src/ruby/qpid_management/spec/spec_helper.rb
      - copied unchanged from r1461856, qpid/trunk/qpid/tools/src/ruby/qpid_management/spec/spec_helper.rb
Modified:
    qpid/branches/QPID-4659/qpid/   (props changed)
    qpid/branches/QPID-4659/qpid/QPID_VERSION.txt
    qpid/branches/QPID-4659/qpid/cpp/docs/api/   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/examples/messaging/client.cpp
    qpid/branches/QPID-4659/qpid/cpp/examples/old_api/tradedemo/tradedemo_topic_publisher.vcproj   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/include/qmf/engine/Agent.h   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/include/qmf/engine/Console.h   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Address.h
    qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Receiver.h
    qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Sender.h
    qpid/branches/QPID-4659/qpid/cpp/src/   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/src/CMakeLists.txt   (contents, props changed)
    qpid/branches/QPID-4659/qpid/cpp/src/Makefile.am
    qpid/branches/QPID-4659/qpid/cpp/src/qmf/engine/Agent.cpp   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/acl/   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/amqp/descriptors.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/Selector.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorExpression.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorValue.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SemanticState.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Filter.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Interconnect.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/management/ManagementAgent.cpp   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/management/ManagementAgent.h   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Address.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/AddressParser.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Receiver.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/ReceiverImpl.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Sender.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/SenderImpl.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/EncodedMessage.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/ReceiverContext.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/ReceiverHandle.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/ReceiverHandle.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/SenderContext.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/SenderHandle.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/SenderHandle.h
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/SessionContext.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/xml/XmlExchange.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/qpid/xml/XmlExchange.h
    qpid/branches/QPID-4659/qpid/cpp/src/tests/   (props changed)
    qpid/branches/QPID-4659/qpid/cpp/src/tests/CMakeLists.txt
    qpid/branches/QPID-4659/qpid/cpp/src/tests/Makefile.am
    qpid/branches/QPID-4659/qpid/cpp/src/tests/Selector.cpp
    qpid/branches/QPID-4659/qpid/cpp/src/tests/ping_broker
    qpid/branches/QPID-4659/qpid/cpp/src/tests/ssl.mk
    qpid/branches/QPID-4659/qpid/cpp/src/tests/ssl_test
    qpid/branches/QPID-4659/qpid/doc/book/src/java-broker/commonEntities.xml
    qpid/branches/QPID-4659/qpid/extras/qmf/setup.py
    qpid/branches/QPID-4659/qpid/java/   (props changed)
    qpid/branches/QPID-4659/qpid/java/amqp-1-0-client/   (props changed)
    qpid/branches/QPID-4659/qpid/java/amqp-1-0-client-jms/   (props changed)
    qpid/branches/QPID-4659/qpid/java/amqp-1-0-common/   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker/   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
    qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
    qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Broker.js
    qpid/branches/QPID-4659/qpid/java/broker-plugins/management-http/src/main/java/resources/showBroker.html
    qpid/branches/QPID-4659/qpid/java/broker/bin/   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/broker.bnd
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ConfigurationEntryStore.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/AuthenticationProviderRecoverer.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/startup/BrokerRecoverer.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStore.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/ManagementModeStoreHandler.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStore.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/model/AuthenticationProvider.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Broker.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/model/Model.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactory.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/v1_0/   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/protocol/v1_0/Subscription_1_0.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/SecurityManager.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/AbstractPasswordFilePrincipalDatabase.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/database/PrincipalDatabase.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AbstractPrincipalDatabaseAuthManagerFactory.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AnonymousAuthenticationManager.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/AuthenticationManager.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/ExternalAuthenticationManager.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/KerberosAuthenticationManager.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/manager/SimpleLDAPAuthenticationManager.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/crammd5/CRAMMD5HexInitialiser.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/security/group/GroupPrincipalAccessor.java
    qpid/branches/QPID-4659/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/   (props changed)
    qpid/branches/QPID-4659/qpid/java/broker/src/main/resources/initial-store.json
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/startup/BrokerRecovererTest.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/ConfigurationEntryStoreTestCase.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/JsonConfigurationEntryStoreTest.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/store/MemoryConfigurationEntryStoreTest.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/model/adapter/AuthenticationProviderFactoryTest.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/database/Base64MD5PasswordFilePrincipalDatabaseTest.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/database/PlainPasswordFilePrincipalDatabaseTest.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/database/PropertiesPrincipalDatabase.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManagerTest.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/sasl/CRAMMD5HexServerTest.java
    qpid/branches/QPID-4659/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/sasl/TestPrincipalDatabase.java
    qpid/branches/QPID-4659/qpid/java/client/src/main/java/client.bnd
    qpid/branches/QPID-4659/qpid/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
    qpid/branches/QPID-4659/qpid/java/client/src/test/java/org/apache/qpid/client/AMQDestinationTest.java
    qpid/branches/QPID-4659/qpid/java/common.xml
    qpid/branches/QPID-4659/qpid/java/common/src/main/java/common.bnd
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/management-common.bnd
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/LoggingManagement.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedBroker.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedConnection.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedExchange.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/ManagedQueue.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/UserManagement.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/annotations/MBeanAttribute.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/annotations/MBeanConstructor.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/annotations/MBeanDescription.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/annotations/MBeanOperation.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/management/common/src/main/java/org/apache/qpid/management/common/mbeans/annotations/MBeanOperationParameter.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/perftests/etc/testdefs/Latency-VaryingNumberOfParticipants.json
    qpid/branches/QPID-4659/qpid/java/systests/src/main/java/org/apache/qpid/server/SupportedProtocolVersionsTest.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
    qpid/branches/QPID-4659/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/BrokerRestTest.java
    qpid/branches/QPID-4659/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/QpidRestTestCase.java
    qpid/branches/QPID-4659/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/StructureRestTest.java
    qpid/branches/QPID-4659/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/CPPExcludes   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/Excludes   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/JavaBDBExcludes   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/JavaExcludes   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/JavaPre010Excludes   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/JavaTransientExcludes   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/XAExcludes   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/cpp.async.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/cpp.cluster.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/cpp.noprefetch.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/cpp.ssl.excludes   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/cpp.ssl.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/cpp.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/java-bdb-spawn.0-9-1.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/java-bdb.0-9-1.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/java-dby-spawn.0-9-1.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/java-dby.0-9-1.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/java-mms-spawn.0-10.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/java-mms-spawn.0-9-1.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/java-mms.0-9-1.testprofile   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/log4j-test.xml   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/test-provider.properties   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/test_resources/   (props changed)
    qpid/branches/QPID-4659/qpid/java/test-profiles/testprofile.defaults   (props changed)
    qpid/branches/QPID-4659/qpid/packaging/windows/   (props changed)
    qpid/branches/QPID-4659/qpid/packaging/windows/INSTALL_NOTES.html
    qpid/branches/QPID-4659/qpid/packaging/windows/installer.proj   (contents, props changed)
    qpid/branches/QPID-4659/qpid/python/   (props changed)
    qpid/branches/QPID-4659/qpid/python/examples/api/spout   (props changed)
    qpid/branches/QPID-4659/qpid/python/qpid/concurrency.py   (props changed)
    qpid/branches/QPID-4659/qpid/python/qpid/messaging/endpoints.py
    qpid/branches/QPID-4659/qpid/python/qpid/messaging/transports.py
    qpid/branches/QPID-4659/qpid/python/setup.py
    qpid/branches/QPID-4659/qpid/tests/setup.py
    qpid/branches/QPID-4659/qpid/tests/src/py/qpid_tests/broker_0_9/queue.py   (props changed)
    qpid/branches/QPID-4659/qpid/tools/setup.py

Propchange: qpid/branches/QPID-4659/qpid/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid:r1458037-1461856

Modified: qpid/branches/QPID-4659/qpid/QPID_VERSION.txt
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/QPID_VERSION.txt?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/QPID_VERSION.txt (original)
+++ qpid/branches/QPID-4659/qpid/QPID_VERSION.txt Wed Mar 27 21:58:51 2013
@@ -1 +1 @@
-0.21
+0.23

Propchange: qpid/branches/QPID-4659/qpid/cpp/docs/api/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/docs/api:r1458037-1461856

Modified: qpid/branches/QPID-4659/qpid/cpp/examples/messaging/client.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/examples/messaging/client.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/examples/messaging/client.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/examples/messaging/client.cpp Wed Mar 27 21:58:51 2013
@@ -48,8 +48,8 @@ int main(int argc, char** argv) {
         Sender sender = session.createSender("service_queue");
 
         //create temp queue & receiver...
-        Address responseQueue("#response-queue; {create:always, delete:always}");
-        Receiver receiver = session.createReceiver(responseQueue);
+        Receiver receiver = session.createReceiver("#");
+        Address responseQueue = receiver.getAddress();
 
 	// Now send some messages ...
 	string s[] = {

Propchange: qpid/branches/QPID-4659/qpid/cpp/examples/old_api/tradedemo/tradedemo_topic_publisher.vcproj
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/examples/old_api/tradedemo/tradedemo_topic_publisher.vcproj:r1458037-1461856

Propchange: qpid/branches/QPID-4659/qpid/cpp/include/qmf/engine/Agent.h
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/include/qmf/engine/Agent.h:r1458037-1461856

Propchange: qpid/branches/QPID-4659/qpid/cpp/include/qmf/engine/Console.h
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/include/qmf/engine/Console.h:r1458037-1461856

Modified: qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Address.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Address.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Address.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Address.h Wed Mar 27 21:58:51 2013
@@ -153,6 +153,7 @@ class QPID_MESSAGING_CLASS_EXTERN Addres
     QPID_MESSAGING_EXTERN bool operator !() const;
   private:
     AddressImpl* impl;
+    friend class AddressImpl;
 };
 
 #ifndef SWIG

Modified: qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Receiver.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Receiver.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Receiver.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Receiver.h Wed Mar 27 21:58:51 2013
@@ -34,6 +34,7 @@ namespace messaging {
 template <class> class PrivateImplRef;
 #endif
 
+class Address;
 class Message;
 class ReceiverImpl;
 class Session;
@@ -134,6 +135,11 @@ class QPID_MESSAGING_CLASS_EXTERN Receiv
      */
     QPID_MESSAGING_EXTERN Session getSession() const;
 
+    /**
+     * Returns an address for this receiver.
+     */
+    QPID_MESSAGING_EXTERN Address getAddress() const;
+
 #ifndef SWIG
   private:
   friend class qpid::messaging::PrivateImplRef<Receiver>;

Modified: qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Sender.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Sender.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Sender.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/include/qpid/messaging/Sender.h Wed Mar 27 21:58:51 2013
@@ -34,6 +34,7 @@ namespace messaging {
 #ifndef SWIG
 template <class> class PrivateImplRef;
 #endif
+class Address;
 class Message;
 class SenderImpl;
 class Session;
@@ -89,6 +90,11 @@ class QPID_MESSAGING_CLASS_EXTERN Sender
      * Returns a handle to the session associated with this sender.
      */
     QPID_MESSAGING_EXTERN Session getSession() const;
+
+    /**
+     * Returns an address for this sender.
+     */
+    QPID_MESSAGING_EXTERN Address getAddress() const;
 #ifndef SWIG
   private:
   friend class qpid::messaging::PrivateImplRef<Sender>;

Propchange: qpid/branches/QPID-4659/qpid/cpp/src/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src:r1458037-1461856

Modified: qpid/branches/QPID-4659/qpid/cpp/src/CMakeLists.txt
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/CMakeLists.txt?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/CMakeLists.txt (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/CMakeLists.txt Wed Mar 27 21:58:51 2013
@@ -1063,6 +1063,7 @@ install_pdb (qpidclient ${QPID_COMPONENT
 
 set (qpidmessaging_SOURCES_hidden
      qpid/messaging/AddressParser.h
+     qpid/messaging/AddressImpl.h
      qpid/messaging/ConnectionImpl.h
      qpid/messaging/ReceiverImpl.h
      qpid/messaging/SessionImpl.h

Propchange: qpid/branches/QPID-4659/qpid/cpp/src/CMakeLists.txt
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src/CMakeLists.txt:r1458037-1461856

Modified: qpid/branches/QPID-4659/qpid/cpp/src/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/Makefile.am?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/Makefile.am (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/Makefile.am Wed Mar 27 21:58:51 2013
@@ -935,6 +935,7 @@ libqpidtypes_la_LDFLAGS = -version-info 
 libqpidmessaging_la_LIBADD = libqpidclient.la libqpidtypes.la
 libqpidmessaging_la_SOURCES =			\
   qpid/messaging/Address.cpp			\
+  qpid/messaging/AddressImpl.h			\
   qpid/messaging/AddressParser.h		\
   qpid/messaging/AddressParser.cpp		\
   qpid/messaging/Connection.cpp			\

Propchange: qpid/branches/QPID-4659/qpid/cpp/src/qmf/engine/Agent.cpp
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src/qmf/engine/Agent.cpp:r1458037-1461856

Propchange: qpid/branches/QPID-4659/qpid/cpp/src/qpid/acl/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src/qpid/acl:r1458037-1461856

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/amqp/descriptors.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/amqp/descriptors.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/amqp/descriptors.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/amqp/descriptors.h Wed Mar 27 21:58:51 2013
@@ -78,10 +78,11 @@ const Descriptor SASL_OUTCOME(SASL_OUTCO
 namespace filters {
 const std::string LEGACY_DIRECT_FILTER_SYMBOL("apache.org:legacy-amqp-direct-binding:string");
 const std::string LEGACY_TOPIC_FILTER_SYMBOL("apache.org:legacy-amqp-topic-binding:string");
-const std::string QPID_SELECTOR_FILTER_SYMBOL("qpid.apache.org:selector-filter:string");
+const std::string SELECTOR_FILTER_SYMBOL("apache.org:selector-filter:string");
 
 const uint64_t LEGACY_DIRECT_FILTER_CODE(0x0000468C00000000ULL);
 const uint64_t LEGACY_TOPIC_FILTER_CODE(0x0000468C00000001ULL);
+const uint64_t SELECTOR_FILTER_CODE(0x0000468C00000004ULL);
 }
 
 }} // namespace qpid::amqp

Propchange: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src/qpid/broker:r1458037-1461856

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/Selector.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/Selector.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/Selector.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/Selector.cpp Wed Mar 27 21:58:51 2013
@@ -147,7 +147,8 @@ const Value& MessageSelectorEnv::value(c
     return returnedValues[identifier];
 }
 
-Selector::Selector(const string& e) :
+Selector::Selector(const string& e)
+try :
     parse(TopExpression::parse(e)),
     expression(e)
 {
@@ -159,6 +160,10 @@ Selector::Selector(const string& e) :
         QPID_LOG(debug, "Selector parsed[" << e << "] into: " << ss.str());
     }
 }
+catch (std::range_error& ex) {
+    QPID_LOG(debug, "Selector failed[" << e << "] -> " << ex.what());
+    throw;
+}
 
 Selector::~Selector()
 {

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorExpression.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorExpression.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorExpression.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorExpression.cpp Wed Mar 27 21:58:51 2013
@@ -132,12 +132,11 @@ public:
     virtual BoolOrNone eval(Expression&, Expression&, const SelectorEnv&) const = 0;
 };
 
-template <typename T>
 class UnaryBooleanOperator {
 public:
     virtual ~UnaryBooleanOperator() {}
     virtual void repr(ostream&) const = 0;
-    virtual BoolOrNone eval(T&, const SelectorEnv&) const = 0;
+    virtual BoolOrNone eval(Expression&, const SelectorEnv&) const = 0;
 };
 
 class ArithmeticOperator {
@@ -170,8 +169,7 @@ ostream& operator<<(ostream& os, const C
     return os;
 }
 
-template <typename T>
-ostream& operator<<(ostream& os, const UnaryBooleanOperator<T>& e)
+ostream& operator<<(ostream& os, const UnaryBooleanOperator& e)
 {
     e.repr(os);
     return os;
@@ -260,13 +258,12 @@ public:
     }
 };
 
-template <typename T>
 class UnaryBooleanExpression : public BoolExpression {
-    UnaryBooleanOperator<T>* op;
-    boost::scoped_ptr<T> e1;
+    UnaryBooleanOperator* op;
+    boost::scoped_ptr<Expression> e1;
 
 public:
-    UnaryBooleanExpression(UnaryBooleanOperator<T>* o, T* e) :
+    UnaryBooleanExpression(UnaryBooleanOperator* o, Expression* e) :
         op(o),
         e1(e)
     {}
@@ -287,7 +284,7 @@ class LikeExpression : public BoolExpres
 
     static string toRegex(const string& s, const string& escape) {
         string regex("^");
-        if (escape.size()>1) throw std::range_error("Illegal escape char");
+        if (escape.size()>1) throw std::logic_error("Internal error");
         char e = 0;
         if (escape.size()==1) {
             e = escape[0];
@@ -594,7 +591,7 @@ class Greq : public ComparisonOperator {
 };
 
 // "IS NULL"
-class IsNull : public UnaryBooleanOperator<Expression> {
+class IsNull : public UnaryBooleanOperator {
     void repr(ostream& os) const {
         os << "IsNull";
     }
@@ -605,7 +602,7 @@ class IsNull : public UnaryBooleanOperat
 };
 
 // "IS NOT NULL"
-class IsNonNull : public UnaryBooleanOperator<Expression> {
+class IsNonNull : public UnaryBooleanOperator {
     void repr(ostream& os) const {
         os << "IsNonNull";
     }
@@ -616,7 +613,7 @@ class IsNonNull : public UnaryBooleanOpe
 };
 
 // "NOT"
-class Not : public UnaryBooleanOperator<Expression> {
+class Not : public UnaryBooleanOperator {
     void repr(ostream& os) const {
         os << "NOT";
     }
@@ -696,14 +693,6 @@ Div div;
 
 ////////////////////////////////////////////////////
 
-Expression* parseOrExpression(Tokeniser&);
-Expression* parseAndExpression(Tokeniser&);
-Expression* parseComparisonExpression(Tokeniser&);
-Expression* parseAddExpression(Tokeniser&);
-Expression* parseMultiplyExpression(Tokeniser&);
-Expression* parseUnaryArithExpression(Tokeniser&);
-Expression* parsePrimaryExpression(Tokeniser&);
-
 // Top level parser
 class TopBoolExpression : public TopExpression {
     boost::scoped_ptr<Expression> expression;
@@ -724,24 +713,28 @@ public:
     {}
 };
 
-TopExpression* TopExpression::parse(const string& exp)
-{
-    string::const_iterator s = exp.begin();
-    string::const_iterator e = exp.end();
-    Tokeniser tokeniser(s,e);
-    std::auto_ptr<Expression> b(parseOrExpression(tokeniser));
-    if (!b.get()) throw std::range_error("Illegal selector: couldn't parse");
-    if (tokeniser.nextToken().type != T_EOS) throw std::range_error("Illegal selector: too much input");
-    return new TopBoolExpression(b.release());
+void throwParseError(Tokeniser& tokeniser, const string& msg) {
+    tokeniser.returnTokens();
+    string error("Illegal selector: '");
+    error += tokeniser.nextToken().val;
+    error += "': ";
+    error += msg;
+    throw std::range_error(error);
 }
 
-Expression* parseOrExpression(Tokeniser& tokeniser)
+class Parse {
+
+friend TopExpression* TopExpression::parse(const string&);
+
+string error;
+
+Expression* orExpression(Tokeniser& tokeniser)
 {
-    std::auto_ptr<Expression> e(parseAndExpression(tokeniser));
+    std::auto_ptr<Expression> e(andExpression(tokeniser));
     if (!e.get()) return 0;
     while ( tokeniser.nextToken().type==T_OR ) {
         std::auto_ptr<Expression> e1(e);
-        std::auto_ptr<Expression> e2(parseAndExpression(tokeniser));
+        std::auto_ptr<Expression> e2(andExpression(tokeniser));
         if (!e2.get()) return 0;
         e.reset(new OrExpression(e1.release(), e2.release()));
     }
@@ -749,13 +742,13 @@ Expression* parseOrExpression(Tokeniser&
     return e.release();
 }
 
-Expression* parseAndExpression(Tokeniser& tokeniser)
+Expression* andExpression(Tokeniser& tokeniser)
 {
-    std::auto_ptr<Expression> e(parseComparisonExpression(tokeniser));
+    std::auto_ptr<Expression> e(comparisonExpression(tokeniser));
     if (!e.get()) return 0;
     while ( tokeniser.nextToken().type==T_AND ) {
         std::auto_ptr<Expression> e1(e);
-        std::auto_ptr<Expression> e2(parseComparisonExpression(tokeniser));
+        std::auto_ptr<Expression> e2(comparisonExpression(tokeniser));
         if (!e2.get()) return 0;
         e.reset(new AndExpression(e1.release(), e2.release()));
     }
@@ -763,15 +756,24 @@ Expression* parseAndExpression(Tokeniser
     return e.release();
 }
 
-BoolExpression* parseSpecialComparisons(Tokeniser& tokeniser, std::auto_ptr<Expression> e1) {
+BoolExpression* specialComparisons(Tokeniser& tokeniser, std::auto_ptr<Expression> e1) {
     switch (tokeniser.nextToken().type) {
     case T_LIKE: {
         const Token t = tokeniser.nextToken();
-        if ( t.type!=T_STRING ) return 0;
+        if ( t.type!=T_STRING ) {
+            error = "expected string after LIKE";
+            return 0;
+        }
         // Check for "ESCAPE"
         if ( tokeniser.nextToken().type==T_ESCAPE ) {
             const Token e = tokeniser.nextToken();
-            if ( e.type!=T_STRING ) return 0;
+            if ( e.type!=T_STRING ) {
+                error = "expected string after ESCAPE";
+                return 0;
+            }
+            if (e.val.size()>1) {
+                throwParseError(tokeniser, "single character string required after ESCAPE");
+            }
             return new LikeExpression(e1.release(), t.val, e.val);
         } else {
             tokeniser.returnTokens();
@@ -779,41 +781,51 @@ BoolExpression* parseSpecialComparisons(
         }
     }
     case T_BETWEEN: {
-        std::auto_ptr<Expression> lower(parseAddExpression(tokeniser));
+        std::auto_ptr<Expression> lower(addExpression(tokeniser));
         if ( !lower.get() ) return 0;
-        if ( tokeniser.nextToken().type!=T_AND ) return 0;
-        std::auto_ptr<Expression> upper(parseAddExpression(tokeniser));
+        if ( tokeniser.nextToken().type!=T_AND ) {
+            error = "expected AND after BETWEEN";
+            return 0;
+        }
+        std::auto_ptr<Expression> upper(addExpression(tokeniser));
         if ( !upper.get() ) return 0;
         return new BetweenExpression(e1.release(), lower.release(), upper.release());
     }
     case T_IN: {
-        if ( tokeniser.nextToken().type!=T_LPAREN ) return 0;
+        if ( tokeniser.nextToken().type!=T_LPAREN ) {
+            error = "missing '(' after IN";
+            return 0;
+        }
         boost::ptr_vector<Expression> list;
         do {
-            std::auto_ptr<Expression> e(parseAddExpression(tokeniser));
+            std::auto_ptr<Expression> e(addExpression(tokeniser));
             if (!e.get()) return 0;
             list.push_back(e.release());
         } while (tokeniser.nextToken().type==T_COMMA);
         tokeniser.returnTokens();
-        if ( tokeniser.nextToken().type!=T_RPAREN ) return 0;
+        if ( tokeniser.nextToken().type!=T_RPAREN ) {
+            error = "missing ',' or ')' after IN";
+            return 0;
+        }
         return new InExpression(e1.release(), list);
     }
     default:
+        error = "expected LIKE, IN or BETWEEN";
         return 0;
     }
 }
 
-Expression* parseComparisonExpression(Tokeniser& tokeniser)
+Expression* comparisonExpression(Tokeniser& tokeniser)
 {
     const Token t = tokeniser.nextToken();
     if ( t.type==T_NOT ) {
-        std::auto_ptr<Expression> e(parseComparisonExpression(tokeniser));
+        std::auto_ptr<Expression> e(comparisonExpression(tokeniser));
         if (!e.get()) return 0;
-        return new UnaryBooleanExpression<Expression>(&notOp, e.release());
+        return new UnaryBooleanExpression(&notOp, e.release());
     }
 
     tokeniser.returnTokens();
-    std::auto_ptr<Expression> e1(parseAddExpression(tokeniser));
+    std::auto_ptr<Expression> e1(addExpression(tokeniser));
     if (!e1.get()) return 0;
 
     switch (tokeniser.nextToken().type) {
@@ -822,23 +834,24 @@ Expression* parseComparisonExpression(To
         // The rest must be T_NULL or T_NOT, T_NULL
         switch (tokeniser.nextToken().type) {
             case T_NULL:
-                return new UnaryBooleanExpression<Expression>(&isNullOp, e1.release());
+                return new UnaryBooleanExpression(&isNullOp, e1.release());
             case T_NOT:
                 if ( tokeniser.nextToken().type == T_NULL)
-                    return new UnaryBooleanExpression<Expression>(&isNonNullOp, e1.release());
+                    return new UnaryBooleanExpression(&isNonNullOp, e1.release());
             default:
+                error = "expected NULL or NOT NULL after IS";
                 return 0;
         }
     case T_NOT: {
-        std::auto_ptr<BoolExpression> e(parseSpecialComparisons(tokeniser, e1));
+        std::auto_ptr<BoolExpression> e(specialComparisons(tokeniser, e1));
         if (!e.get()) return 0;
-        return new UnaryBooleanExpression<Expression>(&notOp, e.release());
+        return new UnaryBooleanExpression(&notOp, e.release());
     }
     case T_BETWEEN:
     case T_LIKE:
     case T_IN: {
         tokeniser.returnTokens();
-        return parseSpecialComparisons(tokeniser, e1);
+        return specialComparisons(tokeniser, e1);
     }
     default:
         break;
@@ -858,15 +871,15 @@ Expression* parseComparisonExpression(To
         return e1.release();
     }
 
-    std::auto_ptr<Expression> e2(parseAddExpression(tokeniser));
+    std::auto_ptr<Expression> e2(addExpression(tokeniser));
     if (!e2.get()) return 0;
 
     return new ComparisonExpression(op, e1.release(), e2.release());
 }
 
-Expression* parseAddExpression(Tokeniser& tokeniser)
+Expression* addExpression(Tokeniser& tokeniser)
 {
-    std::auto_ptr<Expression> e(parseMultiplyExpression(tokeniser));
+    std::auto_ptr<Expression> e(multiplyExpression(tokeniser));
     if (!e.get()) return 0;
 
     Token t = tokeniser.nextToken();
@@ -876,10 +889,11 @@ Expression* parseAddExpression(Tokeniser
         case T_PLUS: op = &add; break;
         case T_MINUS: op = &sub; break;
         default:
+            error = "internal error processing binary + or -";
             return 0;
         }
         std::auto_ptr<Expression> e1(e);
-        std::auto_ptr<Expression> e2(parseMultiplyExpression(tokeniser));
+        std::auto_ptr<Expression> e2(multiplyExpression(tokeniser));
         if (!e2.get()) return 0;
         e.reset(new ArithmeticExpression(op, e1.release(), e2.release()));
         t = tokeniser.nextToken();
@@ -889,9 +903,9 @@ Expression* parseAddExpression(Tokeniser
     return e.release();
 }
 
-Expression* parseMultiplyExpression(Tokeniser& tokeniser)
+Expression* multiplyExpression(Tokeniser& tokeniser)
 {
-    std::auto_ptr<Expression> e(parseUnaryArithExpression(tokeniser));
+    std::auto_ptr<Expression> e(unaryArithExpression(tokeniser));
     if (!e.get()) return 0;
 
     Token t = tokeniser.nextToken();
@@ -901,10 +915,11 @@ Expression* parseMultiplyExpression(Toke
         case T_MULT: op = &mult; break;
         case T_DIV: op = &div; break;
         default:
+            error = "internal error processing * or /";
             return 0;
         }
         std::auto_ptr<Expression> e1(e);
-        std::auto_ptr<Expression> e2(parseMultiplyExpression(tokeniser));
+        std::auto_ptr<Expression> e2(unaryArithExpression(tokeniser));
         if (!e2.get()) return 0;
         e.reset(new ArithmeticExpression(op, e1.release(), e2.release()));
         t = tokeniser.nextToken();
@@ -914,20 +929,23 @@ Expression* parseMultiplyExpression(Toke
     return e.release();
 }
 
-Expression* parseUnaryArithExpression(Tokeniser& tokeniser)
+Expression* unaryArithExpression(Tokeniser& tokeniser)
 {
     const Token t = tokeniser.nextToken();
     switch (t.type) {
     case T_LPAREN: {
-        std::auto_ptr<Expression> e(parseOrExpression(tokeniser));
+        std::auto_ptr<Expression> e(orExpression(tokeniser));
         if (!e.get()) return 0;
-        if ( tokeniser.nextToken().type!=T_RPAREN ) return 0;
+        if ( tokeniser.nextToken().type!=T_RPAREN ) {
+            error = "missing ')' after '('";
+            return 0;
+        }
         return e.release();
     }
     case T_PLUS:
         break; // Unary + is no op
     case T_MINUS: {
-        std::auto_ptr<Expression> e(parseUnaryArithExpression(tokeniser));
+        std::auto_ptr<Expression> e(unaryArithExpression(tokeniser));
         if (!e.get()) return 0;
         return new UnaryArithExpression(&negate, e.release());
     }
@@ -936,11 +954,11 @@ Expression* parseUnaryArithExpression(To
     }
 
     tokeniser.returnTokens();
-    std::auto_ptr<Expression> e(parsePrimaryExpression(tokeniser));
+    std::auto_ptr<Expression> e(primaryExpression(tokeniser));
     return e.release();
 }
 
-Expression* parsePrimaryExpression(Tokeniser& tokeniser)
+Expression* primaryExpression(Tokeniser& tokeniser)
 {
     const Token& t = tokeniser.nextToken();
     switch (t.type) {
@@ -957,8 +975,27 @@ Expression* parsePrimaryExpression(Token
         case T_NUMERIC_APPROX:
             return new Literal(boost::lexical_cast<double>(t.val));
         default:
+            error = "expected literal or identifier";
             return 0;
     }
 }
 
+};
+
+TopExpression* TopExpression::parse(const string& exp)
+{
+    string::const_iterator s = exp.begin();
+    string::const_iterator e = exp.end();
+    Tokeniser tokeniser(s,e);
+    Parse parse;
+    std::auto_ptr<Expression> b(parse.orExpression(tokeniser));
+    if (!b.get()) {
+        throwParseError(tokeniser, parse.error);
+    }
+    if (tokeniser.nextToken().type != T_EOS) {
+        throwParseError(tokeniser, "extra input");
+    }
+    return new TopBoolExpression(b.release());
+}
+
 }}

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.cpp Wed Mar 27 21:58:51 2013
@@ -132,8 +132,8 @@ bool processString(std::string::const_it
         ++q;
     }
 
+    tok = Token(T_STRING, s, content);
     s = q;
-    tok = Token(T_STRING, content);
     return true;
 }
 
@@ -171,7 +171,7 @@ bool tokenise(std::string::const_iterato
     while (true)
     switch (state) {
     case START:
-        if (t==e) {tok = Token(T_EOS, ""); return true;}
+        if (t==e) {tok = Token(T_EOS, s, "<END>"); return true;}
         else switch (*t) {
         case '(': tokType = T_LPAREN; state = ACCEPT_INC; continue;
         case ')': tokType = T_RPAREN; state = ACCEPT_INC; continue;
@@ -259,6 +259,7 @@ bool tokenise(std::string::const_iterato
 
 Tokeniser::Tokeniser(const std::string::const_iterator& s, const std::string::const_iterator& e) :
     tokp(0),
+    inStart(s),
     inp(s),
     inEnd(e)
 {
@@ -294,5 +295,11 @@ void Tokeniser::returnTokens(unsigned in
     tokp-=n;
 }
 
+std::string Tokeniser::remaining()
+{
+    Token& currentTok = tokens[tokp];
+    return std::string(currentTok.tokenStart, inEnd);
+}
+
 
 }}

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorToken.h Wed Mar 27 21:58:51 2013
@@ -67,6 +67,7 @@ typedef enum {
 struct Token {
     TokenType type;
     std::string val;
+    std::string::const_iterator tokenStart;
 
     Token()
     {}
@@ -76,14 +77,23 @@ struct Token {
         val(v)
     {}
 
+    Token(TokenType t, const std::string::const_iterator& s, const std::string& v) :
+        type(t),
+        val(v),
+        tokenStart(s)
+    {}
+
     Token(TokenType t, const std::string::const_iterator& s, const std::string::const_iterator& e) :
         type(t),
-        val(std::string(s,e))
+        val(std::string(s,e)),
+        tokenStart(s)
     {}
 
     bool operator==(const Token& r) const
     {
-        return type == r.type && val == r.val;
+        return
+            (type == T_EOS && r.type == T_EOS) ||
+            (type == r.type && val == r.val);
     }
 };
 
@@ -100,6 +110,7 @@ class Tokeniser {
     std::vector<Token> tokens;
     unsigned int tokp;
 
+    std::string::const_iterator inStart;
     std::string::const_iterator inp;
     std::string::const_iterator inEnd;
 
@@ -107,6 +118,7 @@ public:
     QPID_BROKER_EXTERN Tokeniser(const std::string::const_iterator& s, const std::string::const_iterator& e);
     QPID_BROKER_EXTERN void returnTokens(unsigned int n = 1);
     QPID_BROKER_EXTERN const Token& nextToken();
+    QPID_BROKER_EXTERN std::string remaining();
 };
 
 }}

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorValue.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorValue.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorValue.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SelectorValue.cpp Wed Mar 27 21:58:51 2013
@@ -100,6 +100,8 @@ NumericPairBase* promoteNumeric(const Va
             assert(false);
         }
     }
+    // Can never get here - but this stops a warning
+    return 0;
 }
 
 bool operator==(const Value& v1, const Value& v2)

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SemanticState.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SemanticState.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SemanticState.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/SemanticState.cpp Wed Mar 27 21:58:51 2013
@@ -286,7 +286,7 @@ void SemanticState::record(const Deliver
 }
 
 const std::string QPID_SYNC_FREQUENCY("qpid.sync_frequency");
-const std::string QPID_SELECTOR("qpid.selector");
+const std::string APACHE_SELECTOR("x-apache-selector");
 
 SemanticStateConsumerImpl::SemanticStateConsumerImpl(SemanticState* _parent,
                                           const string& _name,
@@ -309,7 +309,7 @@ Consumer(_name, type),
     exclusive(_exclusive),
     resumeId(_resumeId),
     tag(_tag),
-    selector(returnSelector(_arguments.getAsString(QPID_SELECTOR))),
+    selector(returnSelector(_arguments.getAsString(APACHE_SELECTOR))),
     resumeTtl(_resumeTtl),
     arguments(_arguments),
     notifyEnabled(true),

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.cpp Wed Mar 27 21:58:51 2013
@@ -37,11 +37,11 @@ namespace qpid {
 namespace broker {
 namespace amqp {
 
-Connection::Connection(qpid::sys::OutputControl& o, const std::string& i, qpid::broker::Broker& b, Interconnects& interconnects_, bool saslInUse)
+Connection::Connection(qpid::sys::OutputControl& o, const std::string& i, qpid::broker::Broker& b, Interconnects& interconnects_, bool saslInUse, const std::string& d)
     : ManagedConnection(b, i),
       connection(pn_connection()),
       transport(pn_transport()),
-      out(o), id(i), broker(b), haveOutput(true), interconnects(interconnects_)
+      out(o), id(i), broker(b), haveOutput(true), interconnects(interconnects_), domain(d)
 {
     if (pn_transport_bind(transport, connection)) {
         //error
@@ -265,4 +265,8 @@ std::string Connection::getError()
     return text.str();
 }
 
+std::string Connection::getDomain() const
+{
+    return domain;
+}
 }}} // namespace qpid::broker::amqp

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Connection.h Wed Mar 27 21:58:51 2013
@@ -45,7 +45,7 @@ class Session;
 class Connection : public sys::ConnectionCodec, public ManagedConnection
 {
   public:
-    Connection(qpid::sys::OutputControl& out, const std::string& id, qpid::broker::Broker& broker, Interconnects&, bool saslInUse);
+    Connection(qpid::sys::OutputControl& out, const std::string& id, qpid::broker::Broker& broker, Interconnects&, bool saslInUse, const std::string& domain);
     virtual ~Connection();
     size_t decode(const char* buffer, size_t size);
     virtual size_t encode(char* buffer, size_t size);
@@ -57,6 +57,7 @@ class Connection : public sys::Connectio
     framing::ProtocolVersion getVersion() const;
     pn_transport_t* getTransport();
     Interconnects& getInterconnects();
+    std::string getDomain() const;
   protected:
     typedef std::map<pn_session_t*, boost::shared_ptr<Session> > Sessions;
     pn_connection_t* connection;
@@ -67,6 +68,7 @@ class Connection : public sys::Connectio
     bool haveOutput;
     Sessions sessions;
     Interconnects& interconnects;
+    std::string domain;
 
     virtual void process();
     std::string getError();

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Filter.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Filter.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Filter.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Filter.cpp Wed Mar 27 21:58:51 2013
@@ -61,7 +61,7 @@ void Filter::onStringValue(const qpid::a
         if (descriptor->match(qpid::amqp::filters::LEGACY_TOPIC_FILTER_SYMBOL, qpid::amqp::filters::LEGACY_TOPIC_FILTER_CODE)
             || descriptor->match(qpid::amqp::filters::LEGACY_DIRECT_FILTER_SYMBOL, qpid::amqp::filters::LEGACY_DIRECT_FILTER_CODE)) {
             setSubjectFilter(filter);
-        } else if (descriptor->match(qpid::amqp::filters::QPID_SELECTOR_FILTER_SYMBOL, 0)) {
+        } else if (descriptor->match(qpid::amqp::filters::SELECTOR_FILTER_SYMBOL, qpid::amqp::filters::SELECTOR_FILTER_CODE)) {
             setSelectorFilter(filter);
         } else {
             QPID_LOG(notice, "Skipping unrecognised string filter with key " << filter.key << " and descriptor " << filter.descriptor);

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Interconnect.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Interconnect.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Interconnect.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Interconnect.cpp Wed Mar 27 21:58:51 2013
@@ -41,7 +41,7 @@ namespace amqp {
 
 Interconnect::Interconnect(qpid::sys::OutputControl& out, const std::string& id, qpid::broker::Broker& broker, bool saslInUse,
                            bool i, const std::string& n, const std::string& s, const std::string& t, Domain& d, Interconnects& r)
-    : Connection(out, id, broker, r, saslInUse), incoming(i), name(n), source(s), target(t), domain(d), registry(r), headerDiscarded(false),
+    : Connection(out, id, broker, r, saslInUse, std::string()), incoming(i), name(n), source(s), target(t), domain(d), registry(r), headerDiscarded(false),
       closeRequested(false), isTransportDeleted(false)
 {}
 

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/ProtocolPlugin.cpp Wed Mar 27 21:58:51 2013
@@ -41,10 +41,19 @@ namespace qpid {
 namespace broker {
 namespace amqp {
 
+struct Options : public qpid::Options {
+    std::string domain;
+
+    Options() : qpid::Options("AMQP 1.0 Options") {
+        addOptions()
+            ("domain", optValue(domain, "DOMAIN"), "Domain of this broker");
+    }
+};
+
 class ProtocolImpl : public Protocol
 {
   public:
-    ProtocolImpl(Interconnects* i, Broker& b) : interconnects(i), broker(b)
+    ProtocolImpl(Interconnects* i, Broker& b, const std::string& d) : interconnects(i), broker(b), domain(d)
     {
         broker.getObjectFactoryRegistry().add(interconnects);//registry deletes on shutdown
     }
@@ -54,16 +63,20 @@ class ProtocolImpl : public Protocol
   private:
     Interconnects* interconnects;
     Broker& broker;
+    std::string domain;
 };
 
 struct ProtocolPlugin : public Plugin
 {
+    Options options;
+    Options* getOptions() { return &options; }
+
     void earlyInitialize(Plugin::Target& target)
     {
         //need to register protocol before recovery from store
         broker::Broker* broker = dynamic_cast<qpid::broker::Broker*>(&target);
         if (broker) {
-            ProtocolImpl* impl = new ProtocolImpl(new Interconnects(), *broker);
+            ProtocolImpl* impl = new ProtocolImpl(new Interconnects(), *broker, options.domain);
             broker->getProtocolRegistry().add("AMQP 1.0", impl);//registry deletes on shutdown
         }
     }
@@ -79,18 +92,20 @@ qpid::sys::ConnectionCodec* ProtocolImpl
         if (v.getProtocol() == qpid::framing::ProtocolVersion::SASL) {
             if (broker.getOptions().auth) {
                 QPID_LOG(info, "Using AMQP 1.0 (with SASL layer)");
-                return new qpid::broker::amqp::Sasl(out, id, broker, *interconnects, qpid::SaslFactory::getInstance().createServer(broker.getOptions().realm, broker.getOptions().requireEncrypted, external));
+                return new qpid::broker::amqp::Sasl(out, id, broker, *interconnects,
+                                                    qpid::SaslFactory::getInstance().createServer(broker.getOptions().realm,broker.getOptions().requireEncrypted, external),
+                                                    domain);
             } else {
                 std::auto_ptr<SaslServer> authenticator(new qpid::NullSaslServer(broker.getOptions().realm));
                 QPID_LOG(info, "Using AMQP 1.0 (with dummy SASL layer)");
-                return new qpid::broker::amqp::Sasl(out, id, broker, *interconnects, authenticator);
+                return new qpid::broker::amqp::Sasl(out, id, broker, *interconnects, authenticator, domain);
             }
         } else {
             if (broker.getOptions().auth) {
                 throw qpid::Exception("SASL layer required!");
             } else {
                 QPID_LOG(info, "Using AMQP 1.0 (no SASL layer)");
-                return new qpid::broker::amqp::Connection(out, id, broker, *interconnects, false);
+                return new qpid::broker::amqp::Connection(out, id, broker, *interconnects, false, domain);
             }
         }
     }

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.cpp Wed Mar 27 21:58:51 2013
@@ -31,8 +31,8 @@ namespace qpid {
 namespace broker {
 namespace amqp {
 
-Sasl::Sasl(qpid::sys::OutputControl& o, const std::string& id, qpid::broker::Broker& broker, Interconnects& i, std::auto_ptr<qpid::SaslServer> auth)
-    : qpid::amqp::SaslServer(id), out(o), connection(out, id, broker, i, true),
+Sasl::Sasl(qpid::sys::OutputControl& o, const std::string& id, qpid::broker::Broker& broker, Interconnects& i, std::auto_ptr<qpid::SaslServer> auth, const std::string& domain)
+    : qpid::amqp::SaslServer(id), out(o), connection(out, id, broker, i, true, domain),
       authenticator(auth),
       state(INCOMPLETE), writeHeader(true), haveOutput(true)
 {

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Sasl.h Wed Mar 27 21:58:51 2013
@@ -39,7 +39,7 @@ namespace amqp {
 class Sasl : public sys::ConnectionCodec, qpid::amqp::SaslServer
 {
   public:
-    Sasl(qpid::sys::OutputControl& out, const std::string& id, qpid::broker::Broker& broker, Interconnects&, std::auto_ptr<qpid::SaslServer> authenticator);
+    Sasl(qpid::sys::OutputControl& out, const std::string& id, qpid::broker::Broker& broker, Interconnects&, std::auto_ptr<qpid::SaslServer> authenticator, const std::string& domain);
     ~Sasl();
 
     size_t decode(const char* buffer, size_t size);

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.cpp Wed Mar 27 21:58:51 2013
@@ -53,6 +53,20 @@ namespace qpid {
 namespace broker {
 namespace amqp {
 
+namespace {
+bool is_capability_requested(const std::string& name, pn_data_t* capabilities)
+{
+    while (pn_data_next(capabilities)) {
+        pn_bytes_t c = pn_data_get_symbol(capabilities);
+        std::string s(c.start, c.size);
+        if (s == name) return true;
+    }
+    return false;
+}
+
+const std::string CREATE_ON_DEMAND("create-on-demand");
+}
+
 class IncomingToQueue : public DecodingIncoming
 {
   public:
@@ -81,7 +95,7 @@ Session::ResolvedNode Session::resolve(c
     node.exchange = broker.getExchanges().find(name);
     node.queue = broker.getQueues().find(name);
     if (!node.queue && !node.exchange) {
-        if (pn_terminus_is_dynamic(terminus)) {
+        if (pn_terminus_is_dynamic(terminus)  || is_capability_requested(CREATE_ON_DEMAND, pn_terminus_capabilities(terminus))) {
             //is it a queue or an exchange?
             NodeProperties properties;
             properties.read(pn_terminus_properties(terminus));
@@ -117,25 +131,43 @@ Session::ResolvedNode Session::resolve(c
     return node;
 }
 
+std::string Session::generateName(pn_link_t* link)
+{
+    std::stringstream s;
+    s << qpid::types::Uuid(true) << "::" << pn_link_name(link);
+    if (!connection.getDomain().empty()) {
+        s << "@" << connection.getDomain();
+    }
+    return s.str();
+}
+
 void Session::attach(pn_link_t* link)
 {
     if (pn_link_is_sender(link)) {
         pn_terminus_t* source = pn_link_remote_source(link);
         //i.e a subscription
+        std::string name;
         if (pn_terminus_get_type(source) == PN_UNSPECIFIED) {
             throw qpid::Exception("No source specified!");/*invalid-field?*/
+        } else if (pn_terminus_is_dynamic(source)) {
+            name = generateName(link);
+        } else {
+            name = pn_terminus_get_address(source);
         }
-        std::string name = pn_terminus_get_address(source);
         QPID_LOG(debug, "Received attach request for outgoing link from " << name);
         pn_terminus_set_address(pn_link_source(link), name.c_str());
 
         setupOutgoing(link, source, name);
     } else {
         pn_terminus_t* target = pn_link_remote_target(link);
+        std::string name;
         if (pn_terminus_get_type(target) == PN_UNSPECIFIED) {
             throw qpid::Exception("No target specified!");/*invalid field?*/
+        } else if (pn_terminus_is_dynamic(target)) {
+            name = generateName(link);
+        } else {
+            name  = pn_terminus_get_address(target);
         }
-        std::string name = pn_terminus_get_address(target);
         QPID_LOG(debug, "Received attach request for incoming link to " << name);
         pn_terminus_set_address(pn_link_target(link), name.c_str());
 

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/broker/amqp/Session.h Wed Mar 27 21:58:51 2013
@@ -95,6 +95,7 @@ class Session : public ManagedSession, p
     ResolvedNode resolve(const std::string name, pn_terminus_t* terminus, bool incoming);
     void setupOutgoing(pn_link_t* link, pn_terminus_t* source, const std::string& name);
     void setupIncoming(pn_link_t* link, pn_terminus_t* target, const std::string& name);
+    std::string generateName(pn_link_t*);
 };
 }}} // namespace qpid::broker::amqp
 

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp Wed Mar 27 21:58:51 2013
@@ -93,7 +93,8 @@ const std::string DURABLE("durable");
 const std::string X_DECLARE("x-declare");
 const std::string X_SUBSCRIBE("x-subscribe");
 const std::string X_BINDINGS("x-bindings");
-const std::string QPID_SELECTOR("qpid.selector");
+const std::string SELECTOR("selector");
+const std::string APACHE_SELECTOR("x-apache-selector");
 const std::string EXCHANGE("exchange");
 const std::string QUEUE("queue");
 const std::string KEY("key");
@@ -477,8 +478,8 @@ QueueSource::QueueSource(const Address& 
     //options)
     exclusive = Opt(address)/LINK/X_SUBSCRIBE/EXCLUSIVE;
     (Opt(address)/LINK/X_SUBSCRIBE/ARGUMENTS).collect(options);
-    std::string selector = Opt(address)/LINK/QPID_SELECTOR;
-    if (!selector.empty()) options.setString(QPID_SELECTOR, selector);
+    std::string selector = Opt(address)/LINK/SELECTOR;
+    if (!selector.empty()) options.setString(APACHE_SELECTOR, selector);
 }
 
 void QueueSource::subscribe(qpid::client::AsyncSession& session, const std::string& destination)
@@ -990,7 +991,7 @@ Verifier::Verifier()
     link[X_SUBSCRIBE] = true;
     link[X_DECLARE] = true;
     link[X_BINDINGS] = true;
-    link[QPID_SELECTOR] = true;
+    link[SELECTOR] = true;
     defined[LINK] = link;
 }
 void Verifier::verify(const Address& address) const

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp Wed Mar 27 21:58:51 2013
@@ -143,6 +143,11 @@ uint32_t ReceiverImpl::getUnsettled()
     return parent->getUnsettledAcks(destination);
 }
 
+qpid::messaging::Address ReceiverImpl::getAddress() const
+{
+    return address;
+}
+
 ReceiverImpl::ReceiverImpl(SessionImpl& p, const std::string& name,
                            const qpid::messaging::Address& a) :
 

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/ReceiverImpl.h Wed Mar 27 21:58:51 2013
@@ -66,6 +66,7 @@ class ReceiverImpl : public qpid::messag
     void received(qpid::messaging::Message& message);
     qpid::messaging::Session getSession() const;
     bool isClosed() const;
+    qpid::messaging::Address getAddress() const;
 
   private:
     mutable sys::Mutex lock;

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp Wed Mar 27 21:58:51 2013
@@ -34,6 +34,11 @@ SenderImpl::SenderImpl(SessionImpl& _par
     parent(&_parent), name(_name), address(_address), state(UNRESOLVED),
     capacity(50), window(0), flushed(false), unreliable(AddressResolution::is_unreliable(address)) {}
 
+qpid::messaging::Address SenderImpl::getAddress() const
+{
+    return address;
+}
+
 void SenderImpl::send(const qpid::messaging::Message& message, bool sync) 
 {
     if (unreliable) {           // immutable, don't need lock

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h Wed Mar 27 21:58:51 2013
@@ -56,6 +56,7 @@ class SenderImpl : public qpid::messagin
     void init(qpid::client::AsyncSession, AddressResolution&);
     const std::string& getName() const;
     qpid::messaging::Session getSession() const;
+    qpid::messaging::Address getAddress() const;
 
   private:
     mutable sys::Mutex lock;

Propchange: qpid/branches/QPID-4659/qpid/cpp/src/qpid/management/ManagementAgent.cpp
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src/qpid/management/ManagementAgent.cpp:r1458037-1461856

Propchange: qpid/branches/QPID-4659/qpid/cpp/src/qpid/management/ManagementAgent.h
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src/qpid/management/ManagementAgent.h:r1458037-1461856

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Address.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Address.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Address.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Address.cpp Wed Mar 27 21:58:51 2013
@@ -19,6 +19,8 @@
  *
  */
 #include "qpid/messaging/Address.h"
+#include "qpid/messaging/AddressImpl.h"
+#include "qpid/messaging/AddressParser.h"
 #include "qpid/framing/Uuid.h"
 #include <sstream>
 #include <boost/format.hpp>
@@ -34,51 +36,9 @@ const std::string OPTIONS_DIVIDER = ";";
 const std::string SPACE = " ";
 const std::string TYPE = "type";
 }
-class AddressImpl
-{
-  public:
-    std::string name;
-    std::string subject;
-    Variant::Map options;
- 
-    AddressImpl() {}
-    AddressImpl(const std::string& n, const std::string& s, const Variant::Map& o) :
-        name(n), subject(s), options(o) {}
-};
-
-class AddressParser
-{
-  public:
-    AddressParser(const std::string&);
-    bool parse(Address& address);
-  private:
-    const std::string& input;
-    std::string::size_type current;
-    static const std::string RESERVED;
-
-    bool readChar(char c);
-    bool readQuotedString(std::string& s);
-    bool readQuotedValue(Variant& value);
-    bool readString(std::string& value, char delimiter);
-    bool readWord(std::string& word, const std::string& delims = RESERVED);
-    bool readSimpleValue(Variant& word);
-    bool readKey(std::string& key);
-    bool readValue(Variant& value);
-    bool readKeyValuePair(Variant::Map& map);
-    bool readMap(Variant& value);
-    bool readList(Variant& value);
-    bool readName(std::string& name);
-    bool readSubject(std::string& subject);
-    bool error(const std::string& message);
-    bool eos();
-    bool iswhitespace();
-    bool in(const std::string& delims);
-    bool isreserved();
-};
-
 Address::Address() : impl(new AddressImpl()) {}
 Address::Address(const std::string& address) : impl(new AddressImpl())
-{ 
+{
     AddressParser parser(address);
     parser.parse(*this);
 }
@@ -86,7 +46,7 @@ Address::Address(const std::string& name
                  const std::string& type)
     : impl(new AddressImpl(name, subject, options)) { setType(type); }
 Address::Address(const Address& a) :
-    impl(new AddressImpl(a.impl->name, a.impl->subject, a.impl->options)) {}
+    impl(new AddressImpl(a.impl->name, a.impl->subject, a.impl->options)) { impl->temporary = a.impl->temporary; }
 Address::~Address() { delete impl; }
 
 Address& Address::operator=(const Address& a) { *impl = *a.impl; return *this; }

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/AddressParser.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/AddressParser.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/AddressParser.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/AddressParser.cpp Wed Mar 27 21:58:51 2013
@@ -19,6 +19,7 @@
  *
  */
 #include "AddressParser.h"
+#include "AddressImpl.h"
 #include "qpid/framing/Uuid.h"
 #include <boost/format.hpp>
 
@@ -38,7 +39,10 @@ bool AddressParser::parse(Address& addre
 {
     std::string name;
     if (readName(name)) {
-        if (name.find('#') == 0) name = qpid::framing::Uuid(true).str() + name;
+        if (name.find('#') == 0) {
+            name = qpid::framing::Uuid(true).str() + name;
+            AddressImpl::setTemporary(address, true);
+        }
         address.setName(name);
         if (readChar('/')) {
             std::string subject;

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Receiver.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Receiver.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Receiver.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Receiver.cpp Wed Mar 27 21:58:51 2013
@@ -19,6 +19,7 @@
  *
  */
 #include "qpid/messaging/Receiver.h"
+#include "qpid/messaging/Address.h"
 #include "qpid/messaging/Message.h"
 #include "qpid/messaging/ReceiverImpl.h"
 #include "qpid/messaging/Session.h"
@@ -45,4 +46,5 @@ void Receiver::close() { impl->close(); 
 const std::string& Receiver::getName() const { return impl->getName(); }
 Session Receiver::getSession() const { return impl->getSession(); }
 bool Receiver::isClosed() const { return impl->isClosed(); }
+Address Receiver::getAddress() const { return impl->getAddress(); }
 }} // namespace qpid::messaging

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/ReceiverImpl.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/ReceiverImpl.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/ReceiverImpl.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/ReceiverImpl.h Wed Mar 27 21:58:51 2013
@@ -27,6 +27,7 @@
 namespace qpid {
 namespace messaging {
 
+class Address;
 class Duration;
 class Message;
 class MessageListener;
@@ -48,6 +49,7 @@ class ReceiverImpl : public virtual qpid
     virtual const std::string& getName() const = 0;
     virtual Session getSession() const = 0;
     virtual bool isClosed() const = 0;
+    virtual Address getAddress() const = 0;
 };
 }} // namespace qpid::messaging
 

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Sender.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Sender.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Sender.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/Sender.cpp Wed Mar 27 21:58:51 2013
@@ -19,6 +19,7 @@
  *
  */
 #include "qpid/messaging/Sender.h"
+#include "qpid/messaging/Address.h"
 #include "qpid/messaging/Message.h"
 #include "qpid/messaging/SenderImpl.h"
 #include "qpid/messaging/Session.h"
@@ -40,5 +41,5 @@ uint32_t Sender::getUnsettled() { return
 uint32_t Sender::getAvailable() { return getCapacity() - getUnsettled(); }
 const std::string& Sender::getName() const { return impl->getName(); }
 Session Sender::getSession() const { return impl->getSession(); }
-
+Address Sender::getAddress() const { return impl->getAddress(); }
 }} // namespace qpid::messaging

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/SenderImpl.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/SenderImpl.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/SenderImpl.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/SenderImpl.h Wed Mar 27 21:58:51 2013
@@ -27,6 +27,7 @@
 namespace qpid {
 namespace messaging {
 
+class Address;
 class Message;
 class Session;
 
@@ -41,6 +42,7 @@ class SenderImpl : public virtual qpid::
     virtual uint32_t getUnsettled() = 0;
     virtual const std::string& getName() const = 0;
     virtual Session getSession() const = 0;
+    virtual Address getAddress() const = 0;
   private:
 };
 }} // namespace qpid::messaging

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.cpp Wed Mar 27 21:58:51 2013
@@ -20,6 +20,7 @@
  */
 #include "qpid/messaging/amqp/AddressHelper.h"
 #include "qpid/messaging/Address.h"
+#include "qpid/log/Statement.h"
 #include <vector>
 #include <boost/assign.hpp>
 extern "C" {
@@ -56,7 +57,9 @@ const std::string MOVE("move");
 const std::string COPY("copy");
 
 const std::string SUPPORTED_DIST_MODES("supported-dist-modes");
+const std::string CREATE_ON_DEMAND("create-on-demand");
 
+const std::string DUMMY(".");
 
 const std::vector<std::string> RECEIVER_MODES = boost::assign::list_of<std::string>(ALWAYS) (RECEIVER);
 const std::vector<std::string> SENDER_MODES = boost::assign::list_of<std::string>(ALWAYS) (SENDER);
@@ -155,26 +158,33 @@ const qpid::types::Variant::Map& Address
     return link;
 }
 
-void AddressHelper::setNodeProperties(pn_terminus_t* terminus)
+void AddressHelper::setNodeProperties(pn_terminus_t* terminus, bool dynamic)
 {
-    pn_terminus_set_dynamic(terminus, true);
+    if (dynamic) {
+        pn_terminus_set_address(terminus, DUMMY.c_str());//Workaround for proton bug
+        pn_terminus_set_dynamic(terminus, true);
+    } else {
+        pn_data_t* capabilities = pn_terminus_capabilities(terminus);
+        if (!capabilities) {
+            QPID_LOG(error, "!!!No capabilities!!!");
+        }
+        pn_data_put_symbol(capabilities, convert(CREATE_ON_DEMAND));
+    }
 
     //properties for dynamically created node:
-    pn_data_t* data = pn_terminus_properties(terminus);
     if (node.size()) {
+        pn_data_t* data = pn_terminus_properties(terminus);
         pn_data_put_map(data);
         pn_data_enter(data);
-    }
-    for (qpid::types::Variant::Map::const_iterator i = node.begin(); i != node.end(); ++i) {
-        if (i->first == TYPE) {
-            pn_data_put_symbol(data, convert(SUPPORTED_DIST_MODES));
-            pn_data_put_string(data, convert(i->second == TOPIC ? COPY : MOVE));
-        } else {
-            pn_data_put_symbol(data, convert(i->first));
-            pn_data_put_string(data, convert(i->second.asString()));
+        for (qpid::types::Variant::Map::const_iterator i = node.begin(); i != node.end(); ++i) {
+            if (i->first == TYPE) {
+                pn_data_put_symbol(data, convert(SUPPORTED_DIST_MODES));
+                pn_data_put_string(data, convert(i->second == TOPIC ? COPY : MOVE));
+            } else {
+                pn_data_put_symbol(data, convert(i->first));
+                pn_data_put_string(data, convert(i->second.asString()));
+            }
         }
-    }
-    if (node.size()) {
         pn_data_exit(data);
     }
 }

Modified: qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h?rev=1461870&r1=1461869&r2=1461870&view=diff
==============================================================================
--- qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h (original)
+++ qpid/branches/QPID-4659/qpid/cpp/src/qpid/messaging/amqp/AddressHelper.h Wed Mar 27 21:58:51 2013
@@ -40,7 +40,7 @@ class AddressHelper
     bool deleteEnabled(CheckMode mode) const;
     bool assertEnabled(CheckMode mode) const;
 
-    void setNodeProperties(pn_terminus_t*);
+    void setNodeProperties(pn_terminus_t*, bool dynamic);
     const qpid::types::Variant::Map& getNodeProperties() const;
     const qpid::types::Variant::Map& getLinkProperties() const;
   private:
@@ -49,6 +49,7 @@ class AddressHelper
     std::string deletePolicy;
     qpid::types::Variant::Map node;
     qpid::types::Variant::Map link;
+    std::string name;
 
     bool enabled(const std::string& policy, CheckMode mode) const;
 };



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org