summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/UdpEndpointI.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2007-12-21 15:25:37 -0500
committerBernard Normier <bernard@zeroc.com>2007-12-21 15:25:37 -0500
commite099cd4fd77c718f9c241ad609f5aa7a80627ba8 (patch)
tree998305e426f74429b00122dcdc4f839e2f97ade5 /cpp/src/Ice/UdpEndpointI.cpp
parentIceUtil cleanup (first commit) (diff)
parentFix bug 2520: Test suite unsets ICE_CONFIG to avoid configuration conflicts (diff)
downloadice-e099cd4fd77c718f9c241ad609f5aa7a80627ba8.tar.bz2
ice-e099cd4fd77c718f9c241ad609f5aa7a80627ba8.tar.xz
ice-e099cd4fd77c718f9c241ad609f5aa7a80627ba8.zip
Merge branch 'master' of ssh://cvs.zeroc.com/home/git/ice
Conflicts: cpp/src/Slice/VbUtil.cpp
Diffstat (limited to 'cpp/src/Ice/UdpEndpointI.cpp')
-rw-r--r--cpp/src/Ice/UdpEndpointI.cpp74
1 files changed, 44 insertions, 30 deletions
diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp
index b5f4588714c..217f9625528 100644
--- a/cpp/src/Ice/UdpEndpointI.cpp
+++ b/cpp/src/Ice/UdpEndpointI.cpp
@@ -39,7 +39,7 @@ IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const strin
{
}
-IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const string& str, bool server) :
+IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const string& str, bool oaEndpoint) :
_instance(instance),
_port(0),
_mcastTtl(-1),
@@ -88,6 +88,10 @@ IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const strin
end = str.length();
}
argument = str.substr(beg, end - beg);
+ if(argument[0] == '\"' && argument[argument.size() - 1] == '\"')
+ {
+ argument = argument.substr(1, argument.size() - 2);
+ }
}
if(option == "-v")
@@ -267,21 +271,19 @@ IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const strin
if(_host.empty())
{
const_cast<string&>(_host) = _instance->defaultsAndOverrides()->defaultHost;
- if(_host.empty())
- {
- if(server)
- {
- const_cast<string&>(_host) = "0.0.0.0";
- }
- else
- {
- const_cast<string&>(_host) = "127.0.0.1";
- }
- }
}
else if(_host == "*")
{
- const_cast<string&>(_host) = "0.0.0.0";
+ if(oaEndpoint)
+ {
+ const_cast<string&>(_host) = string();
+ }
+ else
+ {
+ EndpointParseException ex(__FILE__, __LINE__);
+ ex.str = "udp " + str;
+ throw ex;
+ }
}
}
@@ -372,7 +374,22 @@ IceInternal::UdpEndpointI::toString() const
<< static_cast<unsigned>(static_cast<unsigned char>(_encodingMinor));
}
- s << " -h " << _host << " -p " << _port;
+ if(!_host.empty())
+ {
+ s << " -h ";
+ bool addQuote = _host.find(':') != string::npos;
+ if(addQuote)
+ {
+ s << "\"";
+ }
+ s << _host;
+ if(addQuote)
+ {
+ s << "\"";
+ }
+ }
+
+ s << " -p " << _port;
if(_mcastInterface.length() > 0)
{
@@ -480,7 +497,7 @@ IceInternal::UdpEndpointI::transceiver(EndpointIPtr& endp) const
vector<ConnectorPtr>
IceInternal::UdpEndpointI::connectors() const
{
- return connectors(getAddresses(_host, _port));
+ return connectors(getAddresses(_host, _port, _instance->protocolSupport(), true));
}
void
@@ -500,22 +517,19 @@ vector<EndpointIPtr>
IceInternal::UdpEndpointI::expand() const
{
vector<EndpointIPtr> endps;
- if(_host == "0.0.0.0")
+ vector<string> hosts = getHostsForEndpointExpand(_host, _instance->protocolSupport());
+ if(hosts.empty())
{
- vector<string> hosts = getLocalHosts();
- for(unsigned int i = 0; i < hosts.size(); ++i)
- {
- if(hosts.size() == 1 || hosts[i] != "127.0.0.1")
- {
- endps.push_back(new UdpEndpointI(_instance, hosts[i], _port, _mcastInterface, _mcastTtl, _protocolMajor,
- _protocolMinor, _encodingMajor, _encodingMinor, _connect,
- _connectionId, _compress));
- }
- }
+ endps.push_back(const_cast<UdpEndpointI*>(this));
}
else
{
- endps.push_back(const_cast<UdpEndpointI*>(this));
+ for(vector<string>::const_iterator p = hosts.begin(); p != hosts.end(); ++p)
+ {
+ endps.push_back(new UdpEndpointI(_instance, *p, _port, _mcastInterface, _mcastTtl, _protocolMajor,
+ _protocolMinor, _encodingMajor, _encodingMinor, _connect,
+ _connectionId, _compress));
+ }
}
return endps;
}
@@ -726,7 +740,7 @@ IceInternal::UdpEndpointI::operator<(const EndpointI& r) const
}
vector<ConnectorPtr>
-IceInternal::UdpEndpointI::connectors(const vector<struct sockaddr_in>& addresses) const
+IceInternal::UdpEndpointI::connectors(const vector<struct sockaddr_storage>& addresses) const
{
vector<ConnectorPtr> connectors;
for(unsigned int i = 0; i < addresses.size(); ++i)
@@ -759,9 +773,9 @@ IceInternal::UdpEndpointFactory::protocol() const
}
EndpointIPtr
-IceInternal::UdpEndpointFactory::create(const std::string& str, bool server) const
+IceInternal::UdpEndpointFactory::create(const std::string& str, bool oaEndpoint) const
{
- return new UdpEndpointI(_instance, str, server);
+ return new UdpEndpointI(_instance, str, oaEndpoint);
}
EndpointIPtr