qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ai...@apache.org
Subject svn commit: r812936 [3/6] - in /qpid/branches/java-network-refactor: ./ qpid/buildtools/buildCreator/ qpid/cpp/ qpid/cpp/bindings/qmf/ qpid/cpp/bindings/qmf/python/ qpid/cpp/bindings/qmf/python/qmf/ qpid/cpp/bindings/qmf/ruby/ qpid/cpp/bindings/qmf/tes...
Date Wed, 09 Sep 2009 13:05:52 GMT
Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qmf/ResilientConnection.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qmf/ResilientConnection.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qmf/ResilientConnection.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qmf/ResilientConnection.cpp Wed Sep  9 13:05:43 2009
@@ -19,6 +19,8 @@
 
 #include "qmf/ResilientConnection.h"
 #include "qmf/MessageImpl.h"
+#include "qmf/ConnectionSettingsImpl.h"
+#include <qpid/client/Connection.h>
 #include <qpid/client/Session.h>
 #include <qpid/client/MessageListener.h>
 #include <qpid/client/SubscriptionManager.h>
@@ -39,7 +41,7 @@
 
 using namespace std;
 using namespace qmf;
-using namespace qpid::client;
+using namespace qpid;
 using qpid::sys::Mutex;
 
 namespace qmf {
@@ -55,30 +57,29 @@
         ResilientConnectionEvent copy();
     };
 
-    struct RCSession : public MessageListener, public qpid::sys::Runnable, public qpid::RefCounted {
+    struct RCSession : public client::MessageListener, public qpid::sys::Runnable, public qpid::RefCounted {
         typedef boost::intrusive_ptr<RCSession> Ptr;
         ResilientConnectionImpl& connImpl;
         string name;
-        Connection& connection;
-        Session session;
-        SubscriptionManager* subscriptions;
+        client::Connection& connection;
+        client::Session session;
+        client::SubscriptionManager* subscriptions;
         void* userContext;
         vector<string> dests;
         qpid::sys::Thread thread;
 
-        RCSession(ResilientConnectionImpl& ci, const string& n, Connection& c, void* uc) :
+        RCSession(ResilientConnectionImpl& ci, const string& n, client::Connection& c, void* uc) :
             connImpl(ci), name(n), connection(c), session(connection.newSession(name)),
-            subscriptions(new SubscriptionManager(session)), userContext(uc), thread(*this) {}
+            subscriptions(new client::SubscriptionManager(session)), userContext(uc), thread(*this) {}
         ~RCSession();
-        void received(qpid::client::Message& msg);
+        void received(client::Message& msg);
         void run();
         void stop();
     };
 
     class ResilientConnectionImpl : public qpid::sys::Runnable {
     public:
-        ResilientConnectionImpl(ConnectionSettings& settings,
-                                int dmin, int dmax, int dfactor);
+        ResilientConnectionImpl(const ConnectionSettings& settings);
         ~ResilientConnectionImpl();
 
         bool isConnected() const;
@@ -107,8 +108,8 @@
         bool connected;
         bool shutdown;
         string lastError;
-        ConnectionSettings settings;
-        Connection connection;
+        const ConnectionSettings settings;
+        client::Connection connection;
         mutable qpid::sys::Mutex lock;
         int delayMin;
         int delayMax;
@@ -155,7 +156,7 @@
     subscriptions->stop();
 }
 
-void RCSession::received(qpid::client::Message& msg)
+void RCSession::received(client::Message& msg)
 {
     qmf::MessageImpl qmsg;
     qmsg.body = msg.getData();
@@ -174,12 +175,11 @@
     connImpl.EnqueueEvent(ResilientConnectionEvent::RECV, userContext, qmsg);
 }
 
-ResilientConnectionImpl::ResilientConnectionImpl(ConnectionSettings& _settings,
-                                                 int dmin, int dmax, int dfactor) :
-    notifyFd(-1), connected(false), shutdown(false), settings(_settings), 
-    delayMin(dmin), delayMax(dmax), delayFactor(dfactor), connThread(*this)
+ResilientConnectionImpl::ResilientConnectionImpl(const ConnectionSettings& _settings) :
+    notifyFd(-1), connected(false), shutdown(false), settings(_settings), delayMin(1), connThread(*this)
 {
     connection.registerFailureCallback(boost::bind(&ResilientConnectionImpl::failure, this));
+    settings.impl->getRetrySettings(&delayMin, &delayMax, &delayFactor);
 }
 
 ResilientConnectionImpl::~ResilientConnectionImpl()
@@ -222,7 +222,7 @@
 
     RCSession::Ptr sess = RCSession::Ptr(new RCSession(*this, name, connection, sessionContext));
 
-    handle.handle = (void*) sess.get();
+    handle.impl = (void*) sess.get();
     sessions.insert(sess);
 
     return true;
@@ -231,7 +231,7 @@
 void ResilientConnectionImpl::destroySession(SessionHandle handle)
 {
     Mutex::ScopedLock _lock(lock);
-    RCSession::Ptr sess = RCSession::Ptr((RCSession*) handle.handle);
+    RCSession::Ptr sess = RCSession::Ptr((RCSession*) handle.impl);
     set<RCSession::Ptr>::iterator iter = sessions.find(sess);
     if (iter != sessions.end()) {
         for (vector<string>::iterator dIter = sess->dests.begin(); dIter != sess->dests.end(); dIter++)
@@ -247,7 +247,7 @@
 void ResilientConnectionImpl::sendMessage(SessionHandle handle, qmf::Message& message)
 {
     Mutex::ScopedLock _lock(lock);
-    RCSession::Ptr sess = RCSession::Ptr((RCSession*) handle.handle);
+    RCSession::Ptr sess = RCSession::Ptr((RCSession*) handle.impl);
     set<RCSession::Ptr>::iterator iter = sessions.find(sess);
     qpid::client::Message msg;
     string data(message.body, message.length);
@@ -256,7 +256,7 @@
     msg.setData(data);
 
     try {
-        sess->session.messageTransfer(arg::content=msg, arg::destination=message.destination);
+        sess->session.messageTransfer(client::arg::content=msg, client::arg::destination=message.destination);
     } catch(exception& e) {
         QPID_LOG(error, "Session Exception during message-transfer: " << e.what());
         sessions.erase(iter);
@@ -267,19 +267,22 @@
 void ResilientConnectionImpl::declareQueue(SessionHandle handle, char* queue)
 {
     Mutex::ScopedLock _lock(lock);
-    RCSession* sess = (RCSession*) handle.handle;
+    RCSession* sess = (RCSession*) handle.impl;
 
-    sess->session.queueDeclare(arg::queue=queue, arg::autoDelete=true, arg::exclusive=true);
+    sess->session.queueDeclare(client::arg::queue=queue, client::arg::autoDelete=true, client::arg::exclusive=true);
+	sess->subscriptions->setAcceptMode(client::ACCEPT_MODE_NONE);
+	sess->subscriptions->setAcquireMode(client::ACQUIRE_MODE_PRE_ACQUIRED);
     sess->subscriptions->subscribe(*sess, queue, queue);
+	sess->subscriptions->setFlowControl(queue, client::FlowControl::unlimited());
     sess->dests.push_back(string(queue));
 }
 
 void ResilientConnectionImpl::deleteQueue(SessionHandle handle, char* queue)
 {
     Mutex::ScopedLock _lock(lock);
-    RCSession* sess = (RCSession*) handle.handle;
+    RCSession* sess = (RCSession*) handle.impl;
 
-    sess->session.queueDelete(arg::queue=queue);
+    sess->session.queueDelete(client::arg::queue=queue);
     for (vector<string>::iterator iter = sess->dests.begin();
          iter != sess->dests.end(); iter++)
         if (*iter == queue) {
@@ -293,18 +296,18 @@
                                    char* exchange, char* queue, char* key)
 {
     Mutex::ScopedLock _lock(lock);
-    RCSession* sess = (RCSession*) handle.handle;
+    RCSession* sess = (RCSession*) handle.impl;
 
-    sess->session.exchangeBind(arg::exchange=exchange, arg::queue=queue, arg::bindingKey=key);
+    sess->session.exchangeBind(client::arg::exchange=exchange, client::arg::queue=queue, client::arg::bindingKey=key);
 }
 
 void ResilientConnectionImpl::unbind(SessionHandle handle,
                                      char* exchange, char* queue, char* key)
 {
     Mutex::ScopedLock _lock(lock);
-    RCSession* sess = (RCSession*) handle.handle;
+    RCSession* sess = (RCSession*) handle.impl;
 
-    sess->session.exchangeUnbind(arg::exchange=exchange, arg::queue=queue, arg::bindingKey=key);
+    sess->session.exchangeUnbind(client::arg::exchange=exchange, client::arg::queue=queue, client::arg::bindingKey=key);
 }
 
 void ResilientConnectionImpl::setNotifyFd(int fd)
@@ -318,7 +321,8 @@
 
     while (true) {
         try {
-            connection.open(settings);
+            QPID_LOG(trace, "Trying to open connection...");
+            connection.open(settings.impl->getClientSettings());
             {
                 Mutex::ScopedLock _lock(lock);
                 connected = true;
@@ -326,6 +330,7 @@
 
                 while (connected)
                     cond.wait(lock);
+                delay = delayMin;
 
                 while (!sessions.empty()) {
                     set<RCSession::Ptr>::iterator iter = sessions.begin();
@@ -334,6 +339,11 @@
                     EnqueueEvent(ResilientConnectionEvent::SESSION_CLOSED, sess->userContext);
                     Mutex::ScopedUnlock _u(lock);
                     sess->stop();
+
+                    // Nullify the intrusive pointer within the scoped unlock, otherwise,
+                    // the reference is held until overwritted above (under lock) which causes
+                    // the session destructor to be called with the lock held.
+                    sess = 0;
                 }
 
                 EnqueueEvent(ResilientConnectionEvent::DISCONNECTED);
@@ -341,7 +351,6 @@
                 if (shutdown)
                     return;
             }
-            delay = delayMin;
             connection.close();
         } catch (exception &e) {
             QPID_LOG(debug, "connection.open exception: " << e.what());
@@ -396,10 +405,9 @@
 // Wrappers
 //==================================================================
 
-ResilientConnection::ResilientConnection(ConnectionSettings& settings,
-                                         int delayMin, int delayMax, int delayFactor)
+ResilientConnection::ResilientConnection(const ConnectionSettings& settings)
 {
-    impl = new ResilientConnectionImpl(settings, delayMin, delayMax, delayFactor);
+    impl = new ResilientConnectionImpl(settings);
 }
 
 ResilientConnection::~ResilientConnection()

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qmf/ResilientConnection.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qmf/ResilientConnection.h?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qmf/ResilientConnection.h (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qmf/ResilientConnection.h Wed Sep  9 13:05:43 2009
@@ -21,12 +21,13 @@
  */
 
 #include <qmf/Message.h>
-#include <qpid/client/Connection.h>
-#include <qpid/client/ConnectionSettings.h>
+#include <qmf/ConnectionSettings.h>
 #include <string>
 
 namespace qmf {
 
+    class ResilientConnectionImpl;
+
     /**
      * Represents events that occur, unsolicited, from ResilientConnection.
      */
@@ -44,12 +45,11 @@
         Message   message;        // RECV
     };
 
-    struct SessionHandle {
-        void* handle;
+    class SessionHandle {
+        friend class ResilientConnectionImpl;
+        void* impl;
     };
 
-    class ResilientConnectionImpl;
-
     /**
      * ResilientConnection represents a Qpid connection that is resilient.
      *
@@ -68,10 +68,7 @@
          *@param delayMax Maximum delay (in seconds) between retries.
          *@param delayFactor Factor to multiply retry delay by after each failure.
          */
-        ResilientConnection(qpid::client::ConnectionSettings& settings,
-                            int delayMin = 1,
-                            int delayMax = 128,
-                            int delayFactor = 2);
+        ResilientConnection(const ConnectionSettings& settings);
         ~ResilientConnection();
 
         /**

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qmf/Schema.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qmf/Schema.h?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qmf/Schema.h (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qmf/Schema.h Wed Sep  9 13:05:43 2009
@@ -35,6 +35,7 @@
     struct SchemaStatisticImpl;
     struct SchemaObjectClassImpl;
     struct SchemaEventClassImpl;
+    struct SchemaClassKeyImpl;
 
     /**
      */
@@ -114,6 +115,20 @@
 
     /**
      */
+    class SchemaClassKey {
+    public:
+        SchemaClassKey(SchemaClassKeyImpl* impl);
+        ~SchemaClassKey();
+
+        const char* getPackageName() const;
+        const char* getClassName() const;
+        const uint8_t* getHash() const;
+
+        SchemaClassKeyImpl* impl;
+    };
+
+    /**
+     */
     class SchemaObjectClass {
     public:
         SchemaObjectClass(const char* package, const char* name);
@@ -123,9 +138,7 @@
         void addStatistic(const SchemaStatistic& statistic);
         void addMethod(const SchemaMethod& method);
 
-        const char* getPackage() const;
-        const char* getName() const;
-        const uint8_t* getHash() const;
+        const SchemaClassKey* getClassKey() const;
         int getPropertyCount() const;
         int getStatisticCount() const;
         int getMethodCount() const;
@@ -146,9 +159,7 @@
         void addArgument(const SchemaArgument& argument);
         void setDesc(const char* desc);
 
-        const char* getPackage() const;
-        const char* getName() const;
-        const uint8_t* getHash() const;
+        const SchemaClassKey* getClassKey() const;
         int getArgumentCount() const;
         const SchemaArgument* getArgument(int idx) const;
 

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qmf/SchemaImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qmf/SchemaImpl.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qmf/SchemaImpl.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qmf/SchemaImpl.cpp Wed Sep  9 13:05:43 2009
@@ -20,6 +20,8 @@
 #include "qmf/SchemaImpl.h"
 #include <qpid/framing/Buffer.h>
 #include <qpid/framing/FieldTable.h>
+#include <qpid/framing/Uuid.h>
+#include <string.h>
 #include <string>
 #include <vector>
 
@@ -27,6 +29,7 @@
 using namespace qmf;
 using qpid::framing::Buffer;
 using qpid::framing::FieldTable;
+using qpid::framing::Uuid;
 
 SchemaHash::SchemaHash()
 {
@@ -34,7 +37,7 @@
         hash[idx] = 0x5A;
 }
 
-void SchemaHash::encode(Buffer& buffer)
+void SchemaHash::encode(Buffer& buffer) const
 {
     buffer.putBin128(hash);
 }
@@ -63,6 +66,21 @@
     }
 }
 
+bool SchemaHash::operator==(const SchemaHash& other) const
+{
+    return ::memcmp(&hash, &other.hash, 16) == 0;
+}
+
+bool SchemaHash::operator<(const SchemaHash& other) const
+{
+    return ::memcmp(&hash, &other.hash, 16) < 0;
+}
+
+bool SchemaHash::operator>(const SchemaHash& other) const
+{
+    return ::memcmp(&hash, &other.hash, 16) > 0;
+}
+
 SchemaArgumentImpl::SchemaArgumentImpl(Buffer& buffer) : envelope(new SchemaArgument(this))
 {
     FieldTable map;
@@ -240,15 +258,51 @@
     hash.update(description);
 }
 
-SchemaObjectClassImpl::SchemaObjectClassImpl(Buffer& buffer) : envelope(new SchemaObjectClass(this)), hasHash(true)
+SchemaClassKeyImpl::SchemaClassKeyImpl(const string& p, const string& n, const SchemaHash& h) :
+    envelope(new SchemaClassKey(this)), package(p), name(n), hash(h) {}
+
+void SchemaClassKeyImpl::encode(qpid::framing::Buffer& buffer) const
+{
+    buffer.putShortString(package);
+    buffer.putShortString(name);
+    hash.encode(buffer);
+}
+
+bool SchemaClassKeyImpl::operator==(const SchemaClassKeyImpl& other) const
+{
+    return package == other.package &&
+        name == other.name &&
+        hash == other.hash;
+}
+
+bool SchemaClassKeyImpl::operator<(const SchemaClassKeyImpl& other) const
+{
+    if (package < other.package) return true;
+    if (package > other.package) return false;
+    if (name < other.name) return true;
+    if (name > other.name) return false;
+    return hash < other.hash;
+}
+
+string SchemaClassKeyImpl::str() const
+{
+    Uuid printableHash(hash.get());
+    stringstream str;
+    str << package << ":" << name << "(" << printableHash << ")";
+    return str.str();
+}
+
+SchemaObjectClassImpl::SchemaObjectClassImpl(Buffer& buffer) :
+    envelope(new SchemaObjectClass(this)), hasHash(true), classKey(package, name, hash)
 {
     buffer.getShortString(package);
     buffer.getShortString(name);
     hash.decode(buffer);
 
-    uint16_t propCount   = buffer.getShort();
-    uint16_t statCount   = buffer.getShort();
-    uint16_t methodCount = buffer.getShort();
+    /*uint8_t hasParentClass =*/ buffer.getOctet(); // TODO: Parse parent-class indicator
+    uint16_t propCount     = buffer.getShort();
+    uint16_t statCount     = buffer.getShort();
+    uint16_t methodCount   = buffer.getShort();
 
     for (uint16_t idx = 0; idx < propCount; idx++) {
         SchemaPropertyImpl* property = new SchemaPropertyImpl(buffer);
@@ -288,7 +342,7 @@
         (*iter)->encode(buffer);
 }
 
-const uint8_t* SchemaObjectClassImpl::getHash() const
+const SchemaClassKey* SchemaObjectClassImpl::getClassKey() const
 {
     if (!hasHash) {
         hasHash = true;
@@ -305,7 +359,7 @@
             (*iter)->updateHash(hash);
     }
 
-    return hash.get();
+    return classKey.envelope;
 }
 
 void SchemaObjectClassImpl::addProperty(const SchemaProperty& property)
@@ -353,7 +407,8 @@
     return 0;
 }
 
-SchemaEventClassImpl::SchemaEventClassImpl(Buffer& buffer) : envelope(new SchemaEventClass(this)), hasHash(true)
+SchemaEventClassImpl::SchemaEventClassImpl(Buffer& buffer) :
+    envelope(new SchemaEventClass(this)), hasHash(true), classKey(package, name, hash)
 {
     buffer.getShortString(package);
     buffer.getShortString(name);
@@ -380,7 +435,7 @@
         (*iter)->encode(buffer);
 }
 
-const uint8_t* SchemaEventClassImpl::getHash() const
+const SchemaClassKey* SchemaEventClassImpl::getClassKey() const
 {
     if (!hasHash) {
         hasHash = true;
@@ -390,7 +445,7 @@
              iter != arguments.end(); iter++)
             (*iter)->updateHash(hash);
     }
-    return hash.get();
+    return classKey.envelope;
 }
 
 void SchemaEventClassImpl::addArgument(const SchemaArgument& argument)
@@ -408,334 +463,79 @@
     return 0;
 }
 
+
 //==================================================================
 // Wrappers
 //==================================================================
 
-SchemaArgument::SchemaArgument(const char* name, Typecode typecode)
-{
-    impl = new SchemaArgumentImpl(this, name, typecode);
-}
-
+SchemaArgument::SchemaArgument(const char* name, Typecode typecode) { impl = new SchemaArgumentImpl(this, name, typecode); }
 SchemaArgument::SchemaArgument(SchemaArgumentImpl* i) : impl(i) {}
-
-SchemaArgument::~SchemaArgument()
-{
-    delete impl;
-}
-
-void SchemaArgument::setDirection(Direction dir)
-{
-    impl->setDirection(dir);
-}
-
-void SchemaArgument::setUnit(const char* val)
-{
-    impl->setUnit(val);
-}
-
-void SchemaArgument::setDesc(const char* desc)
-{
-    impl->setDesc(desc);
-}
-
-const char* SchemaArgument::getName() const
-{
-    return impl->getName().c_str();
-}
-
-Typecode SchemaArgument::getType() const
-{
-    return impl->getType();
-}
-
-Direction SchemaArgument::getDirection() const
-{
-    return impl->getDirection();
-}
-
-const char* SchemaArgument::getUnit() const
-{
-    return impl->getUnit().c_str();
-}
-
-const char* SchemaArgument::getDesc() const
-{
-    return impl->getDesc().c_str();
-}
-
-SchemaMethod::SchemaMethod(const char* name)
-{
-    impl = new SchemaMethodImpl(this, name);
-}
-
+SchemaArgument::~SchemaArgument() { delete impl; }
+void SchemaArgument::setDirection(Direction dir) { impl->setDirection(dir); }
+void SchemaArgument::setUnit(const char* val) { impl->setUnit(val); }
+void SchemaArgument::setDesc(const char* desc) { impl->setDesc(desc); }
+const char* SchemaArgument::getName() const { return impl->getName().c_str(); }
+Typecode SchemaArgument::getType() const { return impl->getType(); }
+Direction SchemaArgument::getDirection() const { return impl->getDirection(); }
+const char* SchemaArgument::getUnit() const { return impl->getUnit().c_str(); }
+const char* SchemaArgument::getDesc() const { return impl->getDesc().c_str(); }
+SchemaMethod::SchemaMethod(const char* name) { impl = new SchemaMethodImpl(this, name); }
 SchemaMethod::SchemaMethod(SchemaMethodImpl* i) : impl(i) {}
-
-SchemaMethod::~SchemaMethod()
-{
-    delete impl;
-}
-
-void SchemaMethod::addArgument(const SchemaArgument& argument)
-{
-    impl->addArgument(argument);
-}
-
-void SchemaMethod::setDesc(const char* desc)
-{
-    impl->setDesc(desc);
-}
-
-const char* SchemaMethod::getName() const
-{
-    return impl->getName().c_str();
-}
-
-const char* SchemaMethod::getDesc() const
-{
-    return impl->getDesc().c_str();
-}
-
-int SchemaMethod::getArgumentCount() const
-{
-    return impl->getArgumentCount();
-}
-
-const SchemaArgument* SchemaMethod::getArgument(int idx) const
-{
-    return impl->getArgument(idx);
-}
-
-SchemaProperty::SchemaProperty(const char* name, Typecode typecode)
-{
-    impl = new SchemaPropertyImpl(this, name, typecode);
-}
-
+SchemaMethod::~SchemaMethod() { delete impl; }
+void SchemaMethod::addArgument(const SchemaArgument& argument) { impl->addArgument(argument); }
+void SchemaMethod::setDesc(const char* desc) { impl->setDesc(desc); }
+const char* SchemaMethod::getName() const { return impl->getName().c_str(); }
+const char* SchemaMethod::getDesc() const { return impl->getDesc().c_str(); }
+int SchemaMethod::getArgumentCount() const { return impl->getArgumentCount(); }
+const SchemaArgument* SchemaMethod::getArgument(int idx) const { return impl->getArgument(idx); }
+SchemaProperty::SchemaProperty(const char* name, Typecode typecode) { impl = new SchemaPropertyImpl(this, name, typecode); }
 SchemaProperty::SchemaProperty(SchemaPropertyImpl* i) : impl(i) {}
-
-SchemaProperty::~SchemaProperty()
-{
-    delete impl;
-}
-
-void SchemaProperty::setAccess(Access access)
-{
-    impl->setAccess(access);
-}
-
-void SchemaProperty::setIndex(bool val)
-{
-    impl->setIndex(val);
-}
-
-void SchemaProperty::setOptional(bool val)
-{
-    impl->setOptional(val);
-}
-
-void SchemaProperty::setUnit(const char* val)
-{
-    impl->setUnit(val);
-}
-
-void SchemaProperty::setDesc(const char* desc)
-{
-    impl->setDesc(desc);
-}
-
-const char* SchemaProperty::getName() const
-{
-    return impl->getName().c_str();
-}
-
-Typecode SchemaProperty::getType() const
-{
-    return impl->getType();
-}
-
-Access SchemaProperty::getAccess() const
-{
-    return impl->getAccess();
-}
-
-bool SchemaProperty::isIndex() const
-{
-    return impl->isIndex();
-}
-
-bool SchemaProperty::isOptional() const
-{
-    return impl->isOptional();
-}
-
-const char* SchemaProperty::getUnit() const
-{
-    return impl->getUnit().c_str();
-}
-
-const char* SchemaProperty::getDesc() const
-{
-    return impl->getDesc().c_str();
-}
-
-SchemaStatistic::SchemaStatistic(const char* name, Typecode typecode)
-{
-    impl = new SchemaStatisticImpl(this, name, typecode);
-}
-
+SchemaProperty::~SchemaProperty() { delete impl; }
+void SchemaProperty::setAccess(Access access) { impl->setAccess(access); }
+void SchemaProperty::setIndex(bool val) { impl->setIndex(val); }
+void SchemaProperty::setOptional(bool val) { impl->setOptional(val); }
+void SchemaProperty::setUnit(const char* val) { impl->setUnit(val); }
+void SchemaProperty::setDesc(const char* desc) { impl->setDesc(desc); }
+const char* SchemaProperty::getName() const { return impl->getName().c_str(); }
+Typecode SchemaProperty::getType() const { return impl->getType(); }
+Access SchemaProperty::getAccess() const { return impl->getAccess(); }
+bool SchemaProperty::isIndex() const { return impl->isIndex(); }
+bool SchemaProperty::isOptional() const { return impl->isOptional(); }
+const char* SchemaProperty::getUnit() const { return impl->getUnit().c_str(); }
+const char* SchemaProperty::getDesc() const { return impl->getDesc().c_str(); }
+SchemaStatistic::SchemaStatistic(const char* name, Typecode typecode) { impl = new SchemaStatisticImpl(this, name, typecode); }
 SchemaStatistic::SchemaStatistic(SchemaStatisticImpl* i) : impl(i) {}
-
-SchemaStatistic::~SchemaStatistic()
-{
-    delete impl;
-}
-
-void SchemaStatistic::setUnit(const char* val)
-{
-    impl->setUnit(val);
-}
-
-void SchemaStatistic::setDesc(const char* desc)
-{
-    impl->setDesc(desc);
-}
-
-const char* SchemaStatistic::getName() const
-{
-    return impl->getName().c_str();
-}
-
-Typecode SchemaStatistic::getType() const
-{
-    return impl->getType();
-}
-
-const char* SchemaStatistic::getUnit() const
-{
-    return impl->getUnit().c_str();
-}
-
-const char* SchemaStatistic::getDesc() const
-{
-    return impl->getDesc().c_str();
-}
-
-SchemaObjectClass::SchemaObjectClass(const char* package, const char* name)
-{
-    impl = new SchemaObjectClassImpl(this, package, name);
-}
-
+SchemaStatistic::~SchemaStatistic() { delete impl; }
+void SchemaStatistic::setUnit(const char* val) { impl->setUnit(val); }
+void SchemaStatistic::setDesc(const char* desc) { impl->setDesc(desc); }
+const char* SchemaStatistic::getName() const { return impl->getName().c_str(); }
+Typecode SchemaStatistic::getType() const { return impl->getType(); }
+const char* SchemaStatistic::getUnit() const { return impl->getUnit().c_str(); }
+const char* SchemaStatistic::getDesc() const { return impl->getDesc().c_str(); }
+SchemaClassKey::SchemaClassKey(SchemaClassKeyImpl* i) : impl(i) {}
+SchemaClassKey::~SchemaClassKey() { delete impl; }
+const char* SchemaClassKey::getPackageName() const { return impl->getPackageName().c_str(); }
+const char* SchemaClassKey::getClassName() const { return impl->getClassName().c_str(); }
+const uint8_t* SchemaClassKey::getHash() const { return impl->getHash(); }
+SchemaObjectClass::SchemaObjectClass(const char* package, const char* name) { impl = new SchemaObjectClassImpl(this, package, name); }
 SchemaObjectClass::SchemaObjectClass(SchemaObjectClassImpl* i) : impl(i) {}
-
-SchemaObjectClass::~SchemaObjectClass()
-{
-    delete impl;
-}
-
-void SchemaObjectClass::addProperty(const SchemaProperty& property)
-{
-    impl->addProperty(property);
-}
-
-void SchemaObjectClass::addStatistic(const SchemaStatistic& statistic)
-{
-    impl->addStatistic(statistic);
-}
-
-void SchemaObjectClass::addMethod(const SchemaMethod& method)
-{
-    impl->addMethod(method);
-}
-
-const char* SchemaObjectClass::getPackage() const
-{
-    return impl->getPackage().c_str();
-}
-
-const char* SchemaObjectClass::getName() const
-{
-    return impl->getName().c_str();
-}
-
-const uint8_t* SchemaObjectClass::getHash() const
-{
-    return impl->getHash();
-}
-
-int SchemaObjectClass::getPropertyCount() const
-{
-    return impl->getPropertyCount();
-}
-
-int SchemaObjectClass::getStatisticCount() const
-{
-    return impl->getStatisticCount();
-}
-
-int SchemaObjectClass::getMethodCount() const
-{
-    return impl->getMethodCount();
-}
-
-const SchemaProperty* SchemaObjectClass::getProperty(int idx) const
-{
-    return impl->getProperty(idx);
-}
-
-const SchemaStatistic* SchemaObjectClass::getStatistic(int idx) const
-{
-    return impl->getStatistic(idx);
-}
-
-const SchemaMethod* SchemaObjectClass::getMethod(int idx) const
-{
-    return impl->getMethod(idx);
-}
-
-SchemaEventClass::SchemaEventClass(const char* package, const char* name)
-{
-    impl = new SchemaEventClassImpl(this, package, name);
-}
-
+SchemaObjectClass::~SchemaObjectClass() { delete impl; }
+void SchemaObjectClass::addProperty(const SchemaProperty& property) { impl->addProperty(property); }
+void SchemaObjectClass::addStatistic(const SchemaStatistic& statistic) { impl->addStatistic(statistic); }
+void SchemaObjectClass::addMethod(const SchemaMethod& method) { impl->addMethod(method); }
+const SchemaClassKey* SchemaObjectClass::getClassKey() const { return impl->getClassKey(); }
+int SchemaObjectClass::getPropertyCount() const { return impl->getPropertyCount(); }
+int SchemaObjectClass::getStatisticCount() const { return impl->getStatisticCount(); }
+int SchemaObjectClass::getMethodCount() const { return impl->getMethodCount(); }
+const SchemaProperty* SchemaObjectClass::getProperty(int idx) const { return impl->getProperty(idx); }
+const SchemaStatistic* SchemaObjectClass::getStatistic(int idx) const { return impl->getStatistic(idx); }
+const SchemaMethod* SchemaObjectClass::getMethod(int idx) const { return impl->getMethod(idx); }
+SchemaEventClass::SchemaEventClass(const char* package, const char* name) { impl = new SchemaEventClassImpl(this, package, name); }
 SchemaEventClass::SchemaEventClass(SchemaEventClassImpl* i) : impl(i) {}
-
-SchemaEventClass::~SchemaEventClass()
-{
-    delete impl;
-}
-
-void SchemaEventClass::addArgument(const SchemaArgument& argument)
-{
-    impl->addArgument(argument);
-}
-
-void SchemaEventClass::setDesc(const char* desc)
-{
-    impl->setDesc(desc);
-}
-
-const char* SchemaEventClass::getPackage() const
-{
-    return impl->getPackage().c_str();
-}
-
-const char* SchemaEventClass::getName() const
-{
-    return impl->getName().c_str();
-}
-
-const uint8_t* SchemaEventClass::getHash() const
-{
-    return impl->getHash();
-}
-
-int SchemaEventClass::getArgumentCount() const
-{
-    return impl->getArgumentCount();
-}
-
-const SchemaArgument* SchemaEventClass::getArgument(int idx) const
-{
-    return impl->getArgument(idx);
-}
+SchemaEventClass::~SchemaEventClass() { delete impl; }
+void SchemaEventClass::addArgument(const SchemaArgument& argument) { impl->addArgument(argument); }
+void SchemaEventClass::setDesc(const char* desc) { impl->setDesc(desc); }
+const SchemaClassKey* SchemaEventClass::getClassKey() const { return impl->getClassKey(); }
+int SchemaEventClass::getArgumentCount() const { return impl->getArgumentCount(); }
+const SchemaArgument* SchemaEventClass::getArgument(int idx) const { return impl->getArgument(idx); }
 

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qmf/SchemaImpl.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qmf/SchemaImpl.h?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qmf/SchemaImpl.h (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qmf/SchemaImpl.h Wed Sep  9 13:05:43 2009
@@ -21,6 +21,7 @@
  */
 
 #include "qmf/Schema.h"
+#include <boost/shared_ptr.hpp>
 #include <string>
 #include <vector>
 #include <qpid/framing/Buffer.h>
@@ -35,7 +36,7 @@
         uint8_t hash[16];
     public:
         SchemaHash();
-        void encode(qpid::framing::Buffer& buffer);
+        void encode(qpid::framing::Buffer& buffer) const;
         void decode(qpid::framing::Buffer& buffer);
         void update(const char* data, uint32_t len);
         void update(uint8_t data);
@@ -45,6 +46,9 @@
         void update(Access a) { update((uint8_t) a); }
         void update(bool b) { update((uint8_t) (b ? 1 : 0)); }
         const uint8_t* get() const { return hash; }
+        bool operator==(const SchemaHash& other) const;
+        bool operator<(const SchemaHash& other) const;
+        bool operator>(const SchemaHash& other) const;
     };
 
     struct SchemaArgumentImpl {
@@ -138,27 +142,45 @@
         void updateHash(SchemaHash& hash) const;
     };
 
+    struct SchemaClassKeyImpl {
+        const SchemaClassKey* envelope;
+        const std::string& package;
+        const std::string& name;
+        const SchemaHash& hash;
+
+        SchemaClassKeyImpl(const std::string& package, const std::string& name, const SchemaHash& hash);
+
+        const std::string& getPackageName() const { return package; }
+        const std::string& getClassName() const { return name; }
+        const uint8_t* getHash() const { return hash.get(); }
+
+        void encode(qpid::framing::Buffer& buffer) const;
+        bool operator==(const SchemaClassKeyImpl& other) const;
+        bool operator<(const SchemaClassKeyImpl& other) const;
+        std::string str() const;
+    };
+
     struct SchemaObjectClassImpl {
+        typedef boost::shared_ptr<SchemaObjectClassImpl> Ptr;
         SchemaObjectClass* envelope;
         std::string package;
         std::string name;
         mutable SchemaHash hash;
         mutable bool hasHash;
+        SchemaClassKeyImpl classKey;
         std::vector<SchemaPropertyImpl*> properties;
         std::vector<SchemaStatisticImpl*> statistics;
         std::vector<SchemaMethodImpl*> methods;
 
         SchemaObjectClassImpl(SchemaObjectClass* e, const char* p, const char* n) :
-            envelope(e), package(p), name(n), hasHash(false) {}
+        envelope(e), package(p), name(n), hasHash(false), classKey(package, name, hash) {}
         SchemaObjectClassImpl(qpid::framing::Buffer& buffer);
         void encode(qpid::framing::Buffer& buffer) const;
         void addProperty(const SchemaProperty& property);
         void addStatistic(const SchemaStatistic& statistic);
         void addMethod(const SchemaMethod& method);
 
-        const std::string& getPackage() const { return package; }
-        const std::string& getName() const { return name; }
-        const uint8_t* getHash() const;
+        const SchemaClassKey* getClassKey() const;
         int getPropertyCount() const { return properties.size(); }
         int getStatisticCount() const { return statistics.size(); }
         int getMethodCount() const { return methods.size(); }
@@ -168,24 +190,24 @@
     };
 
     struct SchemaEventClassImpl {
+        typedef boost::shared_ptr<SchemaEventClassImpl> Ptr;
         SchemaEventClass* envelope;
         std::string package;
         std::string name;
         mutable SchemaHash hash;
         mutable bool hasHash;
+        SchemaClassKeyImpl classKey;
         std::string description;
         std::vector<SchemaArgumentImpl*> arguments;
 
         SchemaEventClassImpl(SchemaEventClass* e, const char* p, const char* n) :
-            envelope(e), package(p), name(n), hasHash(false) {}
+            envelope(e), package(p), name(n), hasHash(false), classKey(package, name, hash) {}
         SchemaEventClassImpl(qpid::framing::Buffer& buffer);
         void encode(qpid::framing::Buffer& buffer) const;
         void addArgument(const SchemaArgument& argument);
         void setDesc(const char* desc) { description = desc; }
 
-        const std::string& getPackage() const { return package; }
-        const std::string& getName() const { return name; }
-        const uint8_t* getHash() const;
+        const SchemaClassKey* getClassKey() const;
         int getArgumentCount() const { return arguments.size(); }
         const SchemaArgument* getArgument(int idx) const;
     };

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qmf/Value.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qmf/Value.h?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qmf/Value.h (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qmf/Value.h Wed Sep  9 13:05:43 2009
@@ -30,7 +30,7 @@
 
     class Value {
     public:
-        Value();
+        //        Value();
         Value(Typecode t, Typecode arrayType = TYPE_UINT8);
         Value(ValueImpl* impl);
         ~Value();

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/agent/ManagementAgentImpl.cpp Wed Sep  9 13:05:43 2009
@@ -435,8 +435,8 @@
     } else {
         if ((iter->second->getPackageName() != packageName) ||
             (iter->second->getClassName()   != className)) {
-            outBuffer.putLong        (Manageable::STATUS_INVALID_PARAMETER);
-            outBuffer.putMediumString(Manageable::StatusText (Manageable::STATUS_INVALID_PARAMETER));
+            outBuffer.putLong        (Manageable::STATUS_PARAMETER_INVALID);
+            outBuffer.putMediumString(Manageable::StatusText (Manageable::STATUS_PARAMETER_INVALID));
         }
         else
             try {

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Broker.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Broker.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Broker.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Broker.cpp Wed Sep  9 13:05:43 2009
@@ -386,7 +386,7 @@
 	if (queueMoveMessages(moveArgs.i_srcQueue, moveArgs.i_destQueue, moveArgs.i_qty))
             status = Manageable::STATUS_OK;
 	else
-            return Manageable::STATUS_INVALID_PARAMETER;
+            return Manageable::STATUS_PARAMETER_INVALID;
         break;
       }
    default:

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Connection.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Connection.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Connection.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Connection.cpp Wed Sep  9 13:05:43 2009
@@ -269,11 +269,13 @@
                 cb(); // Lend the IO thread for management processing
             }
         }
-        if (mgmtClosing)
+        if (mgmtClosing) {
+            closed();
             close(connection::CLOSE_CODE_CONNECTION_FORCED, "Closed by Management Request");
-        else
+        } else {
             //then do other output as needed:
             return outputTasks.doOutput();
+	}
     }catch(ConnectionException& e){
         close(e.code, e.getMessage());
     }catch(std::exception& e){

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Daemon.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Daemon.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Daemon.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Daemon.cpp Wed Sep  9 13:05:43 2009
@@ -85,7 +85,7 @@
             child();
         }
         catch (const exception& e) {
-            QPID_LOG(critical, "Daemon startup failed: " << e.what());
+            QPID_LOG(critical, "Unexpected error: " << e.what());
             uint16_t port = 0;
             int unused_ret;    //Supress warning about ignoring return value.
             unused_ret = write(pipeFds[1], &port, sizeof(uint16_t));

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Exchange.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Exchange.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Exchange.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Exchange.cpp Wed Sep  9 13:05:43 2009
@@ -91,7 +91,9 @@
         ManagementAgent* agent = broker->getManagementAgent();
         if (agent != 0)
         {
-            mgmtExchange = new _qmf::Exchange (agent, this, parent, _name, durable);
+            mgmtExchange = new _qmf::Exchange (agent, this, parent, _name);
+            mgmtExchange->set_durable(durable);
+            mgmtExchange->set_autoDelete(false);
             agent->addObject (mgmtExchange);
         }
     }
@@ -109,7 +111,9 @@
         ManagementAgent* agent = broker->getManagementAgent();
         if (agent != 0)
         {
-            mgmtExchange = new _qmf::Exchange (agent, this, parent, _name, durable);
+            mgmtExchange = new _qmf::Exchange (agent, this, parent, _name);
+            mgmtExchange->set_durable(durable);
+            mgmtExchange->set_autoDelete(false);
             mgmtExchange->set_arguments(args);
             if (!durable) {
                 if (name.empty()) {
@@ -139,6 +143,17 @@
         mgmtExchange->resourceDestroy ();
 }
 
+void Exchange::setAlternate(Exchange::shared_ptr _alternate)
+{
+    alternate = _alternate;
+    if (mgmtExchange != 0) {
+        if (alternate.get() != 0)
+            mgmtExchange->set_altExchange(alternate->GetManagementObject()->getObjectId());
+        else
+            mgmtExchange->clr_altExchange();
+    }
+}
+
 void Exchange::setPersistenceId(uint64_t id) const
 {
     if (mgmtExchange != 0 && persistenceId == 0)

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Exchange.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Exchange.h?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Exchange.h (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Exchange.h Wed Sep  9 13:05:43 2009
@@ -132,7 +132,7 @@
     qpid::framing::FieldTable& getArgs() { return args; }
 
     Exchange::shared_ptr getAlternate() { return alternate; }
-    void setAlternate(Exchange::shared_ptr _alternate) { alternate = _alternate; }
+    void setAlternate(Exchange::shared_ptr _alternate);
     void incAlternateUsers() { alternateUsers++; }
     void decAlternateUsers() { alternateUsers--; }
     bool inUseAsAlternate() { return alternateUsers > 0; }

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Link.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Link.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Link.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/Link.cpp Wed Sep  9 13:05:43 2009
@@ -200,8 +200,10 @@
 
         // Move the bridges to be deleted into a local vector so there is no
         // corruption of the iterator caused by bridge deletion.
-        for (Bridges::iterator i = active.begin(); i != active.end(); i++)
+        for (Bridges::iterator i = active.begin(); i != active.end(); i++) {
+            (*i)->closed();
             toDelete.push_back(*i);
+        }
         active.clear();
 
         for (Bridges::iterator i = created.begin(); i != created.end(); i++)
@@ -264,7 +266,6 @@
     }
     if (!cancellations.empty()) {
         for (Bridges::iterator i = cancellations.begin(); i != cancellations.end(); ++i) {
-            active.push_back(*i);
             (*i)->cancel(*connection);
         }
         cancellations.clear();

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/SessionAdapter.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/SessionAdapter.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/SessionAdapter.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/broker/SessionAdapter.cpp Wed Sep  9 13:05:43 2009
@@ -121,9 +121,11 @@
 
 void SessionAdapter::ExchangeHandlerImpl::checkAlternate(Exchange::shared_ptr exchange, Exchange::shared_ptr alternate)
 {
-    if (alternate && alternate != exchange->getAlternate()) 
+    if (alternate && ((exchange->getAlternate() && alternate != exchange->getAlternate())
+                      || !exchange->getAlternate()))
         throw NotAllowedException(QPID_MSG("Exchange declared with alternate-exchange "
-                                           << exchange->getAlternate()->getName() << ", requested " 
+                                           << (exchange->getAlternate() ? exchange->getAlternate()->getName() : "<nonexistent>")
+                                           << ", requested " 
                                            << alternate->getName()));
 }
                 

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/Demux.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/Demux.h?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/Demux.h (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/Demux.h Wed Sep  9 13:05:43 2009
@@ -25,6 +25,7 @@
 #include "qpid/framing/FrameSet.h"
 #include "qpid/sys/Mutex.h"
 #include "qpid/sys/BlockingQueue.h"
+#include "qpid/client/ClientImportExport.h"
 
 #ifndef _Demux_
 #define _Demux_
@@ -49,17 +50,17 @@
     typedef sys::BlockingQueue<framing::FrameSet::shared_ptr> Queue;
     typedef boost::shared_ptr<Queue> QueuePtr;
 
-    Demux();
-    ~Demux();
+    QPID_CLIENT_EXTERN Demux();
+    QPID_CLIENT_EXTERN ~Demux();
     
-    void handle(framing::FrameSet::shared_ptr);
-    void close(const sys::ExceptionHolder& ex);
-    void open();
-
-    QueuePtr add(const std::string& name, Condition);
-    void remove(const std::string& name);
-    QueuePtr get(const std::string& name);
-    QueuePtr getDefault();
+    QPID_CLIENT_EXTERN void handle(framing::FrameSet::shared_ptr);
+    QPID_CLIENT_EXTERN void close(const sys::ExceptionHolder& ex);
+    QPID_CLIENT_EXTERN void open();
+
+    QPID_CLIENT_EXTERN QueuePtr add(const std::string& name, Condition);
+    QPID_CLIENT_EXTERN void remove(const std::string& name);
+    QPID_CLIENT_EXTERN QueuePtr get(const std::string& name);
+    QPID_CLIENT_EXTERN QueuePtr getDefault();
 
 private:
     struct Record

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/Results.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/Results.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/Results.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/Results.cpp Wed Sep  9 13:05:43 2009
@@ -24,7 +24,6 @@
 #include "qpid/framing/SequenceSet.h"
 
 using namespace qpid::framing;
-using namespace boost;
 
 namespace qpid {
 namespace client {

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/SessionImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/SessionImpl.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/SessionImpl.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/SessionImpl.cpp Wed Sep  9 13:05:43 2009
@@ -202,6 +202,16 @@
     return f.result;
 }
 
+framing::SequenceNumber SessionImpl::getCompleteUpTo()
+{
+    SequenceNumber firstIncomplete;
+    {
+        Lock l(state);
+        firstIncomplete = incompleteIn.front();
+    }
+    return --firstIncomplete;
+}
+
 struct MarkCompleted 
 {
     const SequenceNumber& id;
@@ -319,7 +329,7 @@
 
 }
     
-Future SessionImpl::send(const AMQBody& command, const FrameSet& content) {
+Future SessionImpl::send(const AMQBody& command, const FrameSet& content, bool reframe) {
     Acquire a(sendLock);
     SequenceNumber id = nextOut++;
     {
@@ -337,7 +347,7 @@
     frame.setEof(false);
     handleOut(frame);
 
-    if (content.isComplete()) {
+    if (reframe) {
         MethodContentAdaptor c(content);
         sendContent(c);
     } else {

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/SessionImpl.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/SessionImpl.h?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/SessionImpl.h (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/client/SessionImpl.h Wed Sep  9 13:05:43 2009
@@ -25,6 +25,7 @@
 #include "qpid/client/Demux.h"
 #include "qpid/client/Execution.h"
 #include "qpid/client/Results.h"
+#include "qpid/client/ClientImportExport.h"
 
 #include "qpid/SessionId.h"
 #include "qpid/SessionState.h"
@@ -86,7 +87,15 @@
 
     Future send(const framing::AMQBody& command);
     Future send(const framing::AMQBody& command, const framing::MethodContent& content);
-    Future send(const framing::AMQBody& command, const framing::FrameSet& content);
+    /**
+     * This method takes the content as a FrameSet; if reframe=false,
+     * the caller is resposnible for ensuring that the header and
+     * content frames in that set are correct for this connection
+     * (right flags, right fragmentation etc). If reframe=true, then
+     * the header and content from the frameset will be copied and
+     * reframed correctly for the connection.
+     */
+    QPID_CLIENT_EXTERN Future send(const framing::AMQBody& command, const framing::FrameSet& content, bool reframe=false);
     void sendRawFrame(framing::AMQFrame& frame);
 
     Demux& getDemux();
@@ -94,6 +103,7 @@
     void markCompleted(const framing::SequenceSet& ids, bool notifyPeer);
     bool isComplete(const framing::SequenceNumber& id);
     bool isCompleteUpTo(const framing::SequenceNumber& id);
+    framing::SequenceNumber getCompleteUpTo();
     void waitForCompletion(const framing::SequenceNumber& id);
     void sendCompletion();
     void sendFlush();

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/cluster/UpdateClient.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/cluster/UpdateClient.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/cluster/UpdateClient.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/cluster/UpdateClient.cpp Wed Sep  9 13:05:43 2009
@@ -213,7 +213,7 @@
         framing::MessageTransferBody transfer(
             framing::ProtocolVersion(), UpdateClient::UPDATE, message::ACCEPT_MODE_NONE, message::ACQUIRE_MODE_PRE_ACQUIRED);
         
-        sb.get()->send(transfer, message.payload->getFrames());
+        sb.get()->send(transfer, message.payload->getFrames(), !message.payload->isContentReleased());
         if (message.payload->isContentReleased()){
             uint16_t maxFrameSize = sb.get()->getConnection()->getNegotiatedSettings().maxFrameSize;
             uint16_t maxContentSize = maxFrameSize - AMQFrame::frameOverhead();

Propchange: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/cluster/UpdateClient.cpp
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -0,0 +1,2 @@
+/incubator/qpid/trunk/qpid/cpp/src/qpid/cluster/UpdateClient.cpp:520691-726139
+/qpid/trunk/qpid/cpp/src/qpid/cluster/UpdateClient.cpp:805429-812920

Propchange: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/cluster/UpdateClient.h
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -0,0 +1,2 @@
+/incubator/qpid/trunk/qpid/cpp/src/qpid/cluster/UpdateClient.h:520691-726139
+/qpid/trunk/qpid/cpp/src/qpid/cluster/UpdateClient.h:805429-812920

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/FieldTable.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/FieldTable.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/FieldTable.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/FieldTable.cpp Wed Sep  9 13:05:43 2009
@@ -185,13 +185,8 @@
 bool getRawFixedWidthValue(FieldTable::ValuePtr vptr, T& value) 
 {
     if (vptr && vptr->getType() == typecode) {
-        FixedWidthValue<width>* fwv = dynamic_cast< FixedWidthValue<width>* >(&vptr->getData());
-        if (fwv) {
-            uint8_t* const octets = Endian::convertIfRequired(fwv->rawOctets(), width);
-            uint8_t* const target = reinterpret_cast<uint8_t*>(&value);
-            for (uint i = 0; i < width; ++i) target[i] = octets[i];
-            return true;
-        }
+        value = vptr->get<T>();
+        return true;
     }
     return false;
 }
@@ -370,5 +365,16 @@
         values.erase(name);
 }
 
+std::pair<FieldTable::ValueMap::iterator, bool> FieldTable::insert(const ValueMap::value_type& value)
+{
+    return values.insert(value);
+}
+
+FieldTable::ValueMap::iterator FieldTable::insert(ValueMap::iterator position, const ValueMap::value_type& value)
+{
+    return values.insert(position, value);
+}
+
+
 }
 }

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/FieldValue.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/FieldValue.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/FieldValue.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/FieldValue.cpp Wed Sep  9 13:05:43 2009
@@ -22,6 +22,7 @@
 #include "qpid/framing/Array.h"
 #include "qpid/framing/Buffer.h"
 #include "qpid/framing/Endian.h"
+#include "qpid/framing/List.h"
 #include "qpid/framing/reply_exceptions.h"
 
 namespace qpid {
@@ -37,6 +38,8 @@
     typeOctet = type;
     if (typeOctet == 0xA8) {
         data.reset(new EncodedValue<FieldTable>());
+    } else if (typeOctet == 0xA9) {
+        data.reset(new EncodedValue<List>());
     } else if (typeOctet == 0xAA) {
         data.reset(new EncodedValue<Array>());
     } else {    
@@ -164,10 +167,37 @@
 {
 }
 
+ListValue::ListValue(const List& l) : FieldValue(0xa9, new EncodedValue<List>(l))
+{
+}
+
 ArrayValue::ArrayValue(const Array& a) : FieldValue(0xaa, new EncodedValue<Array>(a))
 {
 }
 
+VoidValue::VoidValue() : FieldValue(0xf0, new FixedWidthValue<0>()) {}
+
+BoolValue::BoolValue(bool b) :
+    FieldValue(0x08, new FixedWidthValue<1>(b))
+{}
+
+Unsigned8Value::Unsigned8Value(uint8_t v) :
+    FieldValue(0x02, new FixedWidthValue<1>(v))
+{}
+Unsigned16Value::Unsigned16Value(uint16_t v) :
+    FieldValue(0x12, new FixedWidthValue<2>(v))
+{}
+Unsigned32Value::Unsigned32Value(uint32_t v) :
+    FieldValue(0x22, new FixedWidthValue<4>(v))
+{}
+
+Integer8Value::Integer8Value(int8_t v) :
+    FieldValue(0x01, new FixedWidthValue<1>(v))
+{}
+Integer16Value::Integer16Value(int16_t v) :
+    FieldValue(0x11, new FixedWidthValue<2>(v))
+{}
+
 void FieldValue::print(std::ostream& out) const {
     data->print(out);
     out << TypeCode(typeOctet) << '(';
@@ -177,4 +207,9 @@
     out << ')';
 }
 
+uint8_t* FieldValue::convertIfRequired(uint8_t* const octets, int width)
+{
+    return Endian::convertIfRequired(octets, width);
+}
+
 }}

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/Uuid.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/Uuid.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/Uuid.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/framing/Uuid.cpp Wed Sep  9 13:05:43 2009
@@ -17,6 +17,8 @@
  */
 
 #include "qpid/framing/Uuid.h"
+
+#include "qpid/sys/uuid.h"
 #include "qpid/Exception.h"
 #include "qpid/framing/Buffer.h"
 #include "qpid/framing/reply_exceptions.h"
@@ -28,6 +30,35 @@
 
 static const size_t UNPARSED_SIZE=36; 
 
+Uuid::Uuid(bool unique) {
+    if (unique) {
+        generate();
+    } else {
+        clear();
+    }
+}
+
+Uuid::Uuid(const uint8_t* data) {
+    assign(data);
+}
+
+void Uuid::assign(const uint8_t* data) {
+    uuid_copy(c_array(), data);
+}
+
+void Uuid::generate() {
+    uuid_generate(c_array());
+}
+
+void Uuid::clear() {
+    uuid_clear(c_array());
+}
+
+// Force int 0/!0 to false/true; avoids compile warnings.
+bool Uuid::isNull() {
+    return !!uuid_is_null(data());
+}
+
 void Uuid::encode(Buffer& buf) const {
     buf.putRawData(data(), size());
 }

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/Manageable.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/Manageable.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/Manageable.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/Manageable.cpp Wed Sep  9 13:05:43 2009
@@ -33,7 +33,7 @@
     case STATUS_UNKNOWN_OBJECT          : return "UnknownObject";
     case STATUS_UNKNOWN_METHOD          : return "UnknownMethod";
     case STATUS_NOT_IMPLEMENTED         : return "NotImplemented";
-    case STATUS_INVALID_PARAMETER       : return "InvalidParameter";
+    case STATUS_PARAMETER_INVALID       : return "InvalidParameter";
     case STATUS_FEATURE_NOT_IMPLEMENTED : return "FeatureNotImplemented";
     case STATUS_FORBIDDEN               : return "Forbidden";
     }

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/ManagementAgent.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/ManagementAgent.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/ManagementAgent.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/ManagementAgent.cpp Wed Sep  9 13:05:43 2009
@@ -535,8 +535,8 @@
     } else {
         if ((iter->second->getPackageName() != packageName) ||
             (iter->second->getClassName()   != className)) {
-            outBuffer.putLong        (Manageable::STATUS_INVALID_PARAMETER);
-            outBuffer.putMediumString(Manageable::StatusText (Manageable::STATUS_INVALID_PARAMETER));
+            outBuffer.putLong        (Manageable::STATUS_PARAMETER_INVALID);
+            outBuffer.putMediumString(Manageable::StatusText (Manageable::STATUS_PARAMETER_INVALID));
         }
         else
             try {

Propchange: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/ManagementAgent.cpp
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -0,0 +1,2 @@
+/incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementAgent.cpp:520691-726139
+/qpid/trunk/qpid/cpp/src/qpid/management/ManagementAgent.cpp:805429-812920

Propchange: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/management/ManagementAgent.h
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -0,0 +1,2 @@
+/incubator/qpid/trunk/qpid/cpp/src/qpid/management/ManagementAgent.h:520691-726139
+/qpid/trunk/qpid/cpp/src/qpid/management/ManagementAgent.h:805429-812920

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/Timer.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/Timer.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/Timer.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/Timer.cpp Wed Sep  9 13:05:43 2009
@@ -84,6 +84,7 @@
     stop();
 }
 
+// TODO AStitcher 21/08/09 The threshholds for emitting warnings are a little arbitrary
 void Timer::run()
 {
     Monitor::ScopedLock l(monitor);
@@ -111,8 +112,8 @@
                 // Warn on callback overrun
                 AbsTime end(AbsTime::now());
                 Duration overrun(tasks.top()->nextFireTime, end);
-                bool late = delay > 1 * TIME_MSEC;
-                bool overran = overrun > 1 * TIME_MSEC;
+                bool late = delay > 10 * TIME_MSEC;
+                bool overran = overrun > 2 * TIME_MSEC;
                 if (late)
                 if (overran) {
                     QPID_LOG(warning,

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpid/sys/posix/AsynchIO.cpp Wed Sep  9 13:05:43 2009
@@ -305,6 +305,13 @@
      * thread processing this handle.
      */
     volatile bool writePending;
+    /**
+     * This records whether we've been reading is flow controlled:
+     * it's safe as a simple boolean as the only way to be stopped
+     * is in calls only allowed in the callback context, the only calls
+     * checking it are also in calls only allowed in callback context.
+     */
+    volatile bool readingStopped;
 };
 
 AsynchIO::AsynchIO(const Socket& s,
@@ -323,7 +330,8 @@
     idleCallback(iCb),
     socket(s),
     queuedClose(false),
-    writePending(false) {
+    writePending(false),
+    readingStopped(false) {
 
     s.setNonblocking();
 }
@@ -351,8 +359,11 @@
     assert(buff);
     buff->dataStart = 0;
     buff->dataCount = 0;
+
+    bool queueWasEmpty = bufferQueue.empty();
     bufferQueue.push_back(buff);
-    DispatchHandle::rewatchRead();
+    if (queueWasEmpty && !readingStopped)
+        DispatchHandle::rewatchRead();
 }
 
 void AsynchIO::unread(BufferBase* buff) {
@@ -361,15 +372,18 @@
         memmove(buff->bytes, buff->bytes+buff->dataStart, buff->dataCount);
         buff->dataStart = 0;
     }
+
+    bool queueWasEmpty = bufferQueue.empty();
     bufferQueue.push_front(buff);
-    DispatchHandle::rewatchRead();
+    if (queueWasEmpty && !readingStopped)
+        DispatchHandle::rewatchRead();
 }
 
 void AsynchIO::queueWrite(BufferBase* buff) {
     assert(buff);
     // If we've already closed the socket then throw the write away
     if (queuedClose) {
-        bufferQueue.push_front(buff);
+        queueReadBuffer(buff);
         return;
     } else {
         writeQueue.push_front(buff);
@@ -378,6 +392,7 @@
     DispatchHandle::rewatchWrite();
 }
 
+// This can happen outside the callback context
 void AsynchIO::notifyPendingWrite() {
     writePending = true;
     DispatchHandle::rewatchWrite();
@@ -392,11 +407,14 @@
     return writeQueue.empty();
 }
 
+// This can happen outside the callback context
 void AsynchIO::startReading() {
+    readingStopped = false;
     DispatchHandle::rewatchRead();
 }
 
 void AsynchIO::stopReading() {
+    readingStopped = true;
     DispatchHandle::unwatchRead();
 }
 

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/qpidd.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/qpidd.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/qpidd.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/qpidd.cpp Wed Sep  9 13:05:43 2009
@@ -77,7 +77,7 @@
         return broker.execute(options.get());
     }
     catch(const exception& e) {
-        QPID_LOG(critical, "Broker start-up failed: " << e.what());
+        QPID_LOG(critical, "Unexpected error: " << e.what());
     }
     return 1;
 }

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/tests/CMakeLists.txt
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/tests/CMakeLists.txt?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/tests/CMakeLists.txt (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/tests/CMakeLists.txt Wed Sep  9 13:05:43 2009
@@ -95,6 +95,7 @@
     InlineAllocator
     InlineVector
     ClientSessionTest
+    MessagingSessionTests
     SequenceSet
     StringUtils
     IncompleteMessageList
@@ -128,6 +129,7 @@
     ReplicationTest
     ClientMessageTest
     PollableCondition
+    Variant
     ${xml_tests}
     CACHE STRING "Which unit tests to build"
    )

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/tests/FieldTable.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/tests/FieldTable.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/tests/FieldTable.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/tests/FieldTable.cpp Wed Sep  9 13:05:43 2009
@@ -22,6 +22,7 @@
 #include "qpid/framing/Array.h"
 #include "qpid/framing/FieldTable.h"
 #include "qpid/framing/FieldValue.h"
+#include "qpid/framing/List.h"
 #include "qpid/sys/alloca.h"
 
 #include "unit_test.h"
@@ -86,7 +87,9 @@
 
 QPID_AUTO_TEST_CASE(testNestedValues)
 {
-    char buff[100];
+    double d = 1.2345;
+    uint32_t u = 101;
+    char buff[1000];
     {
         FieldTable a;
         FieldTable b;
@@ -94,11 +97,17 @@
         items.push_back("one");
         items.push_back("two");
         Array c(items);
+        List list;
+        list.push_back(List::ValuePtr(new Str16Value("red")));
+        list.push_back(List::ValuePtr(new Unsigned32Value(u)));
+        list.push_back(List::ValuePtr(new Str8Value("yellow")));
+        list.push_back(List::ValuePtr(new DoubleValue(d)));
         
         a.setString("id", "A");
         b.setString("id", "B");
         a.setTable("B", b);
         a.setArray("C", c);
+        a.set("my-list", FieldTable::ValuePtr(new ListValue(list)));
 
 
         Buffer wbuffer(buff, 100);
@@ -119,6 +128,27 @@
         BOOST_CHECK((uint) 2 == items.size());
         BOOST_CHECK(string("one") == items[0]);
         BOOST_CHECK(string("two") == items[1]);
+
+        List list;
+        BOOST_CHECK(a.get("my-list")->get<List>(list));
+        List::const_iterator i = list.begin();
+        BOOST_CHECK(i != list.end());
+        BOOST_CHECK_EQUAL(std::string("red"), (*i)->get<std::string>());
+
+        i++;
+        BOOST_CHECK(i != list.end());
+        BOOST_CHECK_EQUAL(u, (uint32_t) (*i)->get<int>());
+
+        i++;
+        BOOST_CHECK(i != list.end());
+        BOOST_CHECK_EQUAL(std::string("yellow"), (*i)->get<std::string>());
+
+        i++;
+        BOOST_CHECK(i != list.end());
+        BOOST_CHECK_EQUAL(d, (*i)->get<double>());
+
+        i++;
+        BOOST_CHECK(i == list.end());
     }
 }
 

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/tests/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/tests/Makefile.am?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/tests/Makefile.am (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/tests/Makefile.am Wed Sep  9 13:05:43 2009
@@ -65,6 +65,7 @@
 	$(lib_client) $(lib_broker) $(lib_console)
 
 unit_test_SOURCES= unit_test.cpp unit_test.h \
+	MessagingSessionTests.cpp \
 	ClientSessionTest.cpp \
 	BrokerFixture.h SocketProxy.h \
 	exception_test.cpp \
@@ -111,7 +112,8 @@
 	FrameDecoder.cpp \
 	ReplicationTest.cpp \
 	ClientMessageTest.cpp \
-	PollableCondition.cpp
+	PollableCondition.cpp \
+	Variant.cpp
 
 if HAVE_XML
 unit_test_SOURCES+= XmlClientSessionTest.cpp
@@ -268,6 +270,11 @@
 qrsh_SOURCES=qrsh.cpp
 qrsh_LDADD=$(lib_client)
 
+check_PROGRAMS+=qpid_stream
+qpid_stream_INCLUDES=$(PUBLIC_INCLUDES)
+qpid_stream_SOURCES=qpid_stream.cpp
+qpid_stream_LDADD=$(lib_client) 
+
 
 TESTS_ENVIRONMENT = \
     VALGRIND=$(VALGRIND) \

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/tests/cli_tests.py
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/tests/cli_tests.py?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/tests/cli_tests.py (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/tests/cli_tests.py Wed Sep  9 13:05:43 2009
@@ -123,6 +123,28 @@
                 found = True
         self.assertEqual(found, False)
 
+    def test_qpid_config_altex(self):
+        self.startQmf();
+        qmf = self.qmf
+        exName = "testalt"
+        altName = "amq.direct"
+
+        ret = os.system(self.command(" add exchange topic %s --alternate-exchange=%s" % (exName, altName)))
+        self.assertEqual(ret, 0)
+
+        exchanges = qmf.getObjects(_class="exchange")
+        found = False
+        for exchange in exchanges:
+            if exchange.name == altName:
+                self.assertEqual(exchange.altExchange, None)
+
+            if exchange.name == exName:
+                found = True
+                if not exchange.altExchange:
+                    self.fail("Alternate exchange not set")
+                self.assertEqual(exchange._altExchange_.name, altName)
+        self.assertEqual(found, True)
+
     def test_qpid_route(self):
         self.startQmf();
         qmf = self.qmf

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/tests/cluster_python_tests_failing.txt
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/tests/cluster_python_tests_failing.txt?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/tests/cluster_python_tests_failing.txt (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/tests/cluster_python_tests_failing.txt Wed Sep  9 13:05:43 2009
@@ -1,4 +1,5 @@
 tests_0-10.management.ManagementTest.test_purge_queue
+tests_0-10.management.ManagementTest.test_connection_close
 tests_0-10.dtx.DtxTests.test_bad_resume
 tests_0-10.dtx.DtxTests.test_commit_unknown
 tests_0-10.dtx.DtxTests.test_end

Propchange: qpid/branches/java-network-refactor/qpid/cpp/src/tests/cluster_tests.py
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -0,0 +1 @@
+/incubator/qpid/trunk/qpid/cpp/src/tests/cluster_tests.py:520691-726139

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/tests/federation.py
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/tests/federation.py?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/tests/federation.py (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/tests/federation.py Wed Sep  9 13:05:43 2009
@@ -32,6 +32,17 @@
     def remote_port(self):
         return int(self.defines["remote-port"])
 
+    def verify_cleanup(self):
+        attempts = 0
+        total = len(self.qmf.getObjects(_class="bridge")) + len(self.qmf.getObjects(_class="link"))
+        while total > 0:
+            attempts += 1
+            if attempts >= 10:
+                self.fail("Bridges and links didn't clean up")
+                return
+            sleep(1)
+            total = len(self.qmf.getObjects(_class="bridge")) + len(self.qmf.getObjects(_class="link"))
+
     def test_bridge_create_and_close(self):
         self.startQmf();
         qmf = self.qmf
@@ -51,9 +62,7 @@
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
+        self.verify_cleanup()
 
     def test_pull_from_exchange(self):
         session = self.session
@@ -98,9 +107,7 @@
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
+        self.verify_cleanup()
 
     def test_push_to_exchange(self):
         session = self.session
@@ -144,9 +151,7 @@
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
+        self.verify_cleanup()
 
     def test_pull_from_queue(self):
         session = self.session
@@ -199,9 +204,7 @@
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
+        self.verify_cleanup()
 
     def test_tracing_automatic(self):
         remoteUrl = "%s:%d" % (self.remote_host(), self.remote_port())
@@ -312,9 +315,7 @@
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
+        self.verify_cleanup()
 
     def test_dynamic_fanout(self):
         session = self.session
@@ -358,9 +359,7 @@
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
+        self.verify_cleanup()
 
 
     def test_dynamic_direct(self):
@@ -405,10 +404,7 @@
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
-
+        self.verify_cleanup()
 
     def test_dynamic_topic(self):
         session = self.session
@@ -452,9 +448,7 @@
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
+        self.verify_cleanup()
 
     def test_dynamic_topic_reorigin(self):
         session = self.session
@@ -509,14 +503,24 @@
         self.assertEqual(result.status, 0)
         result = bridge2.close()
         self.assertEqual(result.status, 0)
-        result = link.close()
-        self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
+        # extra check: verify we don't leak bridge objects - keep the link
+        # around and verify the bridge count has gone to zero
+
+        attempts = 0
+        bridgeCount = len(qmf.getObjects(_class="bridge"))
+        while bridgeCount > 0:
+            attempts += 1
+            if attempts >= 5:
+                self.fail("Bridges didn't clean up")
+                return
+            sleep(1)
+            bridgeCount = len(qmf.getObjects(_class="bridge"))
 
+        result = link.close()
+        self.assertEqual(result.status, 0)
 
+        self.verify_cleanup()
         
     def test_dynamic_direct_reorigin(self):
         session = self.session
@@ -569,16 +573,17 @@
 
         result = bridge.close()
         self.assertEqual(result.status, 0)
-        result = bridge2.close()
-        self.assertEqual(result.status, 0)
+        
+        # Extra test: don't explicitly close() bridge2.  When the link is closed,
+        # it should clean up bridge2 automagically.  verify_cleanup() will detect
+        # if bridge2 isn't cleaned up and will fail the test.
+        #
+        #result = bridge2.close()
+        #self.assertEqual(result.status, 0)
         result = link.close()
         self.assertEqual(result.status, 0)
 
-        sleep(3)
-        self.assertEqual(len(qmf.getObjects(_class="bridge")), 0)
-        self.assertEqual(len(qmf.getObjects(_class="link")), 0)
-
-
+        self.verify_cleanup()
 
     def getProperty(self, msg, name):
         for h in msg.headers:

Modified: qpid/branches/java-network-refactor/qpid/cpp/src/tests/txtest.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/cpp/src/tests/txtest.cpp?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/cpp/src/tests/txtest.cpp (original)
+++ qpid/branches/java-network-refactor/qpid/cpp/src/tests/txtest.cpp Wed Sep  9 13:05:43 2009
@@ -33,7 +33,7 @@
 #include "qpid/client/SubscriptionManager.h"
 #include "qpid/framing/Array.h"
 #include "qpid/framing/Buffer.h"
-#include "qpid/sys/uuid.h"
+#include "qpid/framing/Uuid.h"
 #include "qpid/sys/Thread.h"
 
 using namespace qpid;
@@ -130,8 +130,6 @@
     std::string src;
     std::string dest;
     Thread thread;
-    uuid_t uuid;
-    char uuidStr[37]; // Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + trailing \0
     framing::Xid xid;
 
     Transfer(const std::string& to, const std::string& from) : src(to), dest(from), xid(0x4c414e47, "", from) {}
@@ -184,9 +182,8 @@
     }
 
     void setNewXid(framing::Xid& xid) {
-        ::uuid_generate(uuid);
-        ::uuid_unparse(uuid, uuidStr);
-        xid.setGlobalId(uuidStr);
+        framing::Uuid uuid(true);
+        xid.setGlobalId(uuid.str());
     }
 };
 

Propchange: qpid/branches/java-network-refactor/qpid/dotnet/build-msbuild.bat
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -0,0 +1,2 @@
+/incubator/qpid/trunk/qpid/dotnet/build-msbuild.bat:520691-724917
+/qpid/trunk/qpid/dotnet/build-msbuild.bat:805429-812920

Propchange: qpid/branches/java-network-refactor/qpid/dotnet/build-nant-release
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -0,0 +1,2 @@
+/incubator/qpid/trunk/qpid/dotnet/build-nant-release:520691-724917
+/qpid/trunk/qpid/dotnet/build-nant-release:805429-812920

Propchange: qpid/branches/java-network-refactor/qpid/dotnet/build-nant.bat
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -0,0 +1,2 @@
+/incubator/qpid/trunk/qpid/dotnet/build-nant.bat:520691-724917
+/qpid/trunk/qpid/dotnet/build-nant.bat:805429-812920

Propchange: qpid/branches/java-network-refactor/qpid/java/broker/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -1,2 +1,2 @@
 /qpid/branches/jmx_mc_gsoc09/qpid/java/broker:787599
-/qpid/trunk/qpid/java/broker:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/trunk/qpid/java/broker:742626,743015,743028-743029,743304,743306,743311,743357,744113,747363,747367,747369-747370,747376,747783,747868-747870,747875,748561,748591,748641,748680,748686,749149,749282,749285,749315,749340,749572,753219-753220,753253,754934,754958,755256,757258,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,805429-812920

Propchange: qpid/branches/java-network-refactor/qpid/java/broker/bin/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -1,2 +1,2 @@
 /qpid/branches/0.5-release/qpid/java/broker/bin:757268
-/qpid/trunk/qpid/java/broker/bin:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/trunk/qpid/java/broker/bin:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,805429-812920

Modified: qpid/branches/java-network-refactor/qpid/java/broker/bin/qpid-server
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/java/broker/bin/qpid-server?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/java/broker/bin/qpid-server (original)
+++ qpid/branches/java-network-refactor/qpid/java/broker/bin/qpid-server Wed Sep  9 13:05:43 2009
@@ -26,14 +26,19 @@
 # Set classpath to include Qpid jar with all required jars in manifest
 QPID_LIBS=$QPID_HOME/lib/qpid-all.jar:$QPID_HOME/lib/bdbstore-launch.jar
 
+# Default Log4j to append to its log file
+if [ -z "$QPID_LOG_APPEND" ]; then
+    export QPID_LOG_APPEND="true"
+fi
+
 # Set other variables used by the qpid-run script before calling
 export JAVA=java \
        JAVA_VM=-server \
        JAVA_MEM=-Xmx1024m \
        JAVA_GC="-XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError" \
        QPID_CLASSPATH=$QPID_LIBS \
-       QPID_RUN_LOG=2
+       QPID_RUN_LOG=2 
 
-QPID_OPTS="$QPID_OPTS -Damqj.read_write_pool_size=32"
+QPID_OPTS="$QPID_OPTS -Damqj.read_write_pool_size=32 -DQPID_LOG_APPEND=$QPID_LOG_APPEND"
 
 . qpid-run org.apache.qpid.server.Main "$@"

Modified: qpid/branches/java-network-refactor/qpid/java/broker/etc/log4j.xml
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/java/broker/etc/log4j.xml?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/java/broker/etc/log4j.xml (original)
+++ qpid/branches/java-network-refactor/qpid/java/broker/etc/log4j.xml Wed Sep  9 13:05:43 2009
@@ -50,7 +50,7 @@
 
     <appender class="org.apache.log4j.FileAppender" name="FileAppender">
         <param name="File" value="${QPID_WORK}/log/${logprefix}qpid${logsuffix}.log"/>
-        <param name="Append" value="false"/>
+        <param name="Append" value="${QPID_LOG_APPEND}"/>
 
         <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>

Modified: qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java (original)
+++ qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/HeadersExchange.java Wed Sep  9 13:05:43 2009
@@ -204,11 +204,21 @@
             for (int i = 0; i < bindings.length; i++)
             {
                 String[] keyAndValue = bindings[i].split("=");
-                if (keyAndValue == null || keyAndValue.length < 2)
+                if (keyAndValue == null || keyAndValue.length == 0 || keyAndValue.length > 2)
                 {
                     throw new JMException("Format for headers binding should be \"<attribute1>=<value1>,<attribute2>=<value2>\" ");
                 }
-                bindingMap.setString(keyAndValue[0], keyAndValue[1]);
+                
+                if(keyAndValue.length ==1)
+                {
+                    //no value was given, only a key. Use an empty value
+                    //to signal match on key presence alone
+                    bindingMap.setString(keyAndValue[0], "");
+                }
+                else
+                {
+                    bindingMap.setString(keyAndValue[0], keyAndValue[1]);
+                }
             }
 
             _bindings.add(new Registration(new HeadersBinding(bindingMap), queue));

Modified: qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/StartupRootMessageLogger.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/StartupRootMessageLogger.java?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/StartupRootMessageLogger.java (original)
+++ qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/logging/StartupRootMessageLogger.java Wed Sep  9 13:05:43 2009
@@ -39,4 +39,11 @@
         return true;
     }
 
+    @Override
+    public boolean isMessageEnabled(LogActor actor)
+    {
+        return true;
+    }
+
+
 }

Propchange: qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/management/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -1,3 +1,3 @@
 /qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/management:757268
 /qpid/branches/jmx_mc_gsoc09/qpid/java/broker/src/main/java/org/apache/qpid/server/management:787599
-/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/management:753219-753220,753253,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,805429-812920

Modified: qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java
URL: http://svn.apache.org/viewvc/qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java?rev=812936&r1=812935&r2=812936&view=diff
==============================================================================
--- qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java (original)
+++ qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/management/JMXManagedObjectRegistry.java Wed Sep  9 13:05:43 2009
@@ -379,6 +379,8 @@
             try
             {
                 _cs.stop();
+                CurrentActor.get().message(ManagementConsoleMessages.MNG_1003("RMI Registry", _cs.getAddress().getPort() - PORT_EXPORT_OFFSET));
+                CurrentActor.get().message(ManagementConsoleMessages.MNG_1003("RMI ConnectorServer", _cs.getAddress().getPort()));
             }
             catch (IOException e)
             {

Propchange: qpid/branches/java-network-refactor/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep  9 13:05:43 2009
@@ -1,3 +1,3 @@
 /qpid/branches/0.5-release/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:757257
 /qpid/branches/jmx_mc_gsoc09/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:787599
-/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:753219-753220,753253,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790
+/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/queue:753219-753220,753253,757270,758730,759097,760919,761721,762365,762992,763959,764026,764109,764140,764790,805429-812920



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org


Mime
View raw message