summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2012-02-29 16:10:06 +0000
committerGordon Sim <gsim@apache.org>2012-02-29 16:10:06 +0000
commitae7e857ae13bf1acb7901ecf20f35b1c1cb5e868 (patch)
treece014d86cbe10f810c9aeb4743531441ae7d46db /qpid/cpp/src
parentdac9286ab2f28df8d637fcc143262b5129fb1142 (diff)
downloadqpid-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.cpp17
-rw-r--r--qpid/cpp/src/qpid/client/Connection.cpp2
-rw-r--r--qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp2
-rwxr-xr-xqpid/cpp/src/tests/ssl_test6
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