summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp2
-rw-r--r--qpid/cpp/src/qpid/sys/SocketAddress.h1
-rw-r--r--qpid/cpp/src/qpid/sys/SocketTransport.cpp19
-rw-r--r--qpid/cpp/src/qpid/sys/SocketTransport.h2
-rw-r--r--qpid/cpp/src/qpid/sys/SslPlugin.cpp2
-rw-r--r--qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp2
-rw-r--r--qpid/cpp/src/qpid/sys/posix/SocketAddress.cpp11
-rw-r--r--qpid/cpp/src/tests/brokertest.py2
-rwxr-xr-xqpid/cpp/src/tests/interlink_tests.py1
-rwxr-xr-xqpid/cpp/src/tests/ipv6_test2
10 files changed, 21 insertions, 23 deletions
diff --git a/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp b/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp
index fa15c03b39..1a34332138 100644
--- a/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp
+++ b/qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp
@@ -125,7 +125,7 @@ static struct SslPlugin : public Plugin {
boost::shared_ptr<SslProtocolFactory> protocol(new SslProtocolFactory(opts, options, broker->getTimer()));
uint16_t port =
protocol->listen(opts.listenInterfaces,
- boost::lexical_cast<std::string>(options.port), opts.connectionBacklog,
+ options.port, opts.connectionBacklog,
&createSocket);
QPID_LOG(notice, "Listening for SSL connections on TCP port " << port);
broker->registerTransport("ssl", protocol, protocol, port);
diff --git a/qpid/cpp/src/qpid/sys/SocketAddress.h b/qpid/cpp/src/qpid/sys/SocketAddress.h
index a4da5cca79..c54877ea0b 100644
--- a/qpid/cpp/src/qpid/sys/SocketAddress.h
+++ b/qpid/cpp/src/qpid/sys/SocketAddress.h
@@ -45,7 +45,6 @@ public:
QPID_COMMON_EXTERN bool nextAddress();
QPID_COMMON_EXTERN std::string asString(bool numeric=true) const;
QPID_COMMON_EXTERN std::string getHost() const;
- QPID_COMMON_EXTERN void setAddrInfoPort(uint16_t port);
QPID_COMMON_EXTERN static std::string asString(::sockaddr const * const addr, size_t addrlen);
QPID_COMMON_EXTERN static uint16_t getPort(::sockaddr const * const addr);
diff --git a/qpid/cpp/src/qpid/sys/SocketTransport.cpp b/qpid/cpp/src/qpid/sys/SocketTransport.cpp
index 2e03d18d82..502aaa3bab 100644
--- a/qpid/cpp/src/qpid/sys/SocketTransport.cpp
+++ b/qpid/cpp/src/qpid/sys/SocketTransport.cpp
@@ -35,6 +35,7 @@
#include "qpid/sys/SystemInfo.h"
#include <boost/bind.hpp>
+#include <boost/lexical_cast.hpp>
namespace qpid {
namespace sys {
@@ -130,9 +131,11 @@ void SocketAcceptor::addListener(Socket* socket)
listeners.push_back(socket);
}
-uint16_t SocketAcceptor::listen(const std::vector<std::string>& interfaces, const std::string& port, int backlog, const SocketFactory& factory)
+uint16_t SocketAcceptor::listen(const std::vector<std::string>& interfaces, uint16_t port, int backlog, const SocketFactory& factory)
{
std::vector<std::string> addresses = expandInterfaces(interfaces);
+ std::string sport(boost::lexical_cast<std::string>(port));
+
if (addresses.empty()) {
// We specified some interfaces, but couldn't find addresses for them
QPID_LOG(warning, "TCP/TCP6: No specified network interfaces found: Not Listening");
@@ -142,7 +145,7 @@ uint16_t SocketAcceptor::listen(const std::vector<std::string>& interfaces, cons
int listeningPort = 0;
for (unsigned i = 0; i<addresses.size(); ++i) {
QPID_LOG(debug, "Using interface: " << addresses[i]);
- SocketAddress sa(addresses[i], port);
+ SocketAddress sa(addresses[i], sport);
// We must have at least one resolved address
QPID_LOG(info, "Listening to: " << sa.asString())
@@ -153,10 +156,18 @@ uint16_t SocketAcceptor::listen(const std::vector<std::string>& interfaces, cons
listeningPort = lport;
+ // If we were told to figure out the port then only allow listening to one address
+ if (port==0) {
+ // Print warning if the user specified more than one interface
+ // or there if is another address for this one
+ if (sa.nextAddress() || addresses.size()>1 ) {
+ QPID_LOG(warning, "Specified port=0: Only listened to: " << sa.asString());
+ }
+ break;
+ }
+
// Try any other resolved addresses
while (sa.nextAddress()) {
- // Hack to ensure that all listening connections are on the same port
- sa.setAddrInfoPort(listeningPort);
QPID_LOG(info, "Listening to: " << sa.asString())
Socket* s = factory();
uint16_t lport = s->listen(sa, backlog);
diff --git a/qpid/cpp/src/qpid/sys/SocketTransport.h b/qpid/cpp/src/qpid/sys/SocketTransport.h
index b2f1e72907..5aca52c372 100644
--- a/qpid/cpp/src/qpid/sys/SocketTransport.h
+++ b/qpid/cpp/src/qpid/sys/SocketTransport.h
@@ -63,7 +63,7 @@ public:
SocketAcceptor(bool tcpNoDelay, bool nodict, uint32_t maxNegotiateTime, Timer& timer, const EstablishedCallback& established);
// Create sockets from list of interfaces and listen to them
- uint16_t listen(const std::vector<std::string>& interfaces, const std::string& port, int backlog, const SocketFactory& factory);
+ uint16_t listen(const std::vector<std::string>& interfaces, uint16_t port, int backlog, const SocketFactory& factory);
// Import sockets that are already being listened to
void addListener(Socket* socket);
diff --git a/qpid/cpp/src/qpid/sys/SslPlugin.cpp b/qpid/cpp/src/qpid/sys/SslPlugin.cpp
index 22c5127f02..4c3326622a 100644
--- a/qpid/cpp/src/qpid/sys/SslPlugin.cpp
+++ b/qpid/cpp/src/qpid/sys/SslPlugin.cpp
@@ -123,7 +123,7 @@ static struct SslPlugin : public Plugin {
if (broker->shouldListen("ssl")) {
SocketAcceptor* sa =
new SocketAcceptor(opts.tcpNoDelay, options.nodict, opts.maxNegotiateTime, broker->getTimer());
- port = sa->listen(opts.listenInterfaces, boost::lexical_cast<std::string>(options.port), opts.connectionBacklog,
+ port = sa->listen(opts.listenInterfaces, options.port, opts.connectionBacklog,
multiplex ?
boost::bind(&createServerSSLMuxSocket, options) :
boost::bind(&createServerSSLSocket, options));
diff --git a/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp b/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
index 0910cbef20..cd941eb2f6 100644
--- a/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
+++ b/qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp
@@ -47,7 +47,7 @@ static class TCPIOPlugin : public Plugin {
if (broker->shouldListen("tcp")) {
SocketAcceptor* aa = new SocketAcceptor(opts.tcpNoDelay, false, opts.maxNegotiateTime, broker->getTimer());
ta.reset(aa);
- port = aa->listen(opts.listenInterfaces, boost::lexical_cast<std::string>(opts.port), opts.connectionBacklog, &createSocket);
+ port = aa->listen(opts.listenInterfaces, opts.port, opts.connectionBacklog, &createSocket);
if ( port!=0 ) {
QPID_LOG(notice, "Listening on TCP/TCP6 port " << port);
}
diff --git a/qpid/cpp/src/qpid/sys/posix/SocketAddress.cpp b/qpid/cpp/src/qpid/sys/posix/SocketAddress.cpp
index 1e5e52faab..b88b3a2806 100644
--- a/qpid/cpp/src/qpid/sys/posix/SocketAddress.cpp
+++ b/qpid/cpp/src/qpid/sys/posix/SocketAddress.cpp
@@ -115,17 +115,6 @@ bool SocketAddress::nextAddress() {
return r;
}
-void SocketAddress::setAddrInfoPort(uint16_t port) {
- if (!currentAddrInfo) return;
-
- ::addrinfo& ai = *currentAddrInfo;
- switch (ai.ai_family) {
- case AF_INET: ((::sockaddr_in*)(void*)ai.ai_addr)->sin_port = htons(port); return;
- case AF_INET6:((::sockaddr_in6*)(void*)ai.ai_addr)->sin6_port = htons(port); return;
- default: throw Exception(QPID_MSG("Unexpected socket type"));
- }
-}
-
const ::addrinfo& getAddrInfo(const SocketAddress& sa)
{
if (!sa.addrInfo) {
diff --git a/qpid/cpp/src/tests/brokertest.py b/qpid/cpp/src/tests/brokertest.py
index 535d7220d7..fbbaadc350 100644
--- a/qpid/cpp/src/tests/brokertest.py
+++ b/qpid/cpp/src/tests/brokertest.py
@@ -265,7 +265,7 @@ class Broker(Popen):
if BrokerTest.sql_clfs_store_lib:
args = args + ['--load-module', BrokerTest.sql_clfs_store_lib]
args = args + ['--catalog', BrokerTest.sql_catalog]
- cmd = [BrokerTest.qpidd_exec, "--port", port, "--no-module-dir"] + args
+ cmd = [BrokerTest.qpidd_exec, "--port", port, "--interface", "127.0.0.1", "--no-module-dir"] + args
if not "--auth" in args: cmd.append("--auth=no")
if wait != None:
cmd += ["--wait", str(wait)]
diff --git a/qpid/cpp/src/tests/interlink_tests.py b/qpid/cpp/src/tests/interlink_tests.py
index 9900ef45f1..129283ac24 100755
--- a/qpid/cpp/src/tests/interlink_tests.py
+++ b/qpid/cpp/src/tests/interlink_tests.py
@@ -250,7 +250,6 @@ class AmqpBrokerTest(BrokerTest):
def amqp_broker(self):
assert BrokerTest.amqp_lib, "Cannot locate AMQP 1.0 plug-in"
args = ["--load-module", BrokerTest.amqp_lib,
- "--interface=127.0.0.1",
"--max-negotiate-time=600000",
"--log-enable=trace+:Protocol",
"--log-enable=info+"]
diff --git a/qpid/cpp/src/tests/ipv6_test b/qpid/cpp/src/tests/ipv6_test
index f47e721513..18bb34daa6 100755
--- a/qpid/cpp/src/tests/ipv6_test
+++ b/qpid/cpp/src/tests/ipv6_test
@@ -44,7 +44,7 @@ trap cleanup EXIT
error() { echo $*; exit 1; }
# Don't need --no-module-dir or --no-data-dir as they are set as env vars in test_env.sh
-COMMON_OPTS="--daemon --auth no --config $CONFIG"
+COMMON_OPTS="--interface [::1] --daemon --auth no --config $CONFIG"
# Record all broker ports started
unset PORTS