diff options
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/broker/windows/SslProtocolFactory.cpp | 2 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/sys/SocketAddress.h | 1 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/sys/SocketTransport.cpp | 19 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/sys/SocketTransport.h | 2 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/sys/SslPlugin.cpp | 2 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/sys/TCPIOPlugin.cpp | 2 | ||||
| -rw-r--r-- | qpid/cpp/src/qpid/sys/posix/SocketAddress.cpp | 11 | ||||
| -rw-r--r-- | qpid/cpp/src/tests/brokertest.py | 2 | ||||
| -rwxr-xr-x | qpid/cpp/src/tests/interlink_tests.py | 1 | ||||
| -rwxr-xr-x | qpid/cpp/src/tests/ipv6_test | 2 |
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 |
