diff options
| author | Gordon Sim <gsim@apache.org> | 2012-02-29 16:10:06 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2012-02-29 16:10:06 +0000 |
| commit | ae7e857ae13bf1acb7901ecf20f35b1c1cb5e868 (patch) | |
| tree | ce014d86cbe10f810c9aeb4743531441ae7d46db /qpid/cpp/src | |
| parent | dac9286ab2f28df8d637fcc143262b5129fb1142 (diff) | |
| download | qpid-python-ae7e857ae13bf1acb7901ecf20f35b1c1cb5e868.tar.gz | |
QPID-3832: Restore transport option for connection (as default for urls that don't specify one explicitly)
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1295172 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/Url.cpp | 17 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/client/Connection.cpp | 2 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp | 2 | ||||
| -rwxr-xr-x | qpid/cpp/src/tests/ssl_test | 6 |
4 files changed, 21 insertions, 6 deletions
diff --git a/qpid/cpp/src/qpid/Url.cpp b/qpid/cpp/src/qpid/Url.cpp index 2061499ec3..840f46e928 100644 --- a/qpid/cpp/src/qpid/Url.cpp +++ b/qpid/cpp/src/qpid/Url.cpp @@ -111,7 +111,8 @@ ssl_addr = "ssl:" host [":" port] */ class UrlParser { public: - UrlParser(Url& u, const char* s) : url(u), text(s), end(s+strlen(s)), i(s) {} + UrlParser(Url& u, const char* s, const std::string& defaultProtocol_=Address::TCP) : url(u), text(s), end(s+strlen(s)), i(s), + defaultProtocol(defaultProtocol_) {} bool parse() { literal("amqp:"); // Optional userPass(); // Optional @@ -135,7 +136,7 @@ class UrlParser { bool comma() { return literal(","); } bool protocolAddr() { - Address addr(Address::TCP, "", Address::AMQP_PORT); // Set up defaults + Address addr(defaultProtocol, "", Address::AMQP_PORT); // Set up defaults protocolTag(addr.protocol); // Optional bool ok = (host(addr.host) && (literal(":") ? port(addr.port) : true)); @@ -244,20 +245,28 @@ class UrlParser { const char* text; const char* end; const char* i; + const std::string defaultProtocol; }; const string UrlParser::LOCALHOST("127.0.0.1"); void Url::parse(const char* url) { - parseNoThrow(url); + parse(url, Address::TCP); +} +void Url::parse(const char* url, const std::string& defaultProtocol) { + parseNoThrow(url, defaultProtocol); if (empty()) throw Url::Invalid(QPID_MSG("Invalid URL: " << url)); } void Url::parseNoThrow(const char* url) { + parseNoThrow(url, Address::TCP); +} + +void Url::parseNoThrow(const char* url, const std::string& defaultProtocol) { clear(); cache.clear(); - if (!UrlParser(*this, url).parse()) + if (!UrlParser(*this, url, defaultProtocol).parse()) clear(); } diff --git a/qpid/cpp/src/qpid/client/Connection.cpp b/qpid/cpp/src/qpid/client/Connection.cpp index 2882ef5d42..83a4a35b53 100644 --- a/qpid/cpp/src/qpid/client/Connection.cpp +++ b/qpid/cpp/src/qpid/client/Connection.cpp @@ -75,7 +75,7 @@ void Connection::open(const Url& url, const ConnectionSettings& settings) { i++; try { ConnectionSettings cs(settings); - cs.protocol = addr.protocol; + if (addr.protocol.size()) cs.protocol = addr.protocol; cs.host = addr.host; cs.port = addr.port; open(cs); diff --git a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp index 3cfd2e37f2..685cd115fd 100644 --- a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp +++ b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp @@ -290,7 +290,7 @@ bool ConnectionImpl::tryConnect() for (std::vector<std::string>::const_iterator i = urls.begin(); i != urls.end(); ++i) { try { QPID_LOG(info, "Trying to connect to " << *i << "..."); - Url url(*i); + Url url(*i, settings.protocol.size() ? settings.protocol : Address::TCP); if (url.getUser().size()) settings.username = url.getUser(); if (url.getPass().size()) settings.password = url.getPass(); connection.open(url, settings); diff --git a/qpid/cpp/src/tests/ssl_test b/qpid/cpp/src/tests/ssl_test index 4dbb7df392..fc634ba242 100755 --- a/qpid/cpp/src/tests/ssl_test +++ b/qpid/cpp/src/tests/ssl_test @@ -140,6 +140,12 @@ URL=amqp:ssl:$TEST_HOSTNAME:$PORT MSG=`./qpid-receive -b $URL -a "foo;{create:always}" --messages 1` test "$MSG" = "hello" || { echo "receive failed '$MSG' != 'hello'"; exit 1; } +## Test connection with a combination of URL and connection options (in messaging API) +URL=$TEST_HOSTNAME:$PORT +./qpid-send -b $URL --connection-options '{transport:ssl,heartbeat:2}' --content-string='hello again' -a "foo;{create:always}" +MSG=`./qpid-receive -b $URL --connection-options '{transport:ssl,heartbeat:2}' -a "foo;{create:always}" --messages 1` +test "$MSG" = "hello again" || { echo "receive failed '$MSG' != 'hello again'"; exit 1; } + #### Client Authentication tests start_authenticating_broker |
