summaryrefslogtreecommitdiff
path: root/cppe/src/TcpTransport/TcpEndpoint.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2005-10-06 16:18:58 +0000
committerDwayne Boone <dwayne@zeroc.com>2005-10-06 16:18:58 +0000
commita304126403dc5ed49ed1b662d5d51e55d387d645 (patch)
treed0fe36c3c63f3f401769057f9c9f88a9ed829ae2 /cppe/src/TcpTransport/TcpEndpoint.cpp
parentSupport "-h *" as well (diff)
downloadice-a304126403dc5ed49ed1b662d5d51e55d387d645.tar.bz2
ice-a304126403dc5ed49ed1b662d5d51e55d387d645.tar.xz
ice-a304126403dc5ed49ed1b662d5d51e55d387d645.zip
Bug 395 - support listen on all interfaces
Diffstat (limited to 'cppe/src/TcpTransport/TcpEndpoint.cpp')
-rw-r--r--cppe/src/TcpTransport/TcpEndpoint.cpp60
1 files changed, 52 insertions, 8 deletions
diff --git a/cppe/src/TcpTransport/TcpEndpoint.cpp b/cppe/src/TcpTransport/TcpEndpoint.cpp
index 22461413606..79c9ab0c76b 100644
--- a/cppe/src/TcpTransport/TcpEndpoint.cpp
+++ b/cppe/src/TcpTransport/TcpEndpoint.cpp
@@ -24,18 +24,20 @@ using namespace std;
using namespace Ice;
using namespace IceInternal;
-IceInternal::TcpEndpoint::TcpEndpoint(const InstancePtr& instance, const string& ho, Int po, Int ti) :
+IceInternal::TcpEndpoint::TcpEndpoint(const InstancePtr& instance, const string& ho, Int po, Int ti, bool pub) :
_instance(instance),
_host(ho),
_port(po),
- _timeout(ti)
+ _timeout(ti),
+ _publish(pub)
{
}
-IceInternal::TcpEndpoint::TcpEndpoint(const InstancePtr& instance, const string& str) :
+IceInternal::TcpEndpoint::TcpEndpoint(const InstancePtr& instance, const string& str, bool adapterEndp) :
_instance(instance),
_port(0),
- _timeout(-1)
+ _timeout(-1),
+ _publish(true)
{
const string delim = " \t\n\r";
@@ -132,14 +134,30 @@ IceInternal::TcpEndpoint::TcpEndpoint(const InstancePtr& instance, const string&
if(_host.empty())
{
- const_cast<string&>(_host) = _instance->defaultsAndOverrides()->defaultHost;
+ const_cast<string&>(_host) = _instance->defaultsAndOverrides()->defaultHost;
+ if(_host.empty())
+ {
+ if(adapterEndp)
+ {
+ const_cast<string&>(_host) = "0.0.0.0";
+ }
+ else
+ {
+ const_cast<string&>(_host) = getLocalHost(true);
+ }
+ }
+ }
+ else if(_host == "*" && adapterEndp)
+ {
+ const_cast<string&>(_host) = "0.0.0.0";
}
}
IceInternal::TcpEndpoint::TcpEndpoint(BasicStream* s) :
_instance(s->instance()),
_port(0),
- _timeout(-1)
+ _timeout(-1),
+ _publish(true)
{
bool dummy;
@@ -200,7 +218,7 @@ IceInternal::TcpEndpoint::timeout(Int timeout) const
}
else
{
- return new TcpEndpoint(_instance, _host, _port, timeout);
+ return new TcpEndpoint(_instance, _host, _port, timeout, _publish);
}
}
@@ -343,10 +361,36 @@ AcceptorPtr
IceInternal::TcpEndpoint::acceptor(EndpointPtr& endp) const
{
Acceptor* p = new Acceptor(_instance, _host, _port);
- endp = new TcpEndpoint(_instance, _host, p->effectivePort(), _timeout);
+ endp = new TcpEndpoint(_instance, _host, p->effectivePort(), _timeout, _publish);
return p;
}
+vector<EndpointPtr>
+IceInternal::TcpEndpoint::expand() const
+{
+ vector<EndpointPtr> endps;
+ if(_host == "0.0.0.0")
+ {
+ vector<string> hosts = getLocalHosts();
+ for(unsigned int i = 0; i < hosts.size(); ++i)
+ {
+ endps.push_back(new TcpEndpoint(_instance, hosts[i], _port, _timeout,
+ hosts.size() == 1 || hosts[i] != "127.0.0.1"));
+ }
+ }
+ else
+ {
+ endps.push_back(const_cast<TcpEndpoint*>(this));
+ }
+ return endps;
+}
+
+bool
+IceInternal::TcpEndpoint::publish() const
+{
+ return _publish;
+}
+
bool
IceInternal::TcpEndpoint::equivalent(const AcceptorPtr& acceptor) const
{