You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by sh...@apache.org on 2011/10/21 16:42:51 UTC

svn commit: r1187375 [18/43] - in /qpid/branches/QPID-2519: ./ bin/ cpp/ cpp/bindings/ cpp/bindings/qmf/python/ cpp/bindings/qmf/ruby/ cpp/bindings/qmf/tests/ cpp/bindings/qmf2/ cpp/bindings/qmf2/examples/cpp/ cpp/bindings/qmf2/python/ cpp/bindings/qmf...

Modified: qpid/branches/QPID-2519/cpp/src/tests/qpid-perftest.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/qpid-perftest.cpp?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/qpid-perftest.cpp (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/qpid-perftest.cpp Fri Oct 21 14:42:12 2011
@@ -173,7 +173,7 @@ struct Opts : public TestOptions {
             if (count % subs) {
                 count += subs - (count % subs);
                 cout << "WARNING: Adjusted --count to " << count
-                     << " the nearest multiple of --nsubs" << endl;
+                     << " the next multiple of --nsubs" << endl;
             }
             totalPubs = pubs*qt;
             totalSubs = subs*qt;
@@ -396,7 +396,7 @@ struct Controller : public Client {
     void run() {                // Controller
         try {
             // Wait for subscribers to be ready.
-            process(opts.totalSubs, fqn("sub_ready"), bind(expect, _1, "ready"));
+            process(opts.totalSubs, fqn("sub_ready"), boost::bind(expect, _1, "ready"));
 
             LocalQueue pubDone;
             LocalQueue subDone;
@@ -413,7 +413,7 @@ struct Controller : public Client {
                 AbsTime start=now();
                 send(opts.totalPubs, fqn("pub_start"), "start"); // Start publishers
                 if (j) {
-		    send(opts.totalPubs, fqn("sub_iteration"), "next"); // Start subscribers on next iteration
+                    send(opts.totalSubs, fqn("sub_iteration"), "next"); // Start subscribers on next iteration
                 }
 
                 Stats pubRates;
@@ -423,8 +423,10 @@ struct Controller : public Client {
                 process(opts.totalSubs, subDone, fqn("sub_done"), boost::ref(subRates));
 
                 AbsTime end=now();
-
                 double time=secs(start, end);
+		if (time <= 0.0) {
+		  throw Exception("ERROR: Test completed in zero seconds. Try again with a larger message count.");
+		}
                 double txrate=opts.transfers/time;
                 double mbytes=(txrate*opts.size)/(1024*1024);
 
@@ -508,10 +510,11 @@ struct PublishThread : public Client {
             }
             SubscriptionManager subs(session);
             LocalQueue lq;
-            subs.setFlowControl(1, SubscriptionManager::UNLIMITED, true);
-            subs.subscribe(lq, fqn("pub_start"));
+            subs.setFlowControl(0, SubscriptionManager::UNLIMITED, false);
+            Subscription cs = subs.subscribe(lq, fqn("pub_start"));
 
             for (size_t j = 0; j < opts.iterations; ++j) {
+                cs.grantMessageCredit(1);
                 expect(lq.pop().getData(), "start");
                 AbsTime start=now();
                 for (size_t i=0; i<opts.count; i++) {
@@ -543,6 +546,9 @@ struct PublishThread : public Client {
                 if (opts.confirm) session.sync();
                 AbsTime end=now();
                 double time=secs(start,end);
+                if (time <= 0.0) {
+                    throw Exception("ERROR: Test completed in zero seconds. Try again with a larger message count.");
+                }
 
                 // Send result to controller.
                 Message report(lexical_cast<string>(opts.count/time), fqn("pub_done"));
@@ -638,7 +644,9 @@ struct SubscribeThread : public Client {
                     //
                     // For now verify order only for a single publisher.
                     size_t offset = opts.uniqueData ? 5 /*marker is 'data:'*/ : 0;
-                    size_t n = *reinterpret_cast<const size_t*>(msg.getData().data() + offset);
+                    size_t n;
+                    memcpy (&n, reinterpret_cast<const char*>(msg.getData().data() + offset),
+                        sizeof(n));
                     if (opts.pubs == 1) {
                         if (opts.subs == 1 || opts.mode == FANOUT) verify(n==expect, "==", expect, n);
                         else verify(n>=expect, ">=", expect, n);

Modified: qpid/branches/QPID-2519/cpp/src/tests/qpid-receive.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/qpid-receive.cpp?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/qpid-receive.cpp (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/qpid-receive.cpp Fri Oct 21 14:42:12 2011
@@ -53,6 +53,7 @@ struct Options : public qpid::Options
     bool forever;
     uint messages;
     bool ignoreDuplicates;
+    bool checkRedelivered;
     uint capacity;
     uint ackFrequency;
     uint tx;
@@ -75,6 +76,7 @@ struct Options : public qpid::Options
           forever(false),
           messages(0),
           ignoreDuplicates(false),
+          checkRedelivered(false),
           capacity(1000),
           ackFrequency(100),
           tx(0),
@@ -92,10 +94,11 @@ struct Options : public qpid::Options
             ("broker,b", qpid::optValue(url, "URL"), "url of broker to connect to")
             ("address,a", qpid::optValue(address, "ADDRESS"), "address to receive from")
             ("connection-options", qpid::optValue(connectionOptions, "OPTIONS"), "options for the connection")
-            ("timeout,t", qpid::optValue(timeout, "TIMEOUT"), "timeout in seconds to wait before exiting")
+            ("timeout", qpid::optValue(timeout, "TIMEOUT"), "timeout in seconds to wait before exiting")
             ("forever,f", qpid::optValue(forever), "ignore timeout and wait forever")
             ("messages,m", qpid::optValue(messages, "N"), "Number of messages to receive; 0 means receive indefinitely")
             ("ignore-duplicates", qpid::optValue(ignoreDuplicates), "Detect and ignore duplicates (by checking 'sn' header)")
+            ("check-redelivered", qpid::optValue(checkRedelivered), "Fails with exception if a duplicate is not marked as redelivered (only relevant when ignore-duplicates is selected)")
             ("capacity", qpid::optValue(capacity, "N"), "Pre-fetch window (0 implies no pre-fetch)")
             ("ack-frequency", qpid::optValue(ackFrequency, "N"), "Ack frequency (0 implies none of the messages will get accepted)")
             ("tx", qpid::optValue(tx, "N"), "batch size for transactions (0 implies transaction are not used)")
@@ -216,6 +219,8 @@ int main(int argc, char ** argv)
                             std::cout << msg.getContent() << std::endl;//TODO: handle map or list messages
                         if (opts.messages && count >= opts.messages) done = true;
                     }
+                } else if (opts.checkRedelivered && !msg.getRedelivered()) {
+                    throw qpid::Exception("duplicate sequence number received, message not marked as redelivered!");
                 }
                 if (opts.tx && (count % opts.tx == 0)) {
                     if (opts.rollbackFrequency && (++txCount % opts.rollbackFrequency == 0)) {
@@ -257,7 +262,7 @@ int main(int argc, char ** argv)
             return 0;
         }
     } catch(const std::exception& error) {
-        std::cerr << "Failure: " << error.what() << std::endl;
+        std::cerr << "qpid-receive: " << error.what() << std::endl;
         connection.close();
         return 1;
     }

Modified: qpid/branches/QPID-2519/cpp/src/tests/qpid-send.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/qpid-send.cpp?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/qpid-send.cpp (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/qpid-send.cpp Fri Oct 21 14:42:12 2011
@@ -28,6 +28,7 @@
 #include <qpid/messaging/FailoverUpdates.h>
 #include <qpid/sys/Time.h>
 #include <qpid/sys/Monitor.h>
+#include <qpid/sys/SystemInfo.h>
 #include "TestOptions.h"
 #include "Statistics.h"
 
@@ -76,6 +77,11 @@ struct Options : public qpid::Options
     uint flowControl;
     bool sequence;
     bool timestamp;
+    std::string groupKey;
+    std::string groupPrefix;
+    uint groupSize;
+    bool groupRandSize;
+    uint groupInterleave;
 
     Options(const std::string& argv0=std::string())
         : qpid::Options("Options"),
@@ -100,19 +106,23 @@ struct Options : public qpid::Options
           sendRate(0),
           flowControl(0),
           sequence(true),
-          timestamp(true)
+          timestamp(true),
+          groupPrefix("GROUP-"),
+          groupSize(10),
+          groupRandSize(false),
+          groupInterleave(1)
     {
         addOptions()
             ("broker,b", qpid::optValue(url, "URL"), "url of broker to connect to")
-            ("address,a", qpid::optValue(address, "ADDRESS"), "address to drain from")
+            ("address,a", qpid::optValue(address, "ADDRESS"), "address to send to")
             ("connection-options", qpid::optValue(connectionOptions, "OPTIONS"), "options for the connection")
             ("messages,m", qpid::optValue(messages, "N"), "stop after N messages have been sent, 0 means no limit")
             ("id,i", qpid::optValue(id, "ID"), "use the supplied id instead of generating one")
             ("reply-to", qpid::optValue(replyto, "REPLY-TO"), "specify reply-to address")
             ("send-eos", qpid::optValue(sendEos, "N"), "Send N EOS messages to mark end of input")
             ("durable", qpid::optValue(durable, "yes|no"), "Mark messages as durable.")
-	    ("ttl", qpid::optValue(ttl, "msecs"), "Time-to-live for messages, in milliseconds")
-	    ("priority", qpid::optValue(priority, "PRIORITY"), "Priority for messages (higher value implies higher priority)")
+            ("ttl", qpid::optValue(ttl, "msecs"), "Time-to-live for messages, in milliseconds")
+            ("priority", qpid::optValue(priority, "PRIORITY"), "Priority for messages (higher value implies higher priority)")
             ("property,P", qpid::optValue(properties, "NAME=VALUE"), "specify message property")
             ("correlation-id", qpid::optValue(correlationid, "ID"), "correlation-id for message")
             ("user-id", qpid::optValue(userid, "USERID"), "userid for message")
@@ -131,6 +141,11 @@ struct Options : public qpid::Options
             ("flow-control", qpid::optValue(flowControl,"N"), "Do end to end flow control to limit queue depth to 2*N. 0 means no flow control.")
             ("sequence", qpid::optValue(sequence, "yes|no"), "Add a sequence number messages property (required for duplicate/lost message detection)")
             ("timestamp", qpid::optValue(timestamp, "yes|no"), "Add a time stamp messages property (required for latency measurement)")
+            ("group-key", qpid::optValue(groupKey, "KEY"), "Generate groups of messages using message header 'KEY' to hold the group identifier")
+            ("group-prefix", qpid::optValue(groupPrefix, "STRING"), "Generate group identifers with 'STRING' prefix (if group-key specified)")
+            ("group-size", qpid::optValue(groupSize, "N"), "Number of messages per a group (if group-key specified)")
+            ("group-randomize-size", qpid::optValue(groupRandSize), "Randomize the number of messages per group to [1...group-size] (if group-key specified)")
+            ("group-interleave", qpid::optValue(groupInterleave, "N"), "Simultaineously interleave messages from N different groups (if group-key specified)")
             ("help", qpid::optValue(help), "print this usage statement");
         add(log);
     }
@@ -252,6 +267,68 @@ class MapContentGenerator   : public Con
     const Options& opts;
 };
 
+// tag each generated message with a group identifer
+//
+class GroupGenerator {
+public:
+    GroupGenerator(const std::string& key,
+                   const std::string& prefix,
+                   const uint size,
+                   const bool randomize,
+                   const uint interleave)
+        : groupKey(key), groupPrefix(prefix), groupSize(size),
+          randomizeSize(randomize), groupSuffix(0)
+    {
+        if (randomize) srand((unsigned int)qpid::sys::SystemInfo::getProcessId());
+
+        for (uint i = 0; i < 1 || i < interleave; ++i) {
+            newGroup();
+        }
+        current = groups.begin();
+    }
+
+    void setGroupInfo(Message &msg)
+    {
+        if (current == groups.end())
+            current = groups.begin();
+        msg.getProperties()[groupKey] = current->id;
+        // std::cout << "SENDING GROUPID=[" << current->id << "]" << std::endl;
+        if (++(current->count) == current->size) {
+            newGroup();
+            groups.erase(current++);
+        } else
+            ++current;
+    }
+
+  private:
+    const std::string& groupKey;
+    const std::string& groupPrefix;
+    const uint groupSize;
+    const bool randomizeSize;
+
+    uint groupSuffix;
+
+    struct GroupState {
+        std::string id;
+        const uint size;
+        uint count;
+        GroupState( const std::string& i, const uint s )
+            : id(i), size(s), count(0) {}
+    };
+    typedef std::list<GroupState> GroupList;
+    GroupList groups;
+    GroupList::iterator current;
+
+    void newGroup() {
+        std::ostringstream groupId(groupPrefix, ios_base::out|ios_base::ate);
+        groupId << groupSuffix++;
+        uint size = (randomizeSize) ? (rand() % groupSize) + 1 : groupSize;
+        // std::cout << "New group: GROUPID=[" << groupId.str() << "] size=" << size << std::endl;
+        GroupState group( groupId.str(), size );
+        groups.push_back( group );
+    }
+};
+
 int main(int argc, char ** argv)
 {
     Connection connection;
@@ -296,6 +373,14 @@ int main(int argc, char ** argv)
             else
                 contentGen.reset(new FixedContentGenerator(opts.contentString));
 
+            std::auto_ptr<GroupGenerator> groupGen;
+            if (!opts.groupKey.empty())
+                groupGen.reset(new GroupGenerator(opts.groupKey,
+                                                  opts.groupPrefix,
+                                                  opts.groupSize,
+                                                  opts.groupRandSize,
+                                                  opts.groupInterleave));
+
             qpid::sys::AbsTime start = qpid::sys::now();
             int64_t interval = 0;
             if (opts.sendRate) interval = qpid::sys::TIME_SEC/opts.sendRate;
@@ -312,9 +397,6 @@ int main(int argc, char ** argv)
                 ++sent;
                 if (opts.sequence)
                     msg.getProperties()[SN] = sent;
-                if (opts.timestamp)
-                    msg.getProperties()[TS] = int64_t(
-                        qpid::sys::Duration(qpid::sys::EPOCH, qpid::sys::now()));
                 if (opts.flowControl) {
                     if ((sent % opts.flowControl) == 0) {
                         msg.setReplyTo(flowControlAddress);
@@ -323,6 +405,12 @@ int main(int argc, char ** argv)
                     else
                         msg.setReplyTo(Address()); // Clear the reply address.
                 }
+                if (groupGen.get())
+                    groupGen->setGroupInfo(msg);
+
+                if (opts.timestamp)
+                    msg.getProperties()[TS] = int64_t(
+                        qpid::sys::Duration(qpid::sys::EPOCH, qpid::sys::now()));
                 sender.send(msg);
                 reporter.message(msg);
 
@@ -368,7 +456,7 @@ int main(int argc, char ** argv)
             return 0;
         }
     } catch(const std::exception& error) {
-        std::cout << "Failed: " << error.what() << std::endl;
+        std::cerr << "qpid-send: " << error.what() << std::endl;
         connection.close();
         return 1;
     }

Modified: qpid/branches/QPID-2519/cpp/src/tests/replication_test
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/replication_test?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/replication_test (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/replication_test Fri Oct 21 14:42:12 2011
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 #
 # Licensed to the Apache Software Foundation (ASF) under one

Modified: qpid/branches/QPID-2519/cpp/src/tests/run_acl_tests
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/run_acl_tests?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/run_acl_tests (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/run_acl_tests Fri Oct 21 14:42:12 2011
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 #
 # Licensed to the Apache Software Foundation (ASF) under one

Modified: qpid/branches/QPID-2519/cpp/src/tests/run_cli_tests
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/run_cli_tests?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/run_cli_tests (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/run_cli_tests Fri Oct 21 14:42:12 2011
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 #
 # Licensed to the Apache Software Foundation (ASF) under one
@@ -70,7 +70,8 @@ stop_brokers() {
 if test -d ${PYTHON_DIR} ;  then
     start_brokers
     echo "Running CLI tests using brokers on ports $LOCAL_PORT $REMOTE_PORT"
-    $QPID_PYTHON_TEST -m cli_tests -b localhost:$LOCAL_PORT -Dremote-port=$REMOTE_PORT -Dcli-dir=$CLI_DIR $targs $@
+    PYTHON_TESTS=${PYTHON_TESTS:-$*}
+    $QPID_PYTHON_TEST -m cli_tests -b localhost:$LOCAL_PORT -Dremote-port=$REMOTE_PORT -Dcli-dir=$CLI_DIR $targs $PYTHON_TESTS $@
     RETCODE=$?
     stop_brokers
     if test x$RETCODE != x0; then 

Modified: qpid/branches/QPID-2519/cpp/src/tests/run_federation_tests
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/run_federation_tests?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/run_federation_tests (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/run_federation_tests Fri Oct 21 14:42:12 2011
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 #
 # Licensed to the Apache Software Foundation (ASF) under one
@@ -55,7 +55,7 @@ stop_brokers() {
 if test -d ${PYTHON_DIR} ;  then
     start_brokers
     echo "Running federation tests using brokers on ports $LOCAL_PORT $REMOTE_PORT $REMOTE_B1 $REMOTE_B2"
-    $QPID_PYTHON_TEST -m federation $SKIPTESTS -b localhost:$LOCAL_PORT -Dremote-port=$REMOTE_PORT -Dextra-brokers="$REMOTE_B1 $REMOTE_B2" $@
+    $QPID_PYTHON_TEST -m federation "$SKIPTESTS" -b localhost:$LOCAL_PORT -Dremote-port=$REMOTE_PORT -Dextra-brokers="$REMOTE_B1 $REMOTE_B2" $@
     RETCODE=$?
     stop_brokers
     if test x$RETCODE != x0; then

Modified: qpid/branches/QPID-2519/cpp/src/tests/run_header_test
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/run_header_test?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/run_header_test (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/run_header_test Fri Oct 21 14:42:12 2011
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 #
 # Licensed to the Apache Software Foundation (ASF) under one

Modified: qpid/branches/QPID-2519/cpp/src/tests/run_store_tests.ps1
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/run_store_tests.ps1?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/run_store_tests.ps1 (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/run_store_tests.ps1 Fri Oct 21 14:42:12 2011
@@ -111,7 +111,7 @@ Invoke-Expression "$prog --quit --port $
 # Test 2... store.py starts/stops/restarts its own brokers
 
 $tests = "*"
-$env:PYTHONPATH="$PYTHON_DIR;$srcdir"
+$env:PYTHONPATH="$PYTHON_DIR;$QMF_LIB;$srcdir"
 $env:QPIDD_EXEC="$prog"
 $env:STORE_LIB="$store_dir\store$suffix.dll"
 if ($test_store -eq "MSSQL") {

Modified: qpid/branches/QPID-2519/cpp/src/tests/run_test
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/run_test?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/run_test (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/run_test Fri Oct 21 14:42:12 2011
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file

Modified: qpid/branches/QPID-2519/cpp/src/tests/sasl.mk
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/sasl.mk?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/sasl.mk (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/sasl.mk Fri Oct 21 14:42:12 2011
@@ -30,9 +30,21 @@ check_PROGRAMS+=sasl_version
 sasl_version_SOURCES=sasl_version.cpp
 sasl_version_LDADD=$(lib_client)
 
-TESTS += run_cluster_authentication_test sasl_fed sasl_fed_ex
+TESTS += run_cluster_authentication_test sasl_fed sasl_fed_ex_dynamic sasl_fed_ex_link sasl_fed_ex_queue sasl_fed_ex_route sasl_fed_ex_route_cluster sasl_fed_ex_link_cluster sasl_fed_ex_queue_cluster sasl_fed_ex_dynamic_cluster sasl_no_dir
 LONG_TESTS += run_cluster_authentication_soak
-EXTRA_DIST += run_cluster_authentication_test sasl_fed sasl_fed_ex run_cluster_authentication_soak
+EXTRA_DIST += run_cluster_authentication_test \
+              sasl_fed                        \
+              sasl_fed_ex                     \
+              run_cluster_authentication_soak \
+              sasl_fed_ex_dynamic             \
+              sasl_fed_ex_link                \
+              sasl_fed_ex_queue               \
+              sasl_fed_ex_route               \
+              sasl_fed_ex_dynamic_cluster     \
+              sasl_fed_ex_link_cluster        \
+              sasl_fed_ex_queue_cluster       \
+              sasl_fed_ex_route_cluster       \
+              sasl_no_dir
 
 
 endif # HAVE_SASL

Modified: qpid/branches/QPID-2519/cpp/src/tests/sasl_fed
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/sasl_fed?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/sasl_fed (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/sasl_fed Fri Oct 21 14:42:12 2011
@@ -123,7 +123,7 @@ n_messages=100
 #--------------------------------------------------
 #echo "  Sending 100 messages to $broker_1_port "
 #--------------------------------------------------
-$builddir/datagen --count $n_messages | $SENDER_EXEC --username zag --password zag --exchange $EXCHANGE_NAME --routing-key $ROUTING_KEY --port $broker_1_port
+$builddir/datagen --count $n_messages | $SENDER_EXEC --mechanism DIGEST-MD5 --username zag --password zag --exchange $EXCHANGE_NAME --routing-key $ROUTING_KEY --port $broker_1_port
 
 sleep 5
 

Modified: qpid/branches/QPID-2519/cpp/src/tests/sasl_fed_ex
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/sasl_fed_ex?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/sasl_fed_ex (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/sasl_fed_ex Fri Oct 21 14:42:12 2011
@@ -19,22 +19,52 @@
 # under the License.
 #
 
-
 #===============================================================================
-# This test creates a federated link between two brokers using SASL security.
+# These tests create federated links between two brokers using SASL security.
 # The SASL mechanism used is EXTERNAL, which is satisfied by SSL
 # transport-layer security.
 #===============================================================================
 
 source ./test_env.sh
 
+script_name=`basename $0`
+
+if [ $# -lt 1 ] || [ $# -gt 2 ]
+then
+  echo
+  # These are the four different ways of creating links ( or routes+links ) 
+  # that the qpid-route command provides.
+  echo "Usage: ${script_name} dynamic|link|queue|route [cluster]"
+  echo
+  exit 1
+fi
+
+# Has the user told us to do clustering ? -----------
+clustering_flag=
+if [ $# -eq "2" ] && [ "$2" == "cluster" ]; then
+  clustering_flag=true
+fi
+
+qpid_route_method=$1
+
+# Debugging print. --------------------------
+debug=
+function print {
+  if [ "$debug" ]; then
+    echo "${script_name}: $1"
+  fi
+}
+
+print "=========== start sasl_fed_ex $* ============"
+
+
 
 # This minimum value corresponds to sasl version 2.1.22
 minimum_sasl_version=131350
 
 sasl_version=`$QPID_TEST_EXEC_DIR/sasl_version`
 
-# This test is necessary becasue this sasl version is the first one that permits 
+# This test is necessary because this sasl version is the first one that permits 
 # redirection of the sasl config file path.
 if [ "$sasl_version" -lt  "$minimum_sasl_version" ]; then
   echo "sasl_fed: must have sasl version 2.1.22 or greater.  ( Integer value: $minimum_sasl_version )  Version is: $sasl_version"
@@ -60,6 +90,7 @@ create_certs() {
 
 delete_certs() {
     if [[ -e ${CERT_DIR} ]] ;  then
+        print "removing cert dir ${CERT_DIR}"
         rm -rf ${CERT_DIR}
     fi
 }
@@ -72,22 +103,40 @@ if [[ !(-x $CERTUTIL) ]] ; then
 fi
 
 delete_certs
-create_certs || error "Could not create test certificate"
-
+create_certs 2> /dev/null
+if [ ! $? ]; then
+  error "Could not create test certificate"
+  exit 1
+fi
 
-sasl_config_file=$builddir/sasl_config
+sasl_config_dir=$builddir/sasl_config
 
-my_random_number=$RANDOM
-tmp_root=/tmp/sasl_fed_$my_random_number
+tmp_root=${builddir}/sasl_fed_ex_temp
+print "results dir is ${tmp_root}"
+rm -rf ${tmp_root}
 mkdir -p $tmp_root
 
 SRC_SSL_PORT=6667
 DST_SSL_PORT=6666
 
+SRC_SSL_PORT_2=6668
+DST_SSL_PORT_2=6669
+
 SRC_TCP_PORT=5801
 DST_TCP_PORT=5807
 
-SSL_LIB=../.libs/ssl.so
+SRC_TCP_PORT_2=5802
+DST_TCP_PORT_2=5803
+
+CLUSTER_NAME_SUFFIX=`hostname | tr '.' ' ' | awk '{print $1}'`
+CLUSTER_1_NAME=sasl_fed_ex_cluster_1_${CLUSTER_NAME_SUFFIX}
+CLUSTER_2_NAME=sasl_fed_ex_cluster_2_${CLUSTER_NAME_SUFFIX}
+
+print "CLUSTER_1_NAME == ${CLUSTER_1_NAME}"
+print "CLUSTER_2_NAME == ${CLUSTER_2_NAME}"
+
+SSL_LIB=${moduledir}/ssl.so
+CLUSTER_LIB=${moduledir}/cluster.so
 
 export QPID_SSL_CERT_NAME=${TEST_HOSTNAME}
 
@@ -116,52 +165,112 @@ export QPID_SSL_CERT_NAME=${TEST_HOSTNAM
 #  5. DST pulls messages off the temp queue on SRC to itself.
 #
 
+COMMON_BROKER_OPTIONS="                          \
+      --ssl-sasl-no-dict                         \
+      --sasl-config=$sasl_config_dir             \
+      --ssl-require-client-authentication        \
+      --auth yes                                 \
+      --ssl-cert-db $CERT_DIR                    \
+      --ssl-cert-password-file $CERT_PW_FILE     \
+      --ssl-cert-name $TEST_HOSTNAME             \
+      --no-data-dir                              \
+      --no-module-dir                            \
+      --load-module ${SSL_LIB}                   \
+      --mgmt-enable=yes                          \
+      --log-enable info+                         \
+      --log-source yes                           \
+      --daemon "                                 
+                      
+
+function start_brokers {
+  if [ $1 ]; then
+    # clustered ----------------------------------------
+    print "Starting SRC cluster"
+
+    print "  src broker 1"
+    $QPIDD_EXEC                                  \
+      --port=${SRC_TCP_PORT}                     \
+      --ssl-port ${SRC_SSL_PORT}                 \
+      ${COMMON_BROKER_OPTIONS}                   \
+      --load-module ${CLUSTER_LIB}               \
+      --cluster-name ${CLUSTER_1_NAME}           \
+      --log-to-file $tmp_root/qpidd_src.log 2> /dev/null
+
+    broker_ports[0]=${SRC_TCP_PORT}
+
+    print "  src broker 2"
+    $QPIDD_EXEC                                  \
+      --port=${SRC_TCP_PORT_2}                   \
+      --ssl-port ${SRC_SSL_PORT_2}               \
+      ${COMMON_BROKER_OPTIONS}                   \
+      --load-module ${CLUSTER_LIB}               \
+      --cluster-name ${CLUSTER_1_NAME}           \
+      --log-to-file $tmp_root/qpidd_src_2.log 2> /dev/null
+
+    broker_ports[1]=${SRC_TCP_PORT_2}
+
+
+    print "Starting DST cluster"
+
+    print "  dst broker 1"
+    $QPIDD_EXEC                                  \
+      --port=${DST_TCP_PORT}                     \
+      --ssl-port ${DST_SSL_PORT}                 \
+      ${COMMON_BROKER_OPTIONS}                   \
+      --load-module ${CLUSTER_LIB}               \
+      --cluster-name ${CLUSTER_2_NAME}           \
+      --log-to-file $tmp_root/qpidd_dst.log 2> /dev/null
+
+    broker_ports[2]=${DST_TCP_PORT}
+
+    print "  dst broker 2"
+    $QPIDD_EXEC                                  \
+      --port=${DST_TCP_PORT_2}                   \
+      --ssl-port ${DST_SSL_PORT_2}               \
+      ${COMMON_BROKER_OPTIONS}                   \
+      --load-module ${CLUSTER_LIB}               \
+      --cluster-name ${CLUSTER_2_NAME}           \
+      --log-to-file $tmp_root/qpidd_dst_2.log 2> /dev/null
+
+    broker_ports[3]=${DST_TCP_PORT_2}
+
+  else
+    # vanilla brokers --------------------------------
+    print "Starting SRC broker"
+    $QPIDD_EXEC                                  \
+      --port=${SRC_TCP_PORT}                     \
+      --ssl-port ${SRC_SSL_PORT}                 \
+      ${COMMON_BROKER_OPTIONS}                   \
+      --log-to-file $tmp_root/qpidd_src.log 2> /dev/null
+
+    broker_ports[0]=${SRC_TCP_PORT}
+
+    print "Starting DST broker"
+    $QPIDD_EXEC                                  \
+      --port=${DST_TCP_PORT}                     \
+      --ssl-port ${DST_SSL_PORT}                 \
+      ${COMMON_BROKER_OPTIONS}                   \
+      --log-to-file $tmp_root/qpidd_dst.log 2> /dev/null
+
+    broker_ports[1]=${DST_TCP_PORT}
+  fi
+}
+
+
+function halt_brokers {
+  n_brokers=${#broker_ports[@]}
+  print "Halting ${n_brokers} brokers."
+  for i in $(seq 0 $((${n_brokers} - 1)))
+  do
+    halt_port=${broker_ports[$i]}
+    print "Halting broker $i on port ${halt_port}"
+    $QPIDD_EXEC --port ${halt_port} --quit
+  done
+
+}
 
 
-#echo "-----------------------"
-#echo "Starting SRC broker"
-#echo "-----------------------"
-$QPIDD_EXEC                                  \
-  --port=${SRC_TCP_PORT}                     \
-  --ssl-port ${SRC_SSL_PORT}                 \
-  --ssl-sasl-no-dict                         \
-  --sasl-config=$sasl_config_file            \
-  --ssl-require-client-authentication        \
-  --auth yes                                 \
-  --ssl-cert-db $CERT_DIR                    \
-  --ssl-cert-password-file $CERT_PW_FILE     \
-  --ssl-cert-name $TEST_HOSTNAME             \
-  --no-data-dir                              \
-  --no-module-dir                            \
-  --load-module ${SSL_LIB}                   \
-  --mgmt-enable=yes                          \
-  --log-enable info+                         \
-  --log-source yes                           \
-  --daemon                                   \
-  --log-to-file $tmp_root/qpidd_src.log 2> /dev/null
-
-
-#echo "-----------------------"
-#echo "Starting DST broker"
-#echo "-----------------------"
-$QPIDD_EXEC                                  \
-  --port=${DST_TCP_PORT}                     \
-  --ssl-port ${DST_SSL_PORT}                 \
-  --ssl-cert-db $CERT_DIR                    \
-  --ssl-cert-password-file $CERT_PW_FILE     \
-  --ssl-cert-name $TEST_HOSTNAME             \
-  --ssl-sasl-no-dict                         \
-  --ssl-require-client-authentication        \
-  --sasl-config=$sasl_config_file            \
-  --no-data-dir                              \
-  --no-module-dir                            \
-  --load-module ${SSL_LIB}                   \
-  --mgmt-enable=yes                          \
-  --log-enable info+                         \
-  --log-source yes                           \
-  --daemon                                   \
-  $COMMON_BROKER_OPTIONS                     \
-  --log-to-file $tmp_root/qpidd_dst.log 2> /dev/null
+start_brokers $clustering_flag
 
 
 # I am not randomizing these names, because this test creates its own brokers.
@@ -170,76 +279,83 @@ ROUTING_KEY=sasl_fed_queue
 EXCHANGE_NAME=sasl_fedex
 
 
-#echo "-----------------------"
-#echo "add exchanges"
-#echo "-----------------------"
+print "add exchanges"
 $QPID_CONFIG_EXEC -a localhost:${SRC_TCP_PORT} add exchange direct $EXCHANGE_NAME
 $QPID_CONFIG_EXEC -a localhost:${DST_TCP_PORT} add exchange direct $EXCHANGE_NAME
 
 
-#echo "-----------------------"
-#echo "add queues"
-#echo "-----------------------"
+print "add queues"
 $QPID_CONFIG_EXEC -a localhost:${SRC_TCP_PORT} add queue $QUEUE_NAME
 $QPID_CONFIG_EXEC -a localhost:${DST_TCP_PORT} add queue $QUEUE_NAME
 
 
-#echo "-----------------------"
-#echo "create bindings"
-#echo "-----------------------"
+print "create bindings"
 $QPID_CONFIG_EXEC -a localhost:${SRC_TCP_PORT} bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY
 $QPID_CONFIG_EXEC -a localhost:${DST_TCP_PORT} bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY
 
 
-#echo "-----------------------"
-#echo "qpid-route route add"
-#echo "-----------------------"
+#
 # NOTE: The SRC broker *must* be referred to as $TEST_HOSTNAME, and not as "localhost".
 #       It must be referred to by the exact string given as the Common Name (CN) in the cert,
 #       which was created in the function create_certs, above.
-$QPID_ROUTE_EXEC route add localhost:${DST_TCP_PORT}   $TEST_HOSTNAME:${SRC_SSL_PORT} -t ssl $EXCHANGE_NAME $ROUTING_KEY "" "" EXTERNAL
-
-#echo "-----------------------"
-#echo "view the route :"
-#echo "-----------------------"
-#$PYTHON_COMMANDS/qpid-route route list localhost:${DST_TCP_PORT} 
-
-# I don't know how to avoid this sleep yet.  It has to come after route-creation.
-sleep 5
-
-n_messages=100
 
-./datagen --count ${n_messages} | ./sender --broker localhost --port ${SRC_TCP_PORT} --exchange ${EXCHANGE_NAME} --routing-key ${ROUTING_KEY} --mechanism ANONYMOUS
 
 
-#echo "-----------------------"
-#echo "Examine DST Broker"
-#echo "-----------------------"
-dst_message_count=`qpid-stat -q localhost:${DST_TCP_PORT} | grep sasl_fed_queue | awk '{print $2}'`
-
+#----------------------------------------------------------------
+# Use qpid-route to create the link, or the link+route, depending
+# on which of its several methods was requested.
+#----------------------------------------------------------------
+if   [ ${qpid_route_method} == "dynamic" ]; then
+  print "dynamic add"
+  $QPID_ROUTE_EXEC -t ssl dynamic add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME "" "" EXTERNAL
+elif [ ${qpid_route_method} == "link"   ];  then
+  print "link add"
+  $QPID_ROUTE_EXEC -t ssl link add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT}  EXTERNAL
+elif [ ${qpid_route_method} == "queue" ];   then
+  print "queue add"
+  $QPID_ROUTE_EXEC -t ssl queue add localhost:${DST_TCP_PORT}   $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME $ROUTING_KEY EXTERNAL
+elif [ ${qpid_route_method} == "route" ];   then
+  print "route add"
+  $QPID_ROUTE_EXEC -t ssl route add localhost:${DST_TCP_PORT}   $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME $ROUTING_KEY "" "" EXTERNAL
+else
+  echo "unknown method: |${qpid_route_method}|"
+  echo " choices are: dynamic|link|queue|route "
+  halt_brokers
+  exit 1
+fi
 
-#echo "-----------------------"
-#echo "Asking brokers to quit."
-#echo "-----------------------"
-$QPIDD_EXEC --port ${SRC_TCP_PORT} --quit
-$QPIDD_EXEC --port ${DST_TCP_PORT} --quit
 
+# I don't know how to avoid this sleep yet.  It has to come after route-creation 
+# to avoid false negatives.
+sleep 5
 
-#echo "-----------------------"
-#echo   "Removing temporary directory $tmp_root"
-#echo "-----------------------"
-rm -rf $tmp_root
+# This should work the same whether or not we are running a clustered test.
+# In the case of clustered tests, the status is not printed by qpid_route.
+# So in either case, I will look only at the transport field, which should be "ssl".
+print "check the link"
+link_status=$($QPID_ROUTE_EXEC link list localhost:${DST_TCP_PORT} | tail -1 | awk '{print $3}')
+
+halt_brokers
+
+sleep 1
+
+if [ ! ${link_status} ]; then
+  print "link_status is empty"
+  print "result: fail"
+  exit 2
+fi
 
-if [ "$dst_message_count" -eq  "$n_messages" ]; then
-  #echo "good: |$dst_message_count| == |$n_messages|"
+if [ ${link_status} == "ssl" ]; then
+  print "result: good"
+  # Only remove the tmp_root on success, to permit debugging.
+  print "Removing temporary directory $tmp_root"
+  rm -rf $tmp_root
   exit 0
-else
-   #echo "not ideal: |$dst_message_count| != |$n_messages|"
-  exit 1
 fi
 
-
-
+print "link_status has a bad value: ${link_status}"
+print "result: fail"
+exit 3
 
 
 

Modified: qpid/branches/QPID-2519/cpp/src/tests/sasl_test_setup.sh
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/sasl_test_setup.sh?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/sasl_test_setup.sh (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/sasl_test_setup.sh Fri Oct 21 14:42:12 2011
@@ -30,6 +30,7 @@ pwcheck_method: auxprop
 auxprop_plugin: sasldb
 sasldb_path: $PWD/sasl_config/qpidd.sasldb
 sql_select: dummy select
+mech_list: ANONYMOUS PLAIN DIGEST-MD5 EXTERNAL
 EOF
 
 # Populate temporary sasl db.

Modified: qpid/branches/QPID-2519/cpp/src/tests/sender.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/sender.cpp?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/sender.cpp (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/sender.cpp Fri Oct 21 14:42:12 2011
@@ -120,7 +120,7 @@ void Sender::execute(AsyncSession& sessi
     string data;
     while (getline(std::cin, data)) {
         message.setData(data);
-        message.getHeaders().setInt("SN", ++sent);
+        //message.getHeaders().setInt("SN", ++sent);
         string matchKey;
         if (lvqMatchValues && getline(lvqMatchValues, matchKey)) {
             message.getHeaders().setString(QueueOptions::strLVQMatchProperty, matchKey);

Modified: qpid/branches/QPID-2519/cpp/src/tests/ssl_test
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/ssl_test?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/ssl_test (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/ssl_test Fri Oct 21 14:42:12 2011
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 
 #
 # Licensed to the Apache Software Foundation (ASF) under one
@@ -47,9 +47,13 @@ delete_certs() {
     fi
 }
 
-COMMON_OPTS="--daemon --no-data-dir --no-module-dir --auth no --config $CONFIG --load-module $SSL_LIB --ssl-cert-db $CERT_DIR --ssl-cert-password-file $CERT_PW_FILE --ssl-cert-name $TEST_HOSTNAME --require-encryption"
+COMMON_OPTS="--daemon --no-data-dir --no-module-dir --config $CONFIG --load-module $SSL_LIB --ssl-cert-db $CERT_DIR --ssl-cert-password-file $CERT_PW_FILE --ssl-cert-name $TEST_HOSTNAME"
 start_broker() { # $1 = extra opts
-    ../qpidd --transport ssl --port 0 --ssl-port 0 $COMMON_OPTS $1;
+    ../qpidd --transport ssl --port 0 --ssl-port 0 $COMMON_OPTS --require-encryption --auth no $1;
+}
+
+start_authenticating_broker() {
+    ../qpidd --transport ssl --port 0 --ssl-port 0 $COMMON_OPTS --require-encryption --ssl-sasl-no-dict --ssl-require-client-authentication --auth yes;
 }
 
 stop_brokers() {
@@ -64,6 +68,13 @@ cleanup() {
     delete_certs
 }
 
+pick_port() {
+    # We need a fixed port to set --cluster-url. Use qpidd to pick a free port.
+    PICK=`../qpidd --no-module-dir -dp0`
+    ../qpidd --no-module-dir -qp $PICK
+    echo $PICK
+}
+
 CERTUTIL=$(type -p certutil)
 if [[ !(-x $CERTUTIL) ]] ; then
     echo "No certutil, skipping ssl test";
@@ -93,7 +104,7 @@ test "$MSG" = "hello" || { echo "receive
 
 #### Client Authentication tests
 
-PORT2=`start_broker --ssl-require-client-authentication`  || error "Could not start broker"
+PORT2=`start_authenticating_broker`  || error "Could not start broker"
 echo "Running SSL client authentication test on port $PORT2"
 URL=amqp:ssl:$TEST_HOSTNAME:$PORT2
 
@@ -109,19 +120,22 @@ test "$MSG3" = "" || { echo "receive suc
 
 stop_brokers
 
+#Test multiplexed connection where SSL and plain TCP are served by the same port
+PORT=`pick_port`; ../qpidd --port $PORT --ssl-port $PORT $COMMON_OPTS --transport ssl --auth no
+echo "Running multiplexed SSL/TCP test on $PORT"
+
+./qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary || { echo "SSL on multiplexed connection failed!"; exit 1; }
+./qpid-perftest --count ${COUNT} --port ${PORT} -P tcp -b $TEST_HOSTNAME --summary || { echo "Plain TCP on multiplexed connection failed!"; exit 1; }
+
+stop_brokers
+
 test -z $CLUSTER_LIB && exit 0	# Exit if cluster not supported.
 
 ## Test failover in a cluster using SSL only
 . $srcdir/ais_check		# Will exit if clustering not enabled.
 
-pick_port() {
-    # We need a fixed port to set --cluster-url. Use qpidd to pick a free port.
-    PICK=`../qpidd --no-module-dir -dp0`
-    ../qpidd --no-module-dir -qp $PICK
-    echo $PICK
-}
 ssl_cluster_broker() {		# $1 = port
-    ../qpidd $COMMON_OPTS --load-module  $CLUSTER_LIB --cluster-name ssl_test.$HOSTNAME.$$ --cluster-url amqp:ssl:$TEST_HOSTNAME:$1 --port 0 --ssl-port $1 --transport ssl > /dev/null
+    ../qpidd $COMMON_OPTS --require-encryption --auth no --load-module  $CLUSTER_LIB --cluster-name ssl_test.$HOSTNAME.$$ --cluster-url amqp:ssl:$TEST_HOSTNAME:$1 --port 0 --ssl-port $1 --transport ssl > /dev/null
     # Wait for broker to be ready
     qpid-ping -Pssl -b $TEST_HOSTNAME -qp $1 || { echo "Cannot connect to broker on $1"; exit 1; }
     echo "Running SSL cluster broker on port $1"

Modified: qpid/branches/QPID-2519/cpp/src/tests/windows/DisableWin32ErrorWindows.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/tests/windows/DisableWin32ErrorWindows.cpp?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/tests/windows/DisableWin32ErrorWindows.cpp (original)
+++ qpid/branches/QPID-2519/cpp/src/tests/windows/DisableWin32ErrorWindows.cpp Fri Oct 21 14:42:12 2011
@@ -26,7 +26,9 @@
 // include this file with the executable being built. If the default
 // behaviors are desired, don't include this file in the build.
 
+#if defined(_MSC_VER)
 #include <crtdbg.h>
+#endif
 #include <windows.h>
 #include <iostream>
 
@@ -53,12 +55,14 @@ static redirect_errors_to_stderr block;
 
 redirect_errors_to_stderr::redirect_errors_to_stderr()
 {
+#if defined(_MSC_VER)
     _CrtSetReportMode (_CRT_WARN, _CRTDBG_MODE_FILE);
     _CrtSetReportFile (_CRT_WARN, _CRTDBG_FILE_STDERR);
     _CrtSetReportMode (_CRT_ERROR, _CRTDBG_MODE_FILE);
     _CrtSetReportFile (_CRT_ERROR, _CRTDBG_FILE_STDERR);
     _CrtSetReportMode (_CRT_ASSERT, _CRTDBG_MODE_FILE);
     _CrtSetReportFile (_CRT_ASSERT, _CRTDBG_FILE_STDERR);
+#endif
 
     // Prevent the system from displaying the critical-error-handler
     // and can't-open-file message boxes.

Modified: qpid/branches/QPID-2519/cpp/src/windows/QpiddBroker.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/windows/QpiddBroker.cpp?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/windows/QpiddBroker.cpp (original)
+++ qpid/branches/QPID-2519/cpp/src/windows/QpiddBroker.cpp Fri Oct 21 14:42:12 2011
@@ -147,7 +147,7 @@ NamedSharedMemory<T>::NamedSharedMemory(
     name(n),
     memory(NULL),
     data(0)
-{};
+{}
 
 template <typename T>
 NamedSharedMemory<T>::~NamedSharedMemory() {
@@ -155,7 +155,7 @@ NamedSharedMemory<T>::~NamedSharedMemory
         ::UnmapViewOfFile(data);
     if (memory != NULL)
         ::CloseHandle(memory);
-};
+}
 
 template <typename T>
 T& NamedSharedMemory<T>::create() {

Modified: qpid/branches/QPID-2519/cpp/src/windows/resources/template-resource.rc
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/windows/resources/template-resource.rc?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/windows/resources/template-resource.rc (original)
+++ qpid/branches/QPID-2519/cpp/src/windows/resources/template-resource.rc Fri Oct 21 14:42:12 2011
@@ -24,7 +24,7 @@
 //
 // Generated from the TEXTINCLUDE 2 resource.
 //
-#include "afxres.h"
+#include "windows.h"
 
 /////////////////////////////////////////////////////////////////////////////
 #undef APSTUDIO_READONLY_SYMBOLS

Modified: qpid/branches/QPID-2519/cpp/src/xml.mk
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/src/xml.mk?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/src/xml.mk (original)
+++ qpid/branches/QPID-2519/cpp/src/xml.mk Fri Oct 21 14:42:12 2011
@@ -16,7 +16,7 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-dmodule_LTLIBRARIES += xml.la
+dmoduleexec_LTLIBRARIES += xml.la
 
 xml_la_SOURCES =  \
 	qpid/xml/XmlExchange.cpp \

Modified: qpid/branches/QPID-2519/cpp/xml/cluster.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/cpp/xml/cluster.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/cpp/xml/cluster.xml (original)
+++ qpid/branches/QPID-2519/cpp/xml/cluster.xml Fri Oct 21 14:42:12 2011
@@ -8,9 +8,9 @@
 - to you under the Apache License, Version 2.0 (the
 - "License"); you may not use this file except in compliance
 - with the License.  You may obtain a copy of the License at
-- 
+-
 -   http://www.apache.org/licenses/LICENSE-2.0
-- 
+-
 - Unless required by applicable law or agreed to in writing,
 - software distributed under the License is distributed on an
 - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@@ -78,10 +78,6 @@
       <field name="left" type="vbin16"/> <!-- packed member-id array -->
     </control>
 
-    <control name="message-expired" code="0x12">
-      <field name="id" type="uint64"/>
-    </control>
-    
     <domain name="error-type" type="uint8" label="Types of error">
       <enum>
 	<choice name="none" value="0"/>
@@ -89,7 +85,7 @@
 	<choice name="connection" value="2"/>
       </enum>
     </domain>
-	
+
     <!-- Check for error consistency across the cluster -->
     <control name="error-check" code="0x14">
       <field name="type" type="error-type"/>
@@ -116,6 +112,11 @@
       <field name="message" type="vbin32"/>
     </control>
 
+    <!-- Update the cluster time -->
+    <control name="clock" code="0x22">
+      <field name="time" type="uint64"/>
+    </control>
+
   </class>
 
   <!-- Controls associated with a specific connection. -->
@@ -149,7 +150,7 @@
 
     <!-- Abort a connection that is sending invalid data. -->
     <control name="abort" code="0x4"/>
-    
+
     <!-- Update controls. Sent to a new broker in joining mode.
 	 A connection is updated as followed:
 	 - send the shadow's management ID in shadow-perpare on the update connection
@@ -183,7 +184,7 @@
       <field name="position" type="sequence-no"/>
       <field name="tag" type="str8"/>
       <field name="id" type="sequence-no"/>
-      <field name="acquired" type="bit"/>		       <!--If not set, message follows. -->
+      <field name="acquired" type="bit"/> <!--If not set, message is on update queue. -->
       <field name="accepted" type="bit"/>
       <field name="cancelled" type="bit"/>
       <field name="completed" type="bit"/>
@@ -192,9 +193,9 @@
       <field name="enqueued" type="bit"/>
       <field name="credit" type="uint32"/>
     </control>
-    
+
     <!-- Tx transaction state. -->
-    <control name="tx-start" code="0x12"/> 
+    <control name="tx-start" code="0x12"/>
     <control name="tx-accept" code="0x13"> <field name="commands" type="sequence-set"/> </control>
     <control name="tx-dequeue" code="0x14"> <field name="queue" type="str8"/> </control>
     <control name="tx-enqueue" code="0x15"> <field name="queue" type="str8"/> </control>
@@ -204,13 +205,37 @@
     </control>
     <control name="tx-end" code="0x17"/>
     <control name="accumulated-ack" code="0x18"> <field name="commands" type="sequence-set"/> </control>
-    
+
     <!-- Consumers in the connection's output task -->
     <control name="output-task" code="0x19">
       <field name="channel" type="uint16"/>
       <field name="name" type="str8"/>
     </control>
 
+    <!-- Dtx transaction state. -->
+    <control name="dtx-start" code="0x1A">
+      <field name="xid" type="str16"/>
+      <field name="ended" type="bit"/>
+      <field name="suspended" type="bit"/>
+      <field name="failed" type="bit"/>
+      <field name="expired" type="bit"/>
+    </control>
+    <control name="dtx-end" code="0x1B"/>
+
+    <control name="dtx-ack" code="0x1C"/>
+
+    <control name="dtx-buffer-ref" code="0x1D">
+      <field name="xid" type="str16"/>
+      <field name="index" type="uint32"/>
+      <field name="suspended" type="bit"/>
+    </control>
+
+    <control name="dtx-work-record" code="0x1E">
+      <field name="xid" type="str16"/>
+      <field name="prepared" type="bit"/>
+      <field name="timeout" type="uint32"/>
+    </control>
+
     <!-- Complete a session state update. -->
     <control name="session-state" code="0x1F">
       <!-- Target session deduced from channel number.  -->
@@ -222,6 +247,7 @@
       <field name="received" type="sequence-no"/>	       <!-- Received up to here (>= expected) -->
       <field name="unknown-completed" type="sequence-set"/>    <!-- Completed but not known to peer. -->
       <field name="received-incomplete" type="sequence-set"/>  <!-- Received and incomplete -->
+      <field name="dtx-selected" type="bit"/>
     </control>
 
     <!-- Complete a shadow connection update. -->
@@ -252,10 +278,6 @@
 
     <!-- Replicate encoded exchanges/queues. -->
     <control name="exchange" code="0x31"><field name="encoded" type="str32"/></control>
-    <control name="queue" code="0x32"><field name="encoded" type="str32"/></control>
-
-    <!-- Set expiry-id for subsequent messages. -->
-    <control name="expiry-id" code="0x33"><field name="expiry-id" type="uint64"/></control>
 
     <!-- Add a listener to a queue -->
     <control name="add-queue-listener" code="0x34">
@@ -282,6 +304,26 @@
       <field name="position" type="uint8"/>
       <field name="count" type="uint8"/>
     </control>
+
+    <!-- Replicate a QueueObserver for a given queue. -->
+    <control name="queue-observer-state" code="0x39">
+      <field name="queue" type="str8"/>
+      <field name="observer-id" type="str8"/>
+      <field name="state" type="map"/>    <!-- "name"=value -->
+    </control>
+
+    <!-- Update the cluster time -->
+    <control name="clock" code="0x40">
+      <field name="time" type="uint64"/>
+    </control>
+
+    <!-- Update a queue's dequeue rate -->
+    <control name="queue-dequeue-since-purge-state" code="0x41">
+      <field name="queue" type="str8"/>
+      <field name="dequeueSincePurge" type="uint32"/>
+    </control>
+
+
   </class>
 
 </amqp>

Modified: qpid/branches/QPID-2519/doc/book/build-book.sh
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/build-book.sh?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/build-book.sh (original)
+++ qpid/branches/QPID-2519/doc/book/build-book.sh Fri Oct 21 14:42:12 2011
@@ -29,6 +29,12 @@
 #
 ########################################################################
 
+# DOCBOOK XSL STYLESHEET LOCATION
+# Fedora, RHEL:
+DOCBOOK_XSL=/usr/share/sgml/docbook/xsl-stylesheets
+# Ubuntu:
+# DOCBOOK_XSL=/usr/share/sgml/docbook/stylesheet/xsl/nwalsh
+
 rm -rf build/$1
 mkdir -p build/$1
 mkdir -p build/$1/html-single
@@ -38,16 +44,16 @@ cp -r src/images build/$1/html-single
 cp -r src/images build/$1/html
 
 # Create single-page .html
-xsltproc --xinclude --stringparam  section.autolabel 1  --stringparam  callout.graphics 0  --stringparam  callout.unicode 0 --stringparam section.label.includes.component.label 1 /usr/share/sgml/docbook/xsl-stylesheets/html/docbook.xsl src/$1.xml >build/$1/html-single/$1.html
+xsltproc --xinclude --stringparam  section.autolabel 1  --stringparam  callout.graphics 0  --stringparam  callout.unicode 0 --stringparam section.label.includes.component.label 1 ${DOCBOOK_XSL}/html/docbook.xsl src/$1.xml >build/$1/html-single/$1.html
 
 # Create chunked .html
 INFILE=$(readlink -f src/$1.xml)
 pushd build/$1/html
-xsltproc --xinclude --stringparam  chunk.section.depth 1  --stringparam  section.autolabel 1  --stringparam  callout.graphics 0  --stringparam  callout.unicode 0 --stringparam section.label.includes.component.label 1 /usr/share/sgml/docbook/xsl-stylesheets/html/chunk.xsl $INFILE
+xsltproc --xinclude --stringparam  chunk.section.depth 1  --stringparam  section.autolabel 1  --stringparam  callout.graphics 0  --stringparam  callout.unicode 0 --stringparam section.label.includes.component.label 1 ${DOCBOOK_XSL}/html/chunk.xsl $INFILE
 popd
 
 # Create the .fo
-xsltproc --xinclude --stringparam  section.autolabel 1  --stringparam  callout.graphics 0  --stringparam  callout.unicode 0 --stringparam section.label.includes.component.label 1 /usr/share/sgml/docbook/xsl-stylesheets/fo/docbook.xsl src/$1.xml >build/$1/pdf/$1.fo
+xsltproc --xinclude --stringparam  section.autolabel 1  --stringparam  callout.graphics 0  --stringparam  callout.unicode 0 --stringparam section.label.includes.component.label 1 ${DOCBOOK_XSL}/fo/docbook.xsl src/$1.xml >build/$1/pdf/$1.fo
 
 # Use Apache FOP to create the PDF
 fop build/$1/pdf/$1.fo build/$1/pdf/$1.pdf

Modified: qpid/branches/QPID-2519/doc/book/src/AMQP-Messaging-Broker-CPP-Book.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/src/AMQP-Messaging-Broker-CPP-Book.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/src/AMQP-Messaging-Broker-CPP-Book.xml (original)
+++ qpid/branches/QPID-2519/doc/book/src/AMQP-Messaging-Broker-CPP-Book.xml Fri Oct 21 14:42:12 2011
@@ -56,8 +56,10 @@
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="LVQ.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="queue-state-replication.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Starting-a-cluster.xml"/>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="producer-flow-control.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="AMQP-Compatibility.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Qpid-Interoperability-Documentation.xml"/>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Using-message-groups.xml"/>
 
 </chapter>
 

Modified: qpid/branches/QPID-2519/doc/book/src/AMQP-Messaging-Broker-CPP.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/src/AMQP-Messaging-Broker-CPP.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/src/AMQP-Messaging-Broker-CPP.xml (original)
+++ qpid/branches/QPID-2519/doc/book/src/AMQP-Messaging-Broker-CPP.xml Fri Oct 21 14:42:12 2011
@@ -50,7 +50,9 @@
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="LVQ.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="queue-state-replication.xml"/>
     <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Starting-a-cluster.xml"/>
-    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ACL.xml"/> 
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ACL.xml"/>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="producer-flow-control.xml"/>
+    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Using-message-groups.xml"/>
 </chapter>
  
 

Modified: qpid/branches/QPID-2519/doc/book/src/Cheat-Sheet-for-configuring-Queue-Options.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/src/Cheat-Sheet-for-configuring-Queue-Options.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/src/Cheat-Sheet-for-configuring-Queue-Options.xml (original)
+++ qpid/branches/QPID-2519/doc/book/src/Cheat-Sheet-for-configuring-Queue-Options.xml Fri Oct 21 14:42:12 2011
@@ -65,6 +65,16 @@
                 </itemizedlist>
               </para></listitem>
             </itemizedlist>
+
+	  <para>
+            The 0.10 C++ Broker supports the following additional Queue configuration options:
+          </para>
+          <itemizedlist>
+            <listitem><para>
+              <xref linkend="producer-flow-control"/>
+            </para></listitem>
+          </itemizedlist>
+
           <section role="h3" id="CheatSheetforconfiguringQueueOptions-ApplyingQueueSizingConstraints"><title>
             Applying Queue Sizing Constraints
           </title>

Modified: qpid/branches/QPID-2519/doc/book/src/Configure-Java-Qpid-to-use-a-SSL-connection.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/src/Configure-Java-Qpid-to-use-a-SSL-connection.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/src/Configure-Java-Qpid-to-use-a-SSL-connection.xml (original)
+++ qpid/branches/QPID-2519/doc/book/src/Configure-Java-Qpid-to-use-a-SSL-connection.xml Fri Oct 21 14:42:12 2011
@@ -51,8 +51,8 @@
 &lt;ssl&gt;
     &lt;enabled&gt;true&lt;/enabled&gt;
     &lt;sslOnly&gt;true&lt;/sslOnly&gt;
-    &lt;keystorePath&gt;/path/to/keystore.ks&lt;/keystorePath&gt;
-    &lt;keystorePassword&gt;keystorepass&lt;/keystorePassword&gt;
+    &lt;keyStorePath&gt;/path/to/keystore.ks&lt;/keyStorePath&gt;
+    &lt;keyStorePassword&gt;keystorepass&lt;/keyStorePassword&gt;
 &lt;/ssl&gt;
 </programlisting>
             

Modified: qpid/branches/QPID-2519/doc/book/src/Programming-In-Apache-Qpid.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/src/Programming-In-Apache-Qpid.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/src/Programming-In-Apache-Qpid.xml (original)
+++ qpid/branches/QPID-2519/doc/book/src/Programming-In-Apache-Qpid.xml Fri Oct 21 14:42:12 2011
@@ -1722,7 +1722,7 @@ try {
 
 	      <row>
 		<entry>
-		  username
+		  <literal>username</literal>
 		</entry>
 		<entry>
 		  string
@@ -1733,7 +1733,7 @@ try {
 	      </row>
 	      <row>
 		<entry>
-		  password
+		  <literal>password</literal>
 		</entry>
 		<entry>
 		  string
@@ -1744,35 +1744,22 @@ try {
 	      </row>
 	      <row>
 		<entry>
-		  sasl-mechanism
+		  <literal>sasl_mechanisms</literal>
 		</entry>
 		<entry>
 		  string
 		</entry>
 		<entry>
-		  The specific SASL mechanism to use with the c++
-		  client when authenticating to the broker. Only a
-		  single value can be specified at present. [C++ only].
-		</entry>
-	      </row>
-	      <row>
-		<entry>
-		  sasl_mechanisms
-		</entry>
-		<entry>
-		  string
-		</entry>
-		<entry>
-		  The specific SASL mechanism to use with the python
+		  The specific SASL mechanisms to use with the python
 		  client when authenticating to the broker. The value
-		  is a space separated list in order of preference. [Python only].
+		  is a space separated list.
 		</entry>
 	      </row>
 
 
 	      <row>
 		<entry>
-		  reconnect
+		  <literal>reconnect</literal>
 		</entry>
 		<entry>
 		  boolean
@@ -1783,7 +1770,7 @@ try {
 	      </row>
 	      <row>
 		<entry>
-		  <literal>reconnect_timeout&nbsp;[Python]</literal> <literal>reconnect-timeout&nbsp;[C++]</literal>
+		  <literal>reconnect_timeout</literal>
 		</entry>
 		<entry>
 		  integer
@@ -1794,7 +1781,7 @@ try {
 	      </row>
 	      <row>
 		<entry>
-		  <literal>reconnect_limit&nbsp;[Python]</literal> <literal>reconnect-limit&nbsp;[C++]</literal>
+		  <literal>reconnect_limit</literal>
 		</entry>
 		<entry>
 		  integer
@@ -1805,7 +1792,7 @@ try {
 	      </row>
 	      <row>
 		<entry>
-		  <literal>reconnect_interval_min&nbsp;[Python]</literal> <literal>reconnect-interval-min&nbsp;[C++]</literal>
+		  <literal>reconnect_interval_min</literal>
 		</entry>
 		<entry>
 		  integer representing time in seconds
@@ -1816,7 +1803,7 @@ try {
 	      </row>
 	      <row>
 		<entry>
-		  <literal>reconnect_interval_max&nbsp;[Python]</literal> <literal>reconnect-interval-max&nbsp;[C++]</literal>
+		  <literal>reconnect_interval_max</literal>
 		</entry>
 		<entry>
 		  integer representing time in seconds
@@ -1827,7 +1814,7 @@ try {
 	      </row>
 	      <row>
 		<entry>
-		  <literal>reconnect_interval&nbsp;[Python]</literal> <literal>reconnect-interval&nbsp;[C++]</literal>
+		  <literal>reconnect_interval</literal>
 		</entry>
 		<entry>
 		  integer representing time in seconds
@@ -1839,7 +1826,7 @@ try {
 
 	      <row>
 	        <entry>
-	          heartbeat
+	          <literal>heartbeat</literal>
 	        </entry>
 	        <entry>
 	          integer representing time in seconds
@@ -1852,7 +1839,7 @@ try {
 	      </row>
 	      <row>
 	        <entry>
-	          protocol
+	          <literal>protocol</literal>
 	        </entry>
 	        <entry>
 	          string
@@ -1863,7 +1850,7 @@ try {
 	      </row>
 	      <row>
 	        <entry>
-	          tcp-nodelay
+	          <literal>tcp-nodelay</literal>
 	        </entry>
 	        <entry>
 	          boolean
@@ -3456,9 +3443,8 @@ log4j.appender.console.layout.Conversion
 	              <entry>qpid.amqp.version</entry>
 	              <entry>string</entry>
 	              <entry>0-10</entry>
-                  <entry>Sets the AMQP version to be used - currently supports one of {0-8,0-9,0-91,0-10}</entry>
-                </row>
-
+                      <entry><para>Sets the AMQP version to be used - currently supports one of {0-8,0-9,0-91,0-10}.</para><para>The client will begin negotiation at the specified version and only negotiate downwards if the Broker does not support the specified version.</para></entry>
+                    </row>
 	            <row>
 	              <entry>qpid.heartbeat</entry>
 	              <entry>int</entry>
@@ -3623,15 +3609,20 @@ log4j.appender.console.layout.Conversion
 	              <entry>qpid.transport</entry>
 	              <entry>string</entry>
 	              <entry>org.apache.qpid.transport.network.io.IoNetworkTransport</entry>
-                  <entry><para>The transport implementation to be used.</para><para>A user could specify an alternative transport mechanism that implements the <varname>org.apache.qpid.transport.network.NetworkTransport</varname> interface.</para></entry>
-                </row>
-
+                      <entry><para>The transport implementation to be used.</para><para>A user could specify an alternative transport mechanism that implements the <varname>org.apache.qpid.transport.network.NetworkTransport</varname> interface.</para></entry>
+                    </row>
+	            <row>
+	              <entry>qpid.sync_op_timeout</entry>
+	              <entry>long</entry>
+	              <entry>60000</entry>
+                      <entry><para>The length of time (in milliseconds) to wait for a synchronous operation to complete.</para><para>For compatibility with older clients, the synonym <varname>amqj.default_syncwrite_timeout</varname> is supported.</para></entry>
+                    </row>
 	            <row>
 	              <entry>amqj.tcp_nodelay</entry>
 	              <entry>boolean</entry>
 	              <entry>false</entry>
-                  <entry><para>Sets the TCP_NODELAY property of the underlying socket.</para><para>This could also be set per connection as well (see connection paramters).</para></entry>
-                </row>
+                      <entry><para>Sets the TCP_NODELAY property of the underlying socket.</para><para>This could also be set per connection as well (see connection paramters).</para></entry>
+                    </row>
               </tbody>
             </tgroup>
           </table>

Modified: qpid/branches/QPID-2519/doc/book/src/Qpid-Java-FAQ.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/src/Qpid-Java-FAQ.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/src/Qpid-Java-FAQ.xml (original)
+++ qpid/branches/QPID-2519/doc/book/src/Qpid-Java-FAQ.xml Fri Oct 21 14:42:12 2011
@@ -736,35 +736,6 @@ amqj.logging.level
           </para>
 <!--h3--></section>
 
-	  <section role="h3" id="QpidJavaFAQ-HowdoIuseanInVMBrokerformyowntests-3F"><title>
-            How do I
-            use an InVM Broker for my own tests?
-          </title>
-
-	  <para>
-            I would take a look at the testPassiveTTL in
-	    <ulink url="https://svn.apache.org/repos/asf/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/server/queue/TimeToLiveTest.java">TimeToLiveTest.java</ulink>
-          </para><para>
-            The setUp and tearDown methods show how to correctly start up a
-            broker for InVM testing. If you write your tests using a file for
-            the JNDI you can then very easily swap between running your tests
-            InVM and against a real broker.
-          </para><para>
-            See our <xref linkend="How-to-Use-JNDI"/> on how to confgure it
-          </para><para>
-            Basically though you just need to set two System Properites:
-          </para><para>
-            java.naming.factory.initial =
-            org.apache.qpid.jndi.PropertiesFileInitialContextFactory
-            java.naming.provider.url = &lt;your JNDI file&gt;
-          </para><para>
-            and call getInitialContext() in your code.
-          </para><para>
-            You will of course need to have the broker libraries on your
-            class path for this to run.
-          </para>
-<!--h3--></section>
-
 	  <section role="h3" id="QpidJavaFAQ-HowcanIinspectthecontentsofmyMessageStore-3F"><title>
             How
             can I inspect the contents of my MessageStore?
@@ -907,31 +878,6 @@ java.lang.NullPointerException 
           </para>
 <!--h3--></section>
 
-	  <section role="h3" id="QpidJavaFAQ-Clientkeepsthrowing-27Serverdidnotrespondinatimelyfashion-27-5Cerrorcode408-3ARequestTimeout-5C."><title>
-            Client keeps throwing 'Server did not respond in a timely
-            fashion' [error code 408: Request Timeout].
-          </title>
-
-	  <para>
-            Certain operations wait for a response from the Server. One such
-            operations is commit. If the server does not respond to the
-            commit request within a set time a Request Timeout [error code:
-            408] exception is thrown (Server did not respond in a timely
-            fashion). This is to ensure that a server that has hung does not
-            cause the client process to be come unresponsive.
-          </para><para>
-            However, it is possible that the server just needs a long time to
-            process a give request. For example, sending a large persistent
-            message when using a persistent store will take some time to a)
-            Transfer accross the network and b) to be fully written to disk.
-          </para><para>
-            These situations require that the default timeout value be
-            increased. A cilent <xref linkend="qpid_System-Properties"/> 'amqj.default_syncwrite_timeout' can be set
-            on the client to increase the wait time. The default in 0.5 is
-            30000 (30s).
-          </para>
-<!--h3--></section>
-
 	  <section role="h3" id="QpidJavaFAQ-CanauseTCPKEEPALIVEorAMQPheartbeatingtokeepmyconnectionopen-3F"><title>
             Can a use TCP_KEEPALIVE or AMQP heartbeating to keep my
             connection open?

Modified: qpid/branches/QPID-2519/doc/book/src/Security.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/src/Security.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/src/Security.xml (original)
+++ qpid/branches/QPID-2519/doc/book/src/Security.xml Fri Oct 21 14:42:12 2011
@@ -1,5 +1,25 @@
 <?xml version='1.0' encoding='utf-8' ?>
 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
 <section id="chap-Messaging_User_Guide-Security">
 	<title>Security</title>
 	 <para>

Modified: qpid/branches/QPID-2519/doc/book/src/System-Properties.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/book/src/System-Properties.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/book/src/System-Properties.xml (original)
+++ qpid/branches/QPID-2519/doc/book/src/System-Properties.xml Fri Oct 21 14:42:12 2011
@@ -135,7 +135,7 @@
 
 
 	<varlistentry>
-	  <term>amqj.default_syncwrite_timeout</term>
+	  <term>qpid.sync_op_timeout</term>
 	  <listitem>
 	    <variablelist>
 	      <varlistentry>
@@ -144,12 +144,11 @@
 	      </varlistentry>
 	      <varlistentry>
 		<term>Default</term>
-		<listitem><para>30000</para></listitem>
+		<listitem><para>60000</para></listitem>
 	      </varlistentry>
 	    </variablelist>
-	    <para> The number length of time in millisecond to wait
-	    for a synchronous write to complete.
-            </para>
+	    <para>The length of time (in milliseconds) to wait for a synchronous operation to complete.
+                  For compatibility with older	clients, the synonym amqj.default_syncwrite_timeout is supported.</para>
 	  </listitem>
 	</varlistentry>       
 
@@ -193,7 +192,7 @@
 
 
 	<varlistentry>
-	  <term>amqj.tcpNoDelay</term>
+	  <term>amqj.tcp_nodelay</term>
 	  <listitem>
 	    <variablelist>
 	      <varlistentry>
@@ -211,65 +210,6 @@
 	</varlistentry>       
 
 	<varlistentry>
-	  <term>amqj.sendBufferSize</term>
-	  <listitem>
-	    <variablelist>
-	      <varlistentry>
-		<term>integer</term>
-		<listitem><para>Boolean</para></listitem>
-	      </varlistentry>
-	      <varlistentry>
-		<term>Default</term>
-		<listitem><para>32768</para></listitem>
-	      </varlistentry>
-	    </variablelist>
-	    <para>This is the default buffer sized created by Mina.
-            </para>
-	  </listitem>
-	</varlistentry>   
-
-	<varlistentry>
-	  <term>amqj.receiveBufferSize</term>
-	  <listitem>
-	    <variablelist>
-	      <varlistentry>
-		<term>Type</term>
-		<listitem><para>integer</para></listitem>
-	      </varlistentry>
-	      <varlistentry>
-		<term>Default</term>
-		<listitem><para>32768</para></listitem>
-	      </varlistentry>
-	    </variablelist>
-	    <para>This is the default buffer sized created by Mina.
-            </para>
-	  </listitem>
-	</varlistentry>      
-
-
-	<varlistentry>
-	  <term>amqj.protocolprovider.class</term>
-	  <listitem>
-	    <variablelist>
-	      <varlistentry>
-		<term>Type</term>
-		<listitem><para>String</para></listitem>
-	      </varlistentry>
-	      <varlistentry>
-		<term>Default</term>
-		<listitem><para>org.apache.qpid.server.protocol.AMQPFastProtocolHandler</para></listitem>
-	      </varlistentry>
-	    </variablelist>
-	    <para> This specifies the default IoHandlerAdapter that
-	    represents the InVM broker. The IoHandlerAdapter must have
-	    a constructor that takes a single Integer that represents
-	    the InVM port number.
-            </para>
-	  </listitem>
-	</varlistentry>          
-              
-                 
-	<varlistentry>
 	  <term>amqj.protocol.logging.level</term>
 	  <listitem>
 	    <variablelist>

Modified: qpid/branches/QPID-2519/doc/website/README.txt
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/doc/website/README.txt?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/doc/website/README.txt (original)
+++ qpid/branches/QPID-2519/doc/website/README.txt Fri Oct 21 14:42:12 2011
@@ -1,26 +1,10 @@
-This is the source directory for creating web pages for the Qpid web
-site.
+To edit the website, check out the /site repo area:
 
-The template used for all pages (template.html), stylesheet
-(style.css), and images are in the ./template directory.
+    svn co https://svn.apache.org/repos/asf/qpid/site
 
-The tools directory contains a very simple Python script (wrap) that
-combines a template and content to create static html pages. Content
-should be written in XHTML, with one <div/> element at the root - see
-./content/home.html for an example.
+The HTML files for the site reside in the docs directory, where a README
+can be found to describe the process of adding new content.
 
-Use wrap like this:
+It is no longer necessary to generate the main website pages, the live files
+are now edited directly, and are deployed to the web server after check in.
 
-$ tools/wrap template/template.html content/<filename> build/<filename>
-
-Content for the main pages should be check into the content
-directory. Content for documentation is created in the ../book
-directory.
-
-To publish generated content, check out the website repo:
-
-$ svn co https://svn.apache.org/repos/asf/qpid/site/docs
-
-Copy generated content (NOT the source!) into the website repo, add it
-using $ svn add, and commit it. When it is committed, it appears on
-the website.

Modified: qpid/branches/QPID-2519/extras/qmf/setup.py
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/extras/qmf/setup.py?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/extras/qmf/setup.py (original)
+++ qpid/branches/QPID-2519/extras/qmf/setup.py Fri Oct 21 14:42:12 2011
@@ -20,10 +20,10 @@
 from distutils.core import setup
 
 setup(name="qpid-qmf",
-      version="0.9",
+      version="0.13",
       author="Apache Qpid",
       author_email="dev@qpid.apache.org",
-      packages=["qmf", "qmf2", "qmf2.tests"],
+      packages=["qmf"],
       package_dir={"": "src/py"},
       url="http://qpid.apache.org/",
       license="Apache Software License",

Modified: qpid/branches/QPID-2519/extras/qmf/src/py/qmf/console.py
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/extras/qmf/src/py/qmf/console.py?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/extras/qmf/src/py/qmf/console.py (original)
+++ qpid/branches/QPID-2519/extras/qmf/src/py/qmf/console.py Fri Oct 21 14:42:12 2011
@@ -107,8 +107,8 @@ class Console:
 # BrokerURL
 #===================================================================================================
 class BrokerURL(URL):
-  def __init__(self, text):
-    URL.__init__(self, text)
+  def __init__(self, *args, **kwargs):
+    URL.__init__(self, *args, **kwargs)
     if self.port is None:
       if self.scheme == URL.AMQPS:
         self.port = 5671
@@ -122,7 +122,7 @@ class BrokerURL(URL):
       self.authPass = str(self.password)
 
   def name(self):
-    return self.host + ":" + str(self.port)
+    return str(self)
 
   def match(self, host, port):
     return socket.getaddrinfo(self.host, self.port)[0][4] == socket.getaddrinfo(host, port)[0][4]
@@ -359,8 +359,8 @@ class Object(object):
         for arg in method.arguments:
           if arg.dir.find("I") != -1:
             count += 1
-        if count != len(args):
-          raise Exception("Incorrect number of arguments: expected %d, got %d" % (count, len(args)))
+        if count != len(args) + len(kwargs):
+          raise Exception("Incorrect number of arguments: expected %d, got %d" % (count, len(args) + len(kwargs)))
 
         if self._agent.isV2:
           #
@@ -372,7 +372,10 @@ class Object(object):
           argMap = {}
           for arg in method.arguments:
             if arg.dir.find("I") != -1:
-              argMap[arg.name] = args[aIdx]
+              if aIdx < len(args):
+                argMap[arg.name] = args[aIdx]
+              else:
+                argMap[arg.name] = kwargs[arg.name]              
               aIdx += 1
           call['_arguments'] = argMap
 
@@ -439,6 +442,10 @@ class Object(object):
     else:
       sync = True
 
+    # Remove special "meta" kwargs before handing to _sendMethodRequest() to process
+    if "_timeout" in kwargs: del kwargs["_timeout"]
+    if "_async" in kwargs: del kwargs["_async"]
+
     seq = self._sendMethodRequest(name, args, kwargs, sync, timeout)
     if seq:
       if not sync:
@@ -638,7 +645,10 @@ class Session:
     Will raise an exception if the session is not managing the connection and
     the connection setup to the broker fails.
     """
-    url = BrokerURL(target)
+    if isinstance(target, BrokerURL):
+      url = target
+    else:
+      url = BrokerURL(target)
     broker = Broker(self, url.host, url.port, mechanisms, url.authName, url.authPass,
                     ssl = url.scheme == URL.AMQPS, connTimeout=timeout)
 
@@ -1211,11 +1221,22 @@ class Session:
     try:
       agentName = ah["qmf.agent"]
       values = content["_values"]
-      timestamp = values["_timestamp"]
-      interval = values["_heartbeat_interval"]
+
+      if '_timestamp' in values:
+        timestamp = values["_timestamp"]
+      else:
+        timestamp = values['timestamp']
+
+      if '_heartbeat_interval' in values:
+        interval = values['_heartbeat_interval']
+      else:
+        interval = values['heartbeat_interval']
+
       epoch = 0
       if '_epoch' in values:
         epoch = values['_epoch']
+      elif 'epoch' in values:
+        epoch = values['epoch']
     except Exception,e:
       return
 
@@ -2328,18 +2349,19 @@ class Broker(Thread):
 
   def getUrl(self):
     """ """
-    return "%s:%d" % (self.host, self.port)
+    return BrokerURL(host=self.host, port=self.port)
 
   def getFullUrl(self, noAuthIfGuestDefault=True):
     """ """
-    ssl = ""
     if self.ssl:
-      ssl = "s"
-    auth = "%s/%s@" % (self.authUser, self.authPass)
+      scheme = "amqps"
+    else:
+      scheme = "amqp"
     if self.authUser == "" or \
           (noAuthIfGuestDefault and self.authUser == "guest" and self.authPass == "guest"):
-      auth = ""
-    return "amqp%s://%s%s:%d" % (ssl, auth, self.host, self.port or 5672)
+      return BrokerURL(scheme=scheme, host=self.host, port=(self.port or 5672))
+    else:
+      return BrokerURL(scheme=scheme, user=self.authUser, password=self.authPass, host=self.host, port=(self.port or 5672))
 
   def __repr__(self):
     if self.connected:
@@ -2416,7 +2438,7 @@ class Broker(Thread):
       if uid.__class__ == tuple and len(uid) == 2:
         self.saslUser = uid[1]
       else:
-        self.saslUser = None
+        self.saslUser = self.authUser
 
       # prevent topic queues from filling up (and causing the agents to
       # disconnect) by discarding the oldest queued messages when full.
@@ -3273,6 +3295,7 @@ class Agent:
       self.lock.acquire()
       try:
         self.contextMap.pop(sequence)
+        self.seqMgr._release(sequence)
       except KeyError:
         pass   # @todo - shouldn't happen, log a warning.
     finally:

Modified: qpid/branches/QPID-2519/extras/sasl/bootstrap
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/extras/sasl/bootstrap?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/extras/sasl/bootstrap (original)
+++ qpid/branches/QPID-2519/extras/sasl/bootstrap Fri Oct 21 14:42:12 2011
@@ -22,7 +22,7 @@ aclocal -I m4
 autoheader
 libtoolize --automake
 
-automake
+automake --add-missing
 autoconf
 
 if [ "$1" = "-build" -o "$1" = "--build" ] ; then

Modified: qpid/branches/QPID-2519/extras/sasl/configure.ac
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/extras/sasl/configure.ac?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/extras/sasl/configure.ac (original)
+++ qpid/branches/QPID-2519/extras/sasl/configure.ac Fri Oct 21 14:42:12 2011
@@ -23,7 +23,6 @@ AC_CONFIG_HEADERS([config.h])
 AC_PROG_CC_STDC
 AM_PROG_CC_C_O
 AC_PROG_CXX
-AC_USE_SYSTEM_EXTENSIONS
 AC_LANG([C++])	
 
 # Check for optional use of help2man

Modified: qpid/branches/QPID-2519/extras/sasl/python/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/extras/sasl/python/Makefile.am?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/extras/sasl/python/Makefile.am (original)
+++ qpid/branches/QPID-2519/extras/sasl/python/Makefile.am Fri Oct 21 14:42:12 2011
@@ -29,8 +29,7 @@ BUILT_SOURCES = $(generated_file_list)
 $(generated_file_list): python.i $(top_srcdir)/src/saslwrapper.i
 	$(SWIG) -c++ -python -Wall -I/usr/include $(INCLUDES) -o saslwrapper.cpp $(srcdir)/python.i
 
-pylibdir = $(PYTHON_LIB)
-python_PYTHON = saslwrapper.py
+pyexec_PYTHON = saslwrapper.py
 pyexec_LTLIBRARIES = _saslwrapper.la
 
 _saslwrapper_la_LDFLAGS = -avoid-version -module -shared

Modified: qpid/branches/QPID-2519/extras/sasl/ruby/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/extras/sasl/ruby/Makefile.am?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/extras/sasl/ruby/Makefile.am (original)
+++ qpid/branches/QPID-2519/extras/sasl/ruby/Makefile.am Fri Oct 21 14:42:12 2011
@@ -35,7 +35,7 @@ rubylibarch_LTLIBRARIES = saslwrapper.la
 
 saslwrapper_la_LDFLAGS = -avoid-version -module -shared ".$(RUBY_DLEXT)"
 saslwrapper_la_LIBADD = $(RUBY_LIBS) $(top_builddir)/src/libsaslwrapper.la -lsasl2
-saslwrapper_la_CXXFLAGS = $(INCLUDES) -I$(RUBY_INC) -I$(RUBY_INC_ARCH)
+saslwrapper_la_CXXFLAGS = $(INCLUDES) -I$(RUBY_INC) -I$(RUBY_INC_ARCH) -fno-strict-aliasing
 nodist_saslwrapper_la_SOURCES = saslwrapper.cpp
 
 CLEANFILES = $(generated_file_list)

Modified: qpid/branches/QPID-2519/extras/sasl/src/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/extras/sasl/src/Makefile.am?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/extras/sasl/src/Makefile.am (original)
+++ qpid/branches/QPID-2519/extras/sasl/src/Makefile.am Fri Oct 21 14:42:12 2011
@@ -24,6 +24,7 @@ nobase_include_HEADERS = ../include/sasl
 
 lib_LTLIBRARIES = libsaslwrapper.la
 libsaslwrapper_la_SOURCES = cyrus/saslwrapper.cpp
+libsaslwrapper_la_CXXFLAGS = -fno-strict-aliasing
 
 # Library Version Information:
 #

Modified: qpid/branches/QPID-2519/gentools/build.xml
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/gentools/build.xml?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/gentools/build.xml (original)
+++ qpid/branches/QPID-2519/gentools/build.xml Fri Oct 21 14:42:12 2011
@@ -25,7 +25,7 @@
     <property name="java.target" value="1.5"/>
     
     <target name="compile">
-        <javac srcdir="${src}" source="${java.source}" target="${java.target}" fork="true" debug="on">
+        <javac srcdir="${src}" source="${java.source}" target="${java.target}" fork="true" debug="on" includeantruntime="false">
             <classpath>
                 <fileset dir="${src}/../lib">
                     <include name="**/*.jar"/>

Propchange: qpid/branches/QPID-2519/java/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Fri Oct 21 14:42:12 2011
@@ -1,3 +1,4 @@
+build.overrides
 blaze.ipr
 blaze.iws
 build

Propchange: qpid/branches/QPID-2519/java/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Oct 21 14:42:12 2011
@@ -2,4 +2,6 @@
 /qpid/branches/0.5.x-dev/qpid/java:886720-886722,887145,892761,894875,916304,916325,930288,931179
 /qpid/branches/java-broker-0-10/qpid/java:795950-829653
 /qpid/branches/java-network-refactor/qpid/java:805429-821809
+/qpid/branches/qpid-2935/qpid/java:1061302-1072333
 /qpid/trunk/qpid:796646-796653
+/qpid/trunk/qpid/java:1072051-1187351

Propchange: qpid/branches/QPID-2519/java/broker/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Oct 21 14:42:12 2011
@@ -2,4 +2,5 @@
 /qpid/branches/java-broker-0-10/qpid/java/broker:795950-829653
 /qpid/branches/java-network-refactor/qpid/java/broker:805429-821809
 /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/branches/qpid-2935/qpid/java/broker:1061302-1072333
+/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,1072051-1187351

Modified: qpid/branches/QPID-2519/java/broker-plugins/access-control/MANIFEST.MF
URL: http://svn.apache.org/viewvc/qpid/branches/QPID-2519/java/broker-plugins/access-control/MANIFEST.MF?rev=1187375&r1=1187374&r2=1187375&view=diff
==============================================================================
--- qpid/branches/QPID-2519/java/broker-plugins/access-control/MANIFEST.MF (original)
+++ qpid/branches/QPID-2519/java/broker-plugins/access-control/MANIFEST.MF Fri Oct 21 14:42:12 2011
@@ -35,6 +35,7 @@ Import-Package: org.apache.qpid,
  org.apache.log4j;version=1.0.0,
  javax.management;version=1.0.0,
  javax.management.openmbean;version=1.0.0,
+ javax.security.auth;version=1.0.0,
  org.osgi.util.tracker;version=1.0.0,
  org.osgi.framework;version=1.3
 Private-Package: org.apache.qpid.server.security.access.config,



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