summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/UdpEndpointI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/UdpEndpointI.cpp')
-rw-r--r--cpp/src/Ice/UdpEndpointI.cpp278
1 files changed, 52 insertions, 226 deletions
diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp
index 18ad812b644..2df35fff2e0 100644
--- a/cpp/src/Ice/UdpEndpointI.cpp
+++ b/cpp/src/Ice/UdpEndpointI.cpp
@@ -23,17 +23,14 @@ using namespace Ice;
using namespace IceInternal;
IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const string& ho, Int po, const string& mif,
- Int mttl, Ice::Byte pma, Ice::Byte pmi, Ice::Byte ema, Ice::Byte emi,
- bool conn, const string& conId, bool co) :
+ Int mttl, const Ice::ProtocolVersion& protocol,
+ const Ice::EncodingVersion& encoding, bool conn, const string& conId, bool co) :
+ EndpointI(protocol, encoding),
_instance(instance),
_host(ho),
_port(po),
_mcastInterface(mif),
_mcastTtl(mttl),
- _protocolMajor(pma),
- _protocolMinor(pmi),
- _encodingMajor(ema),
- _encodingMinor(emi),
_connect(conn),
_connectionId(conId),
_compress(co)
@@ -44,10 +41,6 @@ IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const strin
_instance(instance),
_port(0),
_mcastTtl(-1),
- _protocolMajor(protocolMajor),
- _protocolMinor(protocolMinor),
- _encodingMajor(encodingMajor),
- _encodingMinor(encodingMinor),
_connect(false),
_compress(false)
{
@@ -112,114 +105,7 @@ IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const strin
}
}
- if(option == "-v")
- {
- if(argument.empty())
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "no argument provided for -v option in endpoint `udp " + str + "'";
- throw ex;
- }
-
- string::size_type pos = argument.find('.');
- if(pos == string::npos)
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "malformed protocol version `" + argument + "' in endpoint `udp " + str + "'";
- throw ex;
- }
- string majorStr = argument.substr(0, pos);
- string minorStr = argument.substr(pos + 1, string::npos);
-
- istringstream majStr(majorStr);
- Int majVersion;
- if(!(majStr >> majVersion) || !majStr.eof())
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "invalid protocol major version `" + argument + "' in endpoint `udp " + str + "'";
- throw ex;
- }
-
- istringstream minStr(minorStr);
- Int minVersion;
- if(!(minStr >> minVersion) || !minStr.eof())
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "invalid protocol minor version `" + argument + "' in endpoint `udp " + str + "'";
- throw ex;
- }
-
- if(majVersion < 1 || majVersion > 255 || minVersion < 0 || minVersion > 255)
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "range error in protocol version `" + argument + "' in endpoint `udp " + str + "'";
- throw ex;
- }
-
- if(majVersion != protocolMajor)
- {
- UnsupportedProtocolException ex(__FILE__, __LINE__);
- ex.badMajor = majVersion;
- ex.badMinor = minVersion;
- ex.major = static_cast<unsigned char>(protocolMajor);
- ex.minor = static_cast<unsigned char>(protocolMinor);
- throw ex;
- }
-
- const_cast<Byte&>(_protocolMajor) = majVersion;
- const_cast<Byte&>(_protocolMinor) = minVersion;
- }
- else if(option == "-e")
- {
- if(argument.empty())
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "no argument provided for -e option in endpoint `udp " + str + "'";
- throw ex;
- }
- string::size_type pos = argument.find('.');
- string majorStr = argument.substr(0, pos);
- string minorStr = argument.substr(pos + 1, string::npos);
-
- istringstream majStr(majorStr);
- Int majVersion;
- if(!(majStr >> majVersion) || !majStr.eof())
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "invalid encoding major version `" + argument + "' in endpoint `udp " + str + "'";
- throw ex;
- }
-
- istringstream minStr(minorStr);
- Int minVersion;
- if(!(minStr >> minVersion) || !minStr.eof())
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "invalid encoding minor version `" + argument + "' in endpoint `udp " + str + "'";
- throw ex;
- }
-
- if(majVersion < 1 || majVersion > 255 || minVersion < 0 || minVersion > 255)
- {
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "range error in encoding version `" + argument + "' in endpoint `udp " + str + "'";
- throw ex;
- }
-
- if(majVersion != static_cast<unsigned char>(encodingMajor))
- {
- UnsupportedEncodingException ex(__FILE__, __LINE__);
- ex.badMajor = majVersion;
- ex.badMinor = minVersion;
- ex.major = static_cast<unsigned char>(encodingMajor);
- ex.minor = static_cast<unsigned char>(encodingMinor);
- throw ex;
- }
-
- const_cast<Byte&>(_encodingMajor) = majVersion;
- const_cast<Byte&>(_encodingMinor) = minVersion;
- }
- else if(option == "-h")
+ if(option == "-h")
{
if(argument.empty())
{
@@ -299,9 +185,7 @@ IceInternal::UdpEndpointI::UdpEndpointI(const InstancePtr& instance, const strin
}
else
{
- EndpointParseException ex(__FILE__, __LINE__);
- ex.str = "unknown option `" + option + "' in `udp " + str + "'";
- throw ex;
+ parseOption(option, argument, "udp", str);
}
}
@@ -328,38 +212,16 @@ IceInternal::UdpEndpointI::UdpEndpointI(BasicStream* s) :
_instance(s->instance()),
_port(0),
_mcastTtl(-1),
- _protocolMajor(protocolMajor),
- _protocolMinor(protocolMinor),
- _encodingMajor(encodingMajor),
- _encodingMinor(encodingMinor),
_connect(false),
_compress(false)
{
s->startReadEncaps();
s->read(const_cast<string&>(_host), false);
s->read(const_cast<Int&>(_port));
- s->read(const_cast<Byte&>(_protocolMajor));
- s->read(const_cast<Byte&>(_protocolMinor));
- s->read(const_cast<Byte&>(_encodingMajor));
- s->read(const_cast<Byte&>(_encodingMinor));
- if(_protocolMajor != protocolMajor)
- {
- UnsupportedProtocolException ex(__FILE__, __LINE__);
- ex.badMajor = _protocolMajor;
- ex.badMinor = _protocolMinor;
- ex.major = static_cast<unsigned char>(protocolMajor);
- ex.minor = static_cast<unsigned char>(protocolMinor);
- throw ex;
- }
- if(_encodingMajor != encodingMajor)
- {
- UnsupportedEncodingException ex(__FILE__, __LINE__);
- ex.badMajor = _encodingMajor;
- ex.badMinor = _encodingMinor;
- ex.major = static_cast<unsigned char>(encodingMajor);
- ex.minor = static_cast<unsigned char>(encodingMinor);
- throw ex;
- }
+ s->read(const_cast<Byte&>(_protocol.major));
+ s->read(const_cast<Byte&>(_protocol.minor));
+ s->read(const_cast<Byte&>(_encoding.major));
+ s->read(const_cast<Byte&>(_encoding.minor));
// Not transmitted.
//s->read(const_cast<bool&>(_connect));
s->read(const_cast<bool&>(_compress));
@@ -373,10 +235,10 @@ IceInternal::UdpEndpointI::streamWrite(BasicStream* s) const
s->startWriteEncaps();
s->write(_host, false);
s->write(_port);
- s->write(_protocolMajor);
- s->write(_protocolMinor);
- s->write(_encodingMajor);
- s->write(_encodingMinor);
+ s->write(_protocol.major);
+ s->write(_protocol.minor);
+ s->write(_encoding.major);
+ s->write(_encoding.minor);
// Not transmitted.
//s->write(_connect);
s->write(_compress);
@@ -397,18 +259,14 @@ IceInternal::UdpEndpointI::toString() const
s << "udp";
- if(_protocolMajor != Byte(1) || _protocolMinor != Byte(0))
+ if(_protocol != Ice::Protocol_1_0)
{
- s << " -v "
- << static_cast<unsigned>(static_cast<unsigned char>(_protocolMajor)) << "."
- << static_cast<unsigned>(static_cast<unsigned char>(_protocolMinor));
+ s << " -v " << _protocol;
}
- if(_encodingMajor != Byte(1) || _encodingMinor != Byte(0))
+ if(_encoding != Ice::Encoding_1_0)
{
- s << " -e "
- << static_cast<unsigned>(static_cast<unsigned char>(_encodingMajor)) << "."
- << static_cast<unsigned>(static_cast<unsigned char>(_encodingMinor));
+ s << " -e " << _encoding;
}
if(!_host.empty())
@@ -458,10 +316,9 @@ IceInternal::UdpEndpointI::getInfo() const
{
public:
- InfoI(bool comp, const string& host, Ice::Int port, Ice::Byte protocolMajor, Ice::Byte protocolMinor,
- Ice::Byte encodingMajor, Ice::Byte encodingMinor, const std::string& mcastInterface, Ice::Int mcastTtl) :
- UDPEndpointInfo(-1, comp, host, port, protocolMajor, protocolMinor, encodingMajor, encodingMinor,
- mcastInterface, mcastTtl)
+ InfoI(const ProtocolVersion& pv, const EncodingVersion& ev, bool comp, const string& host, Ice::Int port,
+ const std::string& mcastInterface, Ice::Int mcastTtl) :
+ UDPEndpointInfo(pv, ev, -1, comp, host, port, mcastInterface, mcastTtl)
{
}
@@ -484,8 +341,7 @@ IceInternal::UdpEndpointI::getInfo() const
}
};
- return new InfoI(_compress, _host, _port, _protocolMajor, _protocolMinor, _encodingMajor, _encodingMinor,
- _mcastInterface, _mcastTtl);
+ return new InfoI(_protocol, _encoding, _compress, _host, _port, _mcastInterface, _mcastTtl);
}
Short
@@ -515,8 +371,8 @@ IceInternal::UdpEndpointI::connectionId(const string& connectionId) const
}
else
{
- return new UdpEndpointI(_instance, _host, _port, _mcastInterface, _mcastTtl, _protocolMajor, _protocolMinor,
- _encodingMajor, _encodingMinor, _connect, connectionId, _compress);
+ return new UdpEndpointI(_instance, _host, _port, _mcastInterface, _mcastTtl, _protocol, _encoding, _connect,
+ connectionId, _compress);
}
}
@@ -535,8 +391,8 @@ IceInternal::UdpEndpointI::compress(bool compress) const
}
else
{
- return new UdpEndpointI(_instance, _host, _port, _mcastInterface, _mcastTtl, _protocolMajor, _protocolMinor,
- _encodingMajor, _encodingMinor, _connect, _connectionId, compress);
+ return new UdpEndpointI(_instance, _host, _port, _mcastInterface, _mcastTtl, _protocol, _encoding, _connect,
+ _connectionId, compress);
}
}
@@ -556,9 +412,8 @@ TransceiverPtr
IceInternal::UdpEndpointI::transceiver(EndpointIPtr& endp) const
{
UdpTransceiver* p = new UdpTransceiver(_instance, _host, _port, _mcastInterface, _connect);
- endp = new UdpEndpointI(_instance, _host, p->effectivePort(), _mcastInterface, _mcastTtl, _protocolMajor,
- _protocolMinor, _encodingMajor, _encodingMinor, _connect, _connectionId,
- _compress);
+ endp = new UdpEndpointI(_instance, _host, p->effectivePort(), _mcastInterface, _mcastTtl, _protocol, _encoding,
+ _connect, _connectionId, _compress);
return p;
}
@@ -594,9 +449,8 @@ IceInternal::UdpEndpointI::expand() const
{
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));
+ endps.push_back(new UdpEndpointI(_instance, *p, _port, _mcastInterface, _mcastTtl, _protocol, _encoding,
+ _connect, _connectionId, _compress));
}
}
return endps;
@@ -627,47 +481,37 @@ IceInternal::UdpEndpointI::operator==(const LocalObject& r) const
return true;
}
- if(_host != p->_host)
+ if(_protocol != p->_protocol)
{
return false;
}
- if(_port != p->_port)
+ if(_encoding != p->_encoding)
{
return false;
}
- if(_compress != p->_compress)
- {
- return false;
- }
-
- if(_connectionId != p->_connectionId)
- {
- return false;
- }
-
- if(_connect != p->_connect)
+ if(_host != p->_host)
{
return false;
}
- if(_protocolMajor != p->_protocolMajor)
+ if(_port != p->_port)
{
return false;
}
- if(_protocolMinor != p->_protocolMinor)
+ if(_compress != p->_compress)
{
return false;
}
- if(_encodingMajor != p->_encodingMajor)
+ if(_connectionId != p->_connectionId)
{
return false;
}
- if(_encodingMinor != p->_encodingMinor)
+ if(_connect != p->_connect)
{
return false;
}
@@ -704,83 +548,65 @@ IceInternal::UdpEndpointI::operator<(const LocalObject& r) const
return false;
}
- if(_host < p->_host)
+ if(_protocol < p->_protocol)
{
return true;
}
- else if (p->_host < _host)
+ else if(p->_protocol < _protocol)
{
return false;
}
- if(_port < p->_port)
+ if(_encoding < p->_encoding)
{
return true;
}
- else if(p->_port < _port)
+ else if(p->_encoding < _encoding)
{
return false;
}
- if(_connectionId < p->_connectionId)
- {
- return true;
- }
- else if(p->_connectionId < _connectionId)
- {
- return false;
- }
-
- if(!_compress && p->_compress)
- {
- return true;
- }
- else if(p->_compress < _compress)
- {
- return false;
- }
-
- if(!_connect && p->_connect)
+ if(_host < p->_host)
{
return true;
}
- else if(!p->_connect && _connect)
+ else if (p->_host < _host)
{
return false;
}
- if(_protocolMajor < p->_protocolMajor)
+ if(_port < p->_port)
{
return true;
}
- else if(p->_protocolMajor < _protocolMajor)
+ else if(p->_port < _port)
{
return false;
}
- if(_protocolMinor < p->_protocolMinor)
+ if(_connectionId < p->_connectionId)
{
return true;
}
- else if(p->_protocolMinor < _protocolMinor)
+ else if(p->_connectionId < _connectionId)
{
return false;
}
- if(_encodingMajor < p->_encodingMajor)
+ if(!_compress && p->_compress)
{
return true;
}
- else if(p->_encodingMajor < _encodingMajor)
+ else if(p->_compress < _compress)
{
return false;
}
- if(_encodingMinor < p->_encodingMinor)
+ if(!_connect && p->_connect)
{
return true;
}
- else if(p->_encodingMinor < _encodingMinor)
+ else if(!p->_connect && _connect)
{
return false;
}
@@ -826,8 +652,8 @@ IceInternal::UdpEndpointI::connectors(const vector<struct sockaddr_storage>& add
vector<ConnectorPtr> connectors;
for(unsigned int i = 0; i < addresses.size(); ++i)
{
- connectors.push_back(new UdpConnector(_instance, addresses[i], _mcastInterface, _mcastTtl, _protocolMajor,
- _protocolMinor, _encodingMajor, _encodingMinor, _connectionId));
+ connectors.push_back(new UdpConnector(_instance, addresses[i], _mcastInterface, _mcastTtl, _protocol, _encoding,
+ _connectionId));
}
return connectors;
}